Merge branch 'org.openembedded.dev' of git@git.openembedded.net:openembedded into...
authorCliff Brake <cbrake@bec-systems.com>
Mon, 16 Feb 2009 15:03:32 +0000 (10:03 -0500)
committerCliff Brake <cbrake@bec-systems.com>
Mon, 16 Feb 2009 15:03:32 +0000 (10:03 -0500)
355 files changed:
MAINTAINERS
classes/icecc.bbclass
classes/module-base.bbclass
classes/module_strip.bbclass
classes/package.bbclass
classes/package_ipk.bbclass
classes/sanity.bbclass
conf/bitbake.conf
conf/checksums.ini
conf/distro/angstrom-2008.1.conf
conf/distro/include/angstrom-uclibc.inc
conf/distro/include/fso-autorev.inc
conf/distro/include/kaeilos.inc [new file with mode: 0644]
conf/distro/include/moko-autorev.inc
conf/distro/include/preferred-om-2008-versions.inc
conf/distro/include/preferred-slugos-versions.inc [new file with mode: 0644]
conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
conf/distro/include/sane-srcrevs.inc
conf/distro/include/slugos.inc
conf/distro/kaeilos.conf [new file with mode: 0644]
conf/machine/beagleboard.conf
conf/machine/collie.conf
conf/machine/include/kexecboot.inc
conf/machine/include/orion.inc
conf/machine/om-gta03.conf [new file with mode: 0644]
conf/machine/overo.conf
conf/machine/ronetix-pm9261.conf [new file with mode: 0644]
conf/machine/ronetix-pm9263.conf [new file with mode: 0644]
contrib/angstrom/build-feeds.sh
contrib/angstrom/build-release.sh
contrib/artwork/oe.svg
contrib/artwork/powered-by-oe.svg
packages/adobe-flash/flash-plugin_10.0.12.36.bb [new file with mode: 0644]
packages/alsa/alsa-state.bb
packages/alsa/alsa-state/at91sam9263ek/asound.conf [new file with mode: 0644]
packages/alsa/alsa-utils_1.0.18.bb
packages/alsa/files/alsa-utils-autoconf-strl-funcs.patch [new file with mode: 0644]
packages/at76c503a/at76c503a-modules/at76_usb-0.17-.patch [new file with mode: 0644]
packages/at76c503a/at76c503a-modules_0.17.bb
packages/aufs/aufs/aufs_create_no_manpage.patch [deleted file]
packages/aufs/aufs_cvs.bb
packages/avahi/avahi_0.6.24.bb [new file with mode: 0644]
packages/base-files/base-files/kaeilos/issue [new file with mode: 0644]
packages/base-files/base-files/kaeilos/issue.net [new file with mode: 0644]
packages/base-files/base-files_3.0.14.bb
packages/bison/bison-native_2.3.bb
packages/blackbox/blackbox_0.70.1.bb
packages/busybox/busybox-1.11.3/kaeilos/defconfig [new file with mode: 0644]
packages/busybox/busybox-1.13.2/get_header_tar.patch [new file with mode: 0644]
packages/busybox/busybox-1.13.2/kaeilos/defconfig [new file with mode: 0644]
packages/busybox/busybox-1.13.2/slugos/defconfig
packages/busybox/busybox-static_1.11.3.bb
packages/busybox/busybox.inc
packages/busybox/busybox_1.11.3.bb
packages/busybox/busybox_1.13.2.bb
packages/busybox/busybox_1.7.2.bb
packages/busybox/busybox_1.9.2.bb
packages/busybox/files/mountall [new file with mode: 0644]
packages/busybox/slingbox_1.3.1.bb
packages/clutter/aaina_svn.bb
packages/clutter/clutter_0.8+git.bb [new file with mode: 0644]
packages/clutter/clutter_0.8+svn.bb [deleted file]
packages/cups/cups-1.3.8/use_echo_only_in_init.patch [new file with mode: 0644]
packages/cups/cups_1.3.8.bb [new file with mode: 0644]
packages/dhcp/dhcp_3.0.2.bb
packages/dnsmasq/dnsmasq-dbus_2.46.bb [deleted file]
packages/dnsmasq/dnsmasq-dbus_2.47.bb [new file with mode: 0644]
packages/dnsmasq/dnsmasq_2.46.bb [deleted file]
packages/dnsmasq/dnsmasq_2.47.bb [new file with mode: 0644]
packages/dnsmasq/files/dbus_introspection.patch [deleted file]
packages/dsplink/codec-engine_2.21.bb
packages/dsplink/dmai_1.20.bb [new file with mode: 0644]
packages/dsplink/dsplink.inc
packages/dsplink/dsplink_1.60.bb
packages/dsplink/files/built-with-angstrom.patch [new file with mode: 0644]
packages/dsplink/files/cmem-class-device-27-and-sched-include-fix.patch [new file with mode: 0644]
packages/dsplink/files/do-not-panic-on-mixer-failure.patch [new file with mode: 0644]
packages/dsplink/files/dsplink-semaphore-27.patch [new file with mode: 0644]
packages/dsplink/files/lpm-device-create-and-semaphore-include-fix.patch [new file with mode: 0644]
packages/dsplink/files/support-32bit-align.patch [new file with mode: 0644]
packages/dsplink/files/update-cpu-name.patch [new file with mode: 0644]
packages/dsplink/files/update-fb-display.patch [new file with mode: 0644]
packages/dsplink/files/update-v4l2-display.patch [new file with mode: 0644]
packages/dsplink/gstreamer-ti_svn.bb
packages/dsplink/readme.txt [new file with mode: 0644]
packages/dsplink/ti-paths.inc
packages/euphony/euphony_0.1.2.bb [deleted file]
packages/euphony/euphony_0.1.3.bb [new file with mode: 0644]
packages/evtest/evtest_1.23.bb [new file with mode: 0644]
packages/ezx/ezx-gen-blob_svn.bb [new file with mode: 0644]
packages/freesmartphone/fso-abyss/abyss.conf [new file with mode: 0644]
packages/freesmartphone/fso-abyss/om-gta01/abyss.conf [new file with mode: 0644]
packages/freesmartphone/fso-abyss/om-gta02/abyss.conf [new file with mode: 0644]
packages/freesmartphone/fso-abyss/om-gta03/abyss.conf [new file with mode: 0644]
packages/freesmartphone/fso-abyss_git.bb
packages/freesmartphone/libframeworkd-glib_git.bb
packages/freesmartphone/libgsm0710_git.bb [new file with mode: 0644]
packages/fuse/sshfs-fuse_2.2.bb [new file with mode: 0644]
packages/gcc/gcc-common.inc
packages/glibc/glibc-initial.inc
packages/glibc/glibc-initial_2.7.bb [new file with mode: 0644]
packages/glibc/glibc_2.7.bb
packages/images/jlime-opie.bb
packages/images/x11-gpe-image.bb
packages/images/x11-gpe-java-image.bb
packages/images/x11-office-image.bb
packages/images/x11-pimlico-image.bb
packages/iscsi-target/files/2.6.29.patch [new file with mode: 0644]
packages/iscsi-target/iscsi-target_0.4.17.bb
packages/kaeilos/kaeilos-version.bb [new file with mode: 0644]
packages/kexecboot/kexecboot-cfg_0.1.bb
packages/libsmi/libsmi_0.4.8.bb [new file with mode: 0644]
packages/libssh/files/libssh_libdir_fix.patch [new file with mode: 0644]
packages/libssh/libssh_0.11.bb
packages/libssh/libssh_0.2.bb [new file with mode: 0644]
packages/linux/at91_2.6.28.bb [deleted file]
packages/linux/linux-2.6.25.20/ronetix-pm9261/defconfig [new file with mode: 0644]
packages/linux/linux-2.6.25.20/ronetix-pm9263/defconfig [new file with mode: 0644]
packages/linux/linux-2.6.27/boc01/013-090116-lcd.patch [deleted file]
packages/linux/linux-2.6.27/boc01/013-090209-lcd.patch [new file with mode: 0644]
packages/linux/linux-2.6.27/boc01/014-090115-pm-wakeup.patch [deleted file]
packages/linux/linux-2.6.27/boc01/014-090209-pm-wakeup.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2 [deleted file]
packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-exp.patch.bz2 [deleted file]
packages/linux/linux-2.6.28/collie/0001-collie-start-scoop-converton-to-new-api.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0002-add-locomo_spi-driver.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0003-enable-cpufreq-for-collie.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0004-fix-dma-for-SA1100.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0005-fix-collie-keyboard-bug.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0006-add-collie-flash-hack.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0007-hostap-workaround-for-buggy-sa1100-pcmcia-driver.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0008-fix-collie-suspend-hack.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0009-add-sa1100-usb-gadget-driver-hack.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0010-mmc_spi-add-suspend-and-resume-callbacks.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0011-move-drivers-mfd-.h-to-include-linux-mfd.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0012-move-ucb1200-ts-driver.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0013-add-collie-touchscreen-driver.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0014-collie-locomo-led-change-default-trigger.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0015-SA1100-make-gpio_to_irq-and-reverse-a-macro.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0016-add-gpiolib-support-to-ucb1x00.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0017-collie-convert-to-gpiolib-for-ucb1x00.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0018-collie-add-battery-driver.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0019-collie-support-pda_power-driver.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0020-remove-collie_pm.c.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0021-mmc-trivial-annotation-of-blocks.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0022-mmc_block-print-better-error-messages.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/0023-mmc_block-ensure-all-sectors-that-do-not-have-error.patch [new file with mode: 0644]
packages/linux/linux-2.6.28/collie/defconfig [new file with mode: 0644]
packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2 [new file with mode: 0644]
packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2 [new file with mode: 0644]
packages/linux/linux-2.6.28/ronetix-pm9263/defconfig [new file with mode: 0644]
packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch [new file with mode: 0644]
packages/linux/linux-linkstationppc/defconfig
packages/linux/linux-linkstationppc/fw-and-powerpc-install.patch [new file with mode: 0644]
packages/linux/linux-linkstationppc_2.6.27.10.bb [deleted file]
packages/linux/linux-linkstationppc_2.6.28.4.bb [new file with mode: 0644]
packages/linux/linux-n1200/defconfig
packages/linux/linux-n1200_2.6.27-rc9+git.bb
packages/linux/linux-omap-2.6.28/add-resizer-driver.patch [new file with mode: 0644]
packages/linux/linux-omap-2.6.28/overo/defconfig
packages/linux/linux-omap-2.6.28/overo/overo-ehci.patch [new file with mode: 0644]
packages/linux/linux-omap_2.6.28.bb
packages/linux/linux-orion/defconfig
packages/linux/linux-orion_2.6.27.10.bb [deleted file]
packages/linux/linux-orion_2.6.28.4.bb [new file with mode: 0644]
packages/linux/linux_2.6.25.20.bb [new file with mode: 0644]
packages/linux/linux_2.6.27.bb
packages/linux/linux_2.6.28.bb
packages/lmbench/lmbench/lmbench-run
packages/lmbench/lmbench_2.0.4.bb
packages/lmbench/lmbench_2.5.bb
packages/lowpan-utils/lowpan-utils_git.bb [new file with mode: 0644]
packages/ltp/ltp-20090131/cross-compile.patch [new file with mode: 0644]
packages/ltp/ltp-20090131/fix-tcore_patch_test_suites.patch [new file with mode: 0644]
packages/ltp/ltp-20090131/no-IDcheck.patch [new file with mode: 0644]
packages/ltp/ltp-20090131/no_epoll_create2_mips.patch [new file with mode: 0644]
packages/ltp/ltp-20090131/no_hyperthreading_tests.patch [new file with mode: 0644]
packages/ltp/ltp-20090131/runltp-path.patch [new file with mode: 0644]
packages/ltp/ltp_20090131.bb [new file with mode: 0644]
packages/maemo4/libosso/libosso-dont-use-inline.patch [new file with mode: 0644]
packages/maemo4/libosso_2.13.bb
packages/make/mingw-make-canadian-sdk_3.81.bb [new file with mode: 0644]
packages/meta/meta-toolchain-slugos.bb
packages/meta/slugos-packages.bb
packages/mingw/mingw-runtime-headers_3.15.2.bb [new file with mode: 0644]
packages/mingw/mingw-runtime_3.15.2.bb [new file with mode: 0644]
packages/mini-httpd/.mini-httpd_1.19.bb.swp [new file with mode: 0644]
packages/mini-httpd/files/init [new file with mode: 0644]
packages/mini-httpd/files/mini-httpd.conf [new file with mode: 0644]
packages/mini-httpd/files/new-bindir-mandir.patch [new file with mode: 0644]
packages/mini-httpd/files/remove-CC.patch [new file with mode: 0644]
packages/mini-httpd/mini-httpd_1.19.bb [new file with mode: 0644]
packages/minicom/minicom_2.3.bb [new file with mode: 0644]
packages/mktemp/files/add_destdir.patch [new file with mode: 0644]
packages/mktemp/files/disable-strip.patch [new file with mode: 0644]
packages/mktemp/mktemp_1.6.bb [new file with mode: 0644]
packages/mpeg-encode/files/fixup.patch [new file with mode: 0644]
packages/mpeg-encode/mpeg-encode_1.5b.bb [new file with mode: 0644]
packages/mutagen/mutagen_1.15.bb [new file with mode: 0644]
packages/neon/files/gnutls-2.patch [new file with mode: 0644]
packages/net-snmp/net-snmp.inc [new file with mode: 0644]
packages/net-snmp/net-snmp_5.1.2.bb
packages/net-snmp/net-snmp_5.4.1.bb
packages/net-snmp/net-snmp_svn.bb [new file with mode: 0644]
packages/netbase/netbase/ronetix-pm9261/interfaces [new file with mode: 0644]
packages/netbase/netbase/ronetix-pm9263/interfaces [new file with mode: 0644]
packages/nonworking/e2fsprogs/e2fsprogs_1.41.2.bb [new file with mode: 0644]
packages/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch [new file with mode: 0644]
packages/nrlolsr/nrlolsr_7.8.1.bb [new file with mode: 0644]
packages/ntfs-3g/ntfs-3g_1.0.bb
packages/ntfs-3g/ntfs-3g_2009.1.1.bb [new file with mode: 0644]
packages/ogre/ogre-egl_svn.bb
packages/ogre/wgois_1.2.0.bb [new file with mode: 0644]
packages/opkg/files/opkg_unarchive.patch [new file with mode: 0644]
packages/opkg/files/opkg_wget_nogpg_04_default_tmpdir.patch [new file with mode: 0644]
packages/opkg/opkg-native_svn.bb
packages/opkg/opkg-nogpg-nocurl_svn.bb
packages/opkg/opkg-nogpg_svn.bb
packages/opkg/opkg-sdk_svn.bb
packages/opkg/opkg.inc
packages/opkg/opkg_svn.bb
packages/parted/files/parted-1.8.x.patch [new file with mode: 0644]
packages/parted/files/syscalls.h [deleted file]
packages/parted/files/syscalls.patch [deleted file]
packages/parted/files/use_llseek_syscall.patch [new file with mode: 0644]
packages/parted/parted-1.8.0/memory_allocation.patch [deleted file]
packages/parted/parted_1.6.23.bb [deleted file]
packages/parted/parted_1.6.25.1.bb [deleted file]
packages/parted/parted_1.8.0.bb [deleted file]
packages/parted/parted_1.8.2.bb [deleted file]
packages/parted/parted_1.8.7.bb [deleted file]
packages/parted/parted_1.8.8.bb
packages/pax-utils/pax-utils-native_0.1.19.bb [new file with mode: 0644]
packages/pax-utils/pax-utils_0.1.13.bb
packages/pax-utils/pax-utils_0.1.19.bb [new file with mode: 0644]
packages/perl/libdate-manip-perl-native_5.54.bb [new file with mode: 0644]
packages/perl/libdate-manip-perl_5.54.bb [new file with mode: 0644]
packages/perl/libdbd-mysql-perl-native_4.010.bb [new file with mode: 0644]
packages/perl/libdbd-mysql-perl.inc [new file with mode: 0644]
packages/perl/libdbd-mysql-perl_4.010.bb [new file with mode: 0644]
packages/perl/libdbi-perl-native_1.607.bb [new file with mode: 0644]
packages/perl/libdbi-perl_1.607.bb [new file with mode: 0644]
packages/perl/libdevice-serialport-perl-native_1.04.bb [new file with mode: 0644]
packages/perl/libemail-date-format-perl-native_1.002.bb [new file with mode: 0644]
packages/perl/libemail-date-format-perl_1.002.bb [new file with mode: 0644]
packages/perl/libhtml-parser-perl_3.60.bb [new file with mode: 0644]
packages/perl/libhtml-tagset-perl_3.20.bb [new file with mode: 0644]
packages/perl/libmime-lite-perl-native_3.024.bb [new file with mode: 0644]
packages/perl/libmime-lite-perl_3.024.bb [new file with mode: 0644]
packages/perl/libmodule-load-perl-native_0.16.bb [new file with mode: 0644]
packages/perl/libmodule-load-perl_0.16.bb [new file with mode: 0644]
packages/perl/libphp-serialization-perl-native_0.30.bb [new file with mode: 0644]
packages/perl/libphp-serialization-perl_0.30.bb [new file with mode: 0644]
packages/perl/libsys-mmap-perl-native_0.13.bb [new file with mode: 0644]
packages/perl/libsys-mmap-perl_0.13.bb [new file with mode: 0644]
packages/perl/libx10-perl-native_0.03.bb [new file with mode: 0644]
packages/perl/libx10-perl_0.03.bb [new file with mode: 0644]
packages/popt/popt-1.13/iconv.patch [deleted file]
packages/popt/popt-native_1.14.bb [deleted file]
packages/popt/popt-native_1.7.bb
packages/popt/popt_1.14.bb [deleted file]
packages/popt/popt_1.7.bb
packages/powervr-drivers/libgles-omap3_3.00.00.06.bb
packages/psplash/files/kaeilos/psplash-hand-img.h [new file with mode: 0644]
packages/psplash/psplash_svn.bb
packages/python/python-coherence_svn.bb
packages/python/python-divmodaxiom_0.5.30.bb [new file with mode: 0644]
packages/python/python-divmodepsilon-native_0.5.11.bb [new file with mode: 0644]
packages/python/python-pycrypto_git.bb [new file with mode: 0644]
packages/python/python-pyflakes_0.2.1.bb [deleted file]
packages/python/python-pyflakes_0.3.0.bb [new file with mode: 0644]
packages/python/python-pygobject_2.16.0.bb
packages/python/python_2.6.1.bb
packages/qhull/qhull_2003.1.bb [new file with mode: 0644]
packages/qhull/tetgen_1.4.2.bb [new file with mode: 0644]
packages/qi/files/sanitize-makefile.patch [new file with mode: 0644]
packages/qi/qi.inc
packages/qi/qi_git.bb
packages/rpm2cpio/rpm2cpio-native_1.2_2.bb
packages/rt2x00/rt61-firmware_1.2.bb [new file with mode: 0644]
packages/ruby/files/openssl.patch [new file with mode: 0644]
packages/ruby/ruby.inc
packages/samba/files/configure-3.2.7.patch [deleted file]
packages/samba/files/configure-3.2.8.patch [new file with mode: 0644]
packages/samba/files/smb.conf
packages/samba/samba-ads-3.3.0/wbstatic.patch [new file with mode: 0644]
packages/samba/samba-ads.inc
packages/samba/samba-ads_3.2.7.bb [deleted file]
packages/samba/samba-ads_3.2.8.bb [new file with mode: 0644]
packages/samba/samba-ads_3.3.0.bb
packages/samba/samba-basic.inc
packages/samba/samba.inc
packages/samba/samba_3.0.23c.bb
packages/samba/samba_3.0.34.bb
packages/samba/samba_3.2.7.bb [deleted file]
packages/samba/samba_3.2.8.bb [new file with mode: 0644]
packages/samba/samba_3.3.0.bb
packages/slugos-init/files/setup-optware.sh [new file with mode: 0644]
packages/slugos-init/slugos-init_5.0.bb
packages/sun-jre/sun-jre6_1.6.0.10.bb [new file with mode: 0644]
packages/tasks/task-base.bb
packages/tasks/task-boot.bb
packages/tasks/task-openmoko-feed.bb
packages/tasks/task-slugos-toolchain-target.bb [new file with mode: 0644]
packages/tnef/tnef.inc [new file with mode: 0644]
packages/tnef/tnef_1.4.5.bb [new file with mode: 0644]
packages/u-boot/u-boot-1.3.2/boc01/001-090115-SPI.patch [deleted file]
packages/u-boot/u-boot-1.3.2/boc01/001-090205-SPI.patch [new file with mode: 0644]
packages/u-boot/u-boot-1.3.2/boc01/010-081212-LCD.patch
packages/u-boot/u-boot-1.3.2/boc01/013-081211-FIX_OOB_8BITS_LARGEPAGE_NAND.patch [deleted file]
packages/u-boot/u-boot-1.3.2/boc01/013-090206-FIX_OOB_8BITS_LARGEPAGE_NAND.patch [new file with mode: 0644]
packages/u-boot/u-boot-1.3.2/boc01/014-081211-BOOT_RESCUE.patch
packages/u-boot/u-boot-1.3.2/boc01/015-090205-EMC.patch [new file with mode: 0644]
packages/u-boot/u-boot-1.3.2/boc01/016-090209-PM.patch [new file with mode: 0644]
packages/u-boot/u-boot_1.3.2.bb
packages/udev/files/permissions.rules
packages/udev/udev-092/permissions.rules
packages/udev/udev-097/permissions.rules
packages/udev/udev-100/permissions.rules
packages/udev/udev-124/init
packages/udev/udev-124/permissions.rules
packages/udev/udev_092.bb
packages/udev/udev_097.bb
packages/udev/udev_100.bb
packages/udev/udev_124.bb
packages/v4l2apps/libv4l_0.5.7.bb [deleted file]
packages/v4l2apps/libv4l_0.5.8.bb [new file with mode: 0644]
packages/vala-terminal/vala-terminal_git.bb
packages/vala/files/expose-bytesarray-struct.patch [new file with mode: 0644]
packages/vala/vala-native_0.5.6.bb
packages/vala/vala.inc
packages/vala/vala_0.5.6.bb
packages/vlc/vlc.inc
packages/vlc/vlc_0.9.8a.bb
packages/webkit/webkit-gtk/GNUmakefile.am
packages/webkit/webkit-gtk/acinclude.m4
packages/webkit/webkit-gtk/autogen.sh
packages/webkit/webkit-gtk/configure.ac
packages/webkit/webkit-gtk_svn.bb
packages/wireshark/files/acinclude-net-snmp-fix.patch [new file with mode: 0644]
packages/wireshark/files/ieee80215.4.patch [new file with mode: 0644]
packages/wireshark/files/libtool-fix.patch [new file with mode: 0644]
packages/wireshark/tshark_0.99.4.bb
packages/wireshark/wireshark.inc [new file with mode: 0644]
packages/wireshark/wireshark_0.99.4.bb
packages/wireshark/wireshark_1.0.5.bb [new file with mode: 0644]
packages/wt/wt_2.2.3.bb
packages/xorg-driver/xf86-video-geode_2.11.0.bb [new file with mode: 0644]
packages/xorg-driver/xf86-video-glamo_git.bb [new file with mode: 0644]
packages/xorg-xserver/xserver-xorg-conf/overo/xorg.conf [new file with mode: 0644]
packages/yasr/files/yasr-0.6.9-gcc43.patch [new file with mode: 0644]
packages/yasr/files/yasr-0.6.9-remove-m4.patch [new file with mode: 0644]
packages/yasr/yasr_0.6.9.bb [new file with mode: 0644]
packages/zope/zope-native_3.3.1.bb [new file with mode: 0644]
packages/zope/zope_3.3.1.bb

index c8c154f..2a0cd1e 100644 (file)
@@ -243,6 +243,10 @@ Mail:       shanevolpe@gmail.com
 Machines:   logicpd-pxa270, at91-l9260
 Recipes:    directfb, php
 
+Person:     Steffen Sledz
+Mail:       sledz@dresearch.de
+Machines:   oxnas
+
 Person:     Stelios Koroneos
 Mail:       skoroneos@digital-opsis.com
 Website:    http://www.digital-opsis.com
index 7222f6b..dce29fb 100644 (file)
@@ -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
index c98bace..185803e 100644 (file)
@@ -7,7 +7,7 @@ export CROSS_COMPILE = "${TARGET_PREFIX}"
 
 export KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}"
 export KERNEL_SOURCE = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-source')}"
-KERNEL_OBJECT_SUFFIX = "${@[".o", ".ko"][base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion') > "2.6.0"]}"
+KERNEL_OBJECT_SUFFIX = "${@[".o", ".ko"][base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion') < "2.6.0"]}"
 KERNEL_CCSUFFIX = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-ccsuffix')}"
 KERNEL_LDSUFFIX = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-ldsuffix')}"
 KERNEL_ARSUFFIX = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-arsuffix')}"
index 63e6569..3316e20 100644 (file)
@@ -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
index a7cdb5f..5559592 100644 (file)
@@ -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 () {
index 3a97729..89d5071 100644 (file)
@@ -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:
index da3e630..29624c3 100644 (file)
@@ -112,8 +112,11 @@ def check_sanity(e):
                missing = missing.rstrip(',')
                messages = messages + "Please install following missing utilities: %s\n" % missing
 
-       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"
+       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:
index 81d4c93..9aefb63 100644 (file)
@@ -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 = ""
@@ -494,6 +499,7 @@ FREESMARTPHONE_GIT = "git://git.freesmartphone.org"
 GENTOO_MIRROR = "http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles"
 APACHE_MIRROR = "http://www.apache.org/dist"
 KERNELORG_MIRROR = "http://kernel.org"
+ADOBE_MIRROR = "http://fpdownload.macromedia.com/get/flashplayer/current/"
 
 # You can use the mirror of your country to get faster downloads by putting
 #  export DEBIAN_MIRROR = "ftp://ftp.de.debian.org/debian/pool"
@@ -571,6 +577,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"
index 3d71cae..b306034 100644 (file)
@@ -150,10 +150,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
@@ -214,6 +226,10 @@ 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
@@ -294,6 +310,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
@@ -406,6 +430,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
@@ -498,6 +526,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
@@ -570,6 +602,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
@@ -902,6 +938,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
@@ -978,6 +1018,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
@@ -1042,6 +1086,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
@@ -1882,6 +1930,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
@@ -2318,6 +2370,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
@@ -4018,6 +4074,10 @@ 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.gnu.org/gnu/dejagnu/dejagnu-1.4.4.tar.gz]
 md5=053f18fd5d00873de365413cab17a666
 sha256=d0fbedef20fb0843318d60551023631176b27ceb1e11de7468a971770d0e048d
@@ -4314,6 +4374,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
@@ -4982,6 +5046,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
@@ -5034,6 +5102,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
@@ -5198,6 +5270,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
@@ -5450,6 +5526,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
@@ -12514,6 +12594,10 @@ 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
+
 [http://www.netfilter.org/projects/libnetfilter_queue/files/libnetfilter_queue-0.0.13.tar.bz2]
 md5=660cbfd3dc8c10bf9b1803cd2b688256
 sha256=1d6b180272befbfb19fedd80b5641354b82d6e719bf3d9ffa2d8287c62046536
@@ -12994,6 +13078,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
@@ -13074,6 +13162,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
@@ -13322,6 +13414,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
@@ -13942,6 +14038,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
@@ -14078,10 +14178,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
@@ -14858,14 +14966,26 @@ sha256=4f65183200955540c097b82bfb18f5d21b636ca79f47cd018a4ea8b89cd2998c
 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
@@ -14874,6 +14994,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
@@ -14982,6 +15106,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
@@ -15206,6 +15334,10 @@ sha256=30e454514ef84f65162182b7cbcd0e46fdda4c99111ac500b5b2df7678ca10fd
 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
@@ -15378,6 +15510,10 @@ sha256=302bea9f0903fecf13ee0e9c24ed090203f2c77f7164a2a0f68c35fc8e1b9f10
 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
@@ -15766,6 +15902,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
@@ -15918,6 +16058,10 @@ sha256=3b46936339fe5c2dcb8fb2f9213fa36dcddefaa1e00d1d93b5640d8cc9898ca1
 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
@@ -16186,6 +16330,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
@@ -16786,6 +16934,10 @@ 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://www.muru.com/linux/omap/patches/patch-2.6.9-omap1.bz2]
 md5=d6249654087f0bcafaa860ac573316a4
 sha256=91806347cb386002a8bfd20ee66e536e4a7dfb01f207dd751341f2971090d9ac
@@ -16822,10 +16974,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
@@ -17250,6 +17414,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
@@ -17914,6 +18082,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
@@ -18254,6 +18426,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
@@ -18738,6 +18914,10 @@ 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
+
 [http://xlibs.freedesktop.org/release/resourceext-1.0.tar.bz2]
 md5=007713326ca5f1adfd39f3cb587c3b9b
 sha256=78e0a532bb84d6d85e90244bf3bb0ee9a5246545ebc9b677173e37e231d30cdc
@@ -18830,6 +19010,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
@@ -19070,6 +19254,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
@@ -19210,6 +19398,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
@@ -19938,6 +20130,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
@@ -20370,6 +20566,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
@@ -20626,6 +20826,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
@@ -20774,6 +20978,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
@@ -21854,6 +22062,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
@@ -23078,6 +23290,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
@@ -24970,6 +25186,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
index 5de7ec9..062cba7 100644 (file)
@@ -91,16 +91,11 @@ 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
-
+# 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
@@ -192,8 +187,11 @@ require conf/distro/include/angstrom${ARM_ABI}.inc
 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 +199,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 +220,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&"
-
index 1f0b41f..86a9afd 100644 (file)
@@ -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"
 
index a84faf1..f4c64b1 100644 (file)
@@ -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,7 +12,9 @@ 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-mickeydbus = "${AUTOREV}"
 SRCREV_pn-mickeyterm = "${AUTOREV}"
 SRCREV_pn-python-pytrc = "${AUTOREV}"
+SRCREV_pn-qtopia0710muxd = "${AUTOREV}"
 SRCREV_pn-zhone = "${AUTOREV}"
diff --git a/conf/distro/include/kaeilos.inc b/conf/distro/include/kaeilos.inc
new file mode 100644 (file)
index 0000000..6d5ceb8
--- /dev/null
@@ -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)
index 08279e8..ce9f488 100644 (file)
@@ -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}"
index 433dc0d..6cbd032 100644 (file)
@@ -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"
+PREFERRED_VERSION_automake-native ?= "1.10"
 PREFERRED_VERSION_avahi ?= "0.6.22"
 PREFERRED_VERSION_avahi-python ?= "0.6.21"
 PREFERRED_VERSION_avahi-ui ?= "0.6.21"
@@ -1042,10 +1042,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"
@@ -1442,8 +1442,8 @@ 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"
@@ -1539,8 +1539,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"
diff --git a/conf/distro/include/preferred-slugos-versions.inc b/conf/distro/include/preferred-slugos-versions.inc
new file mode 100644 (file)
index 0000000..1c69b14
--- /dev/null
@@ -0,0 +1,95 @@
+#===============================================================================#
+#===============================================================================#
+#                              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:
+
+# 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"
+
index a81d5ec..1f60765 100644 (file)
@@ -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"
-
index ecc3d09..15baf2b 100644 (file)
@@ -57,7 +57,7 @@ SRCREV_pn-flashrom ?= "3682"
 SRCREV_pn-frameworkd ?= "700ab8250582767628165b7cf6f671ef756ba56d"
 SRCREV_pn-frameworkd-devel ?= "${SRCREV_pn-frameworkd}"
 SRCREV_pn-fsod ?= "3fa5eb6f2edcf7c9f0fc2027fda47b91d9f0f136"
-SRCREV_pn-fso-abyss ?= "4afeacb21c3d4193289e2b7db549a91751d75195"
+SRCREV_pn-fso-abyss ?= "09fd818470bb0da3b7614804f5141be52e0942c1"
 SRCREV_pn-fso-apm ?= "eb39ce7fb81bfa64e1a9eb5f142ca3d1065be3fa"
 SRCREV_pn-fso-gpsd ?= "78fe48dffb923175bde9f0aabc3500a9264a57e0"
 SRCREV_pn-fso-gsm0710muxd ?= "abcbcd7cc532a8834906de3fc24c8f8fe7643cd4"
@@ -82,8 +82,9 @@ 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 ?= "a05704a56003dc02dca784cef4176e97eaf9f688"
 SRCREV_pn-libgsmd ?= "4505"
 SRCREV_pn-libiac ?= "1590"
 SRCREV_pn-libjana ?= "713"
@@ -196,10 +197,11 @@ SRCREV_pn-pygsm ?= "976477f6b403f422b4ea730f71ebf409f6671141"
 SRCREV_pn-pylgrim ?= "20"
 SRCREV_pn-pyneod ?= "41de4d538b50b27ab2a2f5aae1a180b880a05b6a"
 SRCREV_pn-pyneog ?= "41de4d538b50b27ab2a2f5aae1a180b880a05b6a"
-SRCREV_pn-python-coherence ?= "1154"
+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"
@@ -207,7 +209,7 @@ 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 ?= "1fc83905fe99da92ff18e6ba671ee339477b1b9e"
 SRCREV_pn-remoko ?= "121"
 SRCREV_pn-remoko-server ?= "121"
 SRCREV_pn-s3c24xx-gpio ?= "4130"
@@ -229,12 +231,13 @@ SRCREV_pn-uclibc-initial ?= "24279"
 SRCREV_pn-usbpath ?= "3172"
 SRCREV_pn-usbpath-native ?= "3172"
 SRCREV_pn-vala-terminal ?= "94117f453ce884e9c30b611fae6fc19f85f98f2b"
-SRCREV_pn-webkit-gtk ?= "39964"
+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 ?= "f38cc52fbf11f7fe945797a6b8ade29ed479d924"
index c74624b..0f88755 100644 (file)
@@ -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
 #----------------------------------------------------------------------------------
@@ -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 (file)
index 0000000..fac86c8
--- /dev/null
@@ -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"
+
+DISTRO_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 \
+    "
index c95c373..78c6301 100644 (file)
@@ -32,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"
index b26df9d..6d09406 100644 (file)
@@ -13,7 +13,7 @@ SERIAL_CONSOLE = "115200 ttySA0"
 ROOT_FLASH_SIZE = "14"
 # actually 14680064, see EXTRA_IMAGECMD
 
-PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
+PREFERRED_PROVIDER_virtual/kernel = "linux"
 PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
 
 XSERVER ?= "xserver-kdrive-fbdev"
index c8656bb..1835af4 100644 (file)
@@ -13,4 +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_EXTRA_RRECOMMENDS_append = " kexecboot-cfg"
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_append = " kexecboot-cfg"
index c6fe6e3..9e16805 100644 (file)
@@ -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/om-gta03.conf b/conf/machine/om-gta03.conf
new file mode 100644 (file)
index 0000000..3bbb21e
--- /dev/null
@@ -0,0 +1,35 @@
+#-----------------------------------------------------------------------------
+#@TYPE: Machine
+#@NAME: Openmoko GTA03 (XXX)
+#@DESCRIPTION: Machine configuration for the Openmoko XXX GSM phone
+#-----------------------------------------------------------------------------
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-openmoko-2.6.28"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+
+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-kdrive-glamo xserver-kdrive-fbdev"
+
+# package machine specific modules
+MACHINE_EXTRA_RRECOMMENDS = "\
+  kernel-modules \
+"
+
+# no need to bypass this as in om-gta01, since this model is not using a multiplexed ttySAC0
+SERIAL_CONSOLE = "115200 ttySAC2"
+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
index 91413ec..2a93ab0 100644 (file)
@@ -29,4 +29,17 @@ XSERVER = "xserver-xorg \
 
 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/ronetix-pm9261.conf b/conf/machine/ronetix-pm9261.conf
new file mode 100644 (file)
index 0000000..5af1e72
--- /dev/null
@@ -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 (file)
index 0000000..96acbe2
--- /dev/null
@@ -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
+
index 14a185d..fc61f98 100755 (executable)
@@ -181,6 +181,7 @@ do
                       lighttpd \
                       links-x11 \
                       lirc \
+                      lowpan-utils \
                       m4 \
                       madplay \
                       mahjongg \
@@ -276,6 +277,7 @@ do
                       task-opie-apps \
                       task-opie-games \
                       task-proper-tools \
+                      task-xqtlauncher \
                       tasks \
                       texinfo \
                       thttpd \
@@ -295,8 +297,10 @@ do
                       viking \
                       vlc \
                       vpnc \
+                      w3cat \
                       wifi-radar \
                       win4 \
+                      wireshark \
                       wpa-gui \
                       wt \
                       x11vnc \
index d8144f8..62d4e1e 100755 (executable)
@@ -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,15 +76,6 @@ 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 h2200 hx4700 c7x0 akita spitz poodle collie
 do
@@ -95,7 +86,7 @@ done
 
 
 # graphics, flash storage
-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 
+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
@@ -129,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
index 8f3dd17..4af9587 100644 (file)
-<?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"?>\r
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<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"\r
+        width="209.104px" height="167.858px" viewBox="0 0 209.104 167.858" enable-background="new 0 0 209.104 167.858"\r
+        xml:space="preserve">\r
+<g>\r
+       <g>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       c1.41,1.396,2.114,3.13,2.114,5.147v4.729H73.304V154.262z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       s-2.195-0.838-2.195-2.195V142.86c0-1.357,0.838-2.195,2.195-2.195H99.738z"/>\r
+               <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\r
+                       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\r
+                        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"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       c1.41,1.396,2.115,3.13,2.115,5.147v4.729h-10.135V154.262z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       C148.433,145.056,148.067,145.207,147.741,145.532z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       C165.661,145.056,165.296,145.207,164.97,145.532z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       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"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       C200.118,145.056,199.753,145.207,199.427,145.532z"/>\r
+       </g>\r
+       <g>\r
+               <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\r
+                       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\r
+                       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\r
+                       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"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       c1.411,1.396,2.115,3.13,2.115,5.147v4.729H38.847V154.262z"/>\r
+               <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\r
+                       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\r
+                       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"/>\r
+               <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M10.134,147.928c0-1.601-1.273-2.87-2.872-2.872\r
+                       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\r
+                       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\r
+                       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\r
+                       C0.713,156.727,0,154.991,0,152.995V147.928z"/>\r
+       </g>\r
+       <g>\r
+               <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M25.428,79.124C25.428,35.424,60.853,0,104.552,0\r
+                       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\r
+                       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\r
+                       C29.568,108.032,25.428,94.062,25.428,79.124z"/>\r
+       </g>\r
+       <g>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       C98.791,89.554,94.122,84.884,94.122,79.124z"/>\r
+       </g>\r
+</g>\r
+</svg>\r
index 7e1c382..2898b09 100644 (file)
-<?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"?>\r
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        width="209.104px" height="204.298px" viewBox="0 0 209.104 204.298" enable-background="new 0 0 209.104 204.298"\r
+        xml:space="preserve">\r
+<g id="Layer_1">\r
+       <g>\r
+               <g>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               c1.41,1.396,2.114,3.13,2.114,5.147v4.729H73.304V190.701z"/>\r
+                       <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\r
+                               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\r
+                               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\r
+                               s-2.195-0.838-2.195-2.195V179.3c0-1.357,0.838-2.195,2.195-2.195H99.737z"/>\r
+                       <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\r
+                               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\r
+                                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"/>\r
+                       <path fill="#00BCE4" d="M130.897,182.337c-0.568,0.568-0.842,1.228-0.842,2.03v0.339h5.744v-0.339\r
+                               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\r
+                               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\r
+                               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\r
+                               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"/>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               C148.433,181.495,148.067,181.646,147.741,181.972z"/>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               C165.661,181.495,165.296,181.646,164.97,181.972z"/>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               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"/>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               C200.118,181.495,199.753,181.646,199.427,181.972z"/>\r
+               </g>\r
+               <g>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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"/>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               c1.41,1.396,2.114,3.13,2.114,5.147v4.729H38.847V190.701z"/>\r
+                       <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\r
+                               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\r
+                               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"/>\r
+                       <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M10.134,184.367c0-1.601-1.273-2.87-2.872-2.872\r
+                               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\r
+                               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\r
+                               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\r
+                               C0.713,193.166,0,191.431,0,189.435V184.367z"/>\r
+               </g>\r
+               <g>\r
+                       <path fill-rule="evenodd" clip-rule="evenodd" fill="#5C6F7B" d="M25.428,115.563c0-43.699,35.425-79.124,79.124-79.124\r
+                               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\r
+                               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\r
+                               C29.567,144.472,25.428,130.501,25.428,115.563z"/>\r
+               </g>\r
+               <g>\r
+                       <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\r
+                               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\r
+                               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\r
+                               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\r
+                               C98.791,125.993,94.122,121.323,94.122,115.563z"/>\r
+               </g>\r
+       </g>\r
+</g>\r
+<g id="text">\r
+       <g>\r
+               <path fill="#5C6F7B" d="M14.716,13.858c0-2.304-0.072-4.283-0.144-5.903h4.751l0.252,2.447h0.072\r
+                       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\r
+                       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\r
+                       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\r
+                       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"/>\r
+               <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\r
+                       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\r
+                       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"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       l-1.764,6.191h-5.147L53.563,7.955H59.143z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       c-2.304,0-3.24,2.088-3.384,3.563H92.28z"/>\r
+               <path fill="#5C6F7B" d="M100.15,13.75c0-2.592-0.072-4.283-0.144-5.795h4.715l0.181,3.239h0.144\r
+                       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\r
+                       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"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       c-2.305,0-3.24,2.088-3.385,3.563H123.83z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       c1.584,0,2.844-1.08,3.167-2.628c0.108-0.396,0.144-0.792,0.144-1.26V15.406z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       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\r
+                       c-0.071,0.324-0.108,0.648-0.108,1.008V18.069z"/>\r
+               <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\r
+                       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\r
+                       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\r
+                       c0-0.18-0.036-0.468-0.253-0.9l-6.443-16.09H184.162z"/>\r
+       </g>\r
+</g>\r
+</svg>\r
diff --git a/packages/adobe-flash/flash-plugin_10.0.12.36.bb b/packages/adobe-flash/flash-plugin_10.0.12.36.bb
new file mode 100644 (file)
index 0000000..d6cde60
--- /dev/null
@@ -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"
index a6c6134..3ebc0d5 100644 (file)
@@ -7,7 +7,7 @@
 DESCRIPTION = "Alsa Scenario Files"
 LICENSE = "MIT"
 PV = "0.2.0"
-PR = "r2"
+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 (file)
index 0000000..87bb5ec
--- /dev/null
@@ -0,0 +1,2 @@
+pcm.!default {  type hw  card 0  } 
+ctl.!default {  type hw  card 0  }
index 5bcad4f..2931545 100644 (file)
@@ -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 (file)
index 0000000..d736abb
--- /dev/null
@@ -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/at76c503a/at76c503a-modules/at76_usb-0.17-.patch b/packages/at76c503a/at76c503a-modules/at76_usb-0.17-.patch
new file mode 100644 (file)
index 0000000..06200f5
--- /dev/null
@@ -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);
+               }
index 58b782b..e0230de 100644 (file)
@@ -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 (file)
index ec7c0c1..0000000
+++ /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 *~ .*~
index cf98e08..815a24f 100644 (file)
@@ -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/avahi/avahi_0.6.24.bb b/packages/avahi/avahi_0.6.24.bb
new file mode 100644 (file)
index 0000000..15f56ff
--- /dev/null
@@ -0,0 +1,5 @@
+require avahi.inc
+
+DEPENDS += "intltool-native"
+
+PACKAGES =+ "libavahi-gobject"
diff --git a/packages/base-files/base-files/kaeilos/issue b/packages/base-files/base-files/kaeilos/issue
new file mode 100644 (file)
index 0000000..ea00fdb
--- /dev/null
@@ -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 (file)
index 0000000..781939c
--- /dev/null
@@ -0,0 +1,12 @@
+
+##    ##    ###    ######## #### ##        #######   ###### 
+##   ##    ## ##   ##        ##  ##       ##     ## ##    ## 
+##  ##    ##   ##  ##        ##  ##       ##     ## ##       
+#####    ##     ## ######    ##  ##       ##     ##  ######  
+##  ##   ######### ##        ##  ##       ##     ##       ## 
+##   ##  ##     ## ##        ##  ##       ##     ## ##    ## 
+##    ## ##     ## ######## #### ########  #######   ######(R)
+KaeilOS Linux %h
+
+KaeilOS 2008.1-test-20081222 %h
+
index 3072e23..8d57794 100644 (file)
@@ -1,7 +1,7 @@
 DESCRIPTION = "Miscellaneous files for the base system."
 SECTION = "base"
 PRIORITY = "required"
-PR = "r83"
+PR = "r84"
 LICENSE = "GPL"
 
 SRC_URI = " \
index ec2f269..af6249a 100644 (file)
@@ -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/
 }
index 50dc5a6..05010f9 100644 (file)
@@ -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/busybox/busybox-1.11.3/kaeilos/defconfig b/packages/busybox/busybox-1.11.3/kaeilos/defconfig
new file mode 100644 (file)
index 0000000..f3130ca
--- /dev/null
@@ -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/get_header_tar.patch b/packages/busybox/busybox-1.13.2/get_header_tar.patch
new file mode 100644 (file)
index 0000000..0121cd1
--- /dev/null
@@ -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 (file)
index 0000000..f3130ca
--- /dev/null
@@ -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
index 67c7a98..fd89ef6 100644 (file)
@@ -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
index 9313c89..cf82921 100644 (file)
@@ -1,4 +1,4 @@
 require busybox_${PV}.bb
-PR = "r2"
+PR = "r3"
 
 S = "${WORKDIR}/busybox-1.11.3"
index 4b195d5..cb8eb53 100644 (file)
@@ -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}
 }
index b42f8ea..305a0b6 100644 (file)
@@ -1,5 +1,5 @@
 require busybox.inc
-PR = "r13"
+PR = "r14"
 
 SRC_URI = "\
   http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
@@ -13,6 +13,7 @@ SRC_URI = "\
   file://default.script \
   file://hwclock.sh \
   file://mount.busybox \
+  file://mountall \
   file://syslog \
   file://syslog.conf \
   file://umount.busybox \
index 5ae76b9..e8f37a0 100644 (file)
@@ -1,5 +1,5 @@
 require busybox.inc
-PR = "r12"
+PR = "r15"
 
 SRC_URI = "\
   http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
@@ -12,6 +12,7 @@ SRC_URI = "\
   file://udhcpscript.patch;patch=1 \
   file://udhcpc-fix-nfsroot.patch;patch=1 \
   file://B921600.patch;patch=1 \
+  file://get_header_tar.patch;patch=1 \
   file://find-touchscreen.sh \
   file://busybox-cron \
   file://busybox-httpd \
@@ -19,6 +20,7 @@ SRC_URI = "\
   file://default.script \
   file://hwclock.sh \
   file://mount.busybox \
+  file://mountall \
   file://syslog \
   file://syslog.conf \
   file://umount.busybox \
@@ -31,6 +33,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
 }
 
index e98e25e..9d6e01c 100644 (file)
@@ -1,5 +1,5 @@
 require busybox.inc
-PR = "r11"
+PR = "r12"
 
 SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
            file://busybox-cron \
@@ -8,6 +8,7 @@ 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 \
index 77dd2a9..eb8d372 100644 (file)
@@ -1,5 +1,5 @@
 require busybox.inc
-PR = "r4"
+PR = "r5"
 
 SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
            file://udhcpscript.patch;patch=1 \
@@ -12,6 +12,7 @@ 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://umount.busybox \
diff --git a/packages/busybox/files/mountall b/packages/busybox/files/mountall
new file mode 100644 (file)
index 0000000..d5408b8
--- /dev/null
@@ -0,0 +1 @@
+MOUNTALL="-t nonfs,nosmbfs,noncpfs"
index cbcce6c..0a9051d 100644 (file)
@@ -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 \
index 52a2b3a..862dfd8 100644 (file)
@@ -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_0.8+git.bb b/packages/clutter/clutter_0.8+git.bb
new file mode 100644 (file)
index 0000000..b578cbe
--- /dev/null
@@ -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 (file)
index a203165..0000000
+++ /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/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 (file)
index 0000000..21ff0e5
--- /dev/null
@@ -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.3.8.bb b/packages/cups/cups_1.3.8.bb
new file mode 100644 (file)
index 0000000..e9fd985
--- /dev/null
@@ -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 "
index f8d8508..faf22b2 100644 (file)
@@ -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/dnsmasq/dnsmasq-dbus_2.46.bb b/packages/dnsmasq/dnsmasq-dbus_2.46.bb
deleted file mode 100644 (file)
index f6070a1..0000000
+++ /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 (file)
index 0000000..d03dbdb
--- /dev/null
@@ -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 (file)
index 9a79c6e..0000000
+++ /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 (file)
index 0000000..83aea1d
--- /dev/null
@@ -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 (file)
index 52cbb6e..0000000
+++ /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);
index 1b958bd..5040867 100644 (file)
@@ -8,7 +8,7 @@ RDEPENDS = "update-modules"
 inherit module
 
 # tconf from xdctools dislikes '.' in pwd :/
-PR = "r7"
+PR = "r8"
 PV = "221"
 
 # Get CE tarball from TI website, place in sources and calculate
@@ -16,7 +16,9 @@ PV = "221"
 # 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://cmem-class-device-27-and-sched-include-fix.patch;patch=1 \
+           file://dsplink-semaphore-27.patch;patch=1 \
+           file://lpm-device-create-and-semaphore-include-fix.patch;patch=1 \
            file://Makefile.dsplink \
            file://Makefile-dsplink-kbuild \
            file://Makefile-dsplink-gpp \
@@ -42,8 +44,19 @@ do_compile_append() {
         -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
+        -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 '/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 \
diff --git a/packages/dsplink/dmai_1.20.bb b/packages/dsplink/dmai_1.20.bb
new file mode 100644 (file)
index 0000000..12cbea4
--- /dev/null
@@ -0,0 +1,44 @@
+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_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://update-cpu-name.patch;patch=1 \
+          file://update-fb-display.patch;patch=1 \
+          file://update-v4l2-display.patch;patch=1 \
+          file://do-not-panic-on-mixer-failure.patch;patch=1 \
+          file://support-32bit-align.patch;patch=1 \
+#         file://resizer-fix.patch;patch=1 \
+          file://built-with-angstrom.patch;patch=1 \
+          "
+
+S = "${WORKDIR}/dmai_1_20_00_06"
+# Yes, the xdc stuff still breaks with a '.' in PWD
+PV = "120"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+TARGET = "all"
+TARGET_neuros-osd2 = " dm6446_al dm6446_db"
+TARGET_beagleboard = " o3530_al"
+
+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 () {
+       oe_runmake install
+}
+
+do_stage () {
+       :
+}
index b263be3..002d08d 100644 (file)
@@ -21,11 +21,6 @@ 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 = ""
@@ -64,7 +59,6 @@ do_compile () {
        unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
        export KDIR=${STAGING_KERNEL_DIR}
        make -e all
-
        make -e -f ${WORKDIR}/Makefile-dsplink-dsp
 
 #lpm bits
@@ -97,13 +91,8 @@ do_compile () {
                # 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
 
+               cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
                oe_runmake clean
                oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
                KERNEL_SRC=${STAGING_KERNEL_DIR}    \
index 7474e85..3814f63 100644 (file)
@@ -1,7 +1,7 @@
 require dsplink.inc
 
 # The tconf tool breaks if there is a '.' in your pwd
-PR = "r7"
+PR = "r8"
 PE = "1"
 PV = "160"
 
@@ -10,6 +10,7 @@ PV = "160"
 # 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://dsplink-semaphore-27.patch;patch=1;pnum=4 \
                file://Makefile-dsplink-gpp \
                file://Makefile-dsplink-dsp \
 "
diff --git a/packages/dsplink/files/built-with-angstrom.patch b/packages/dsplink/files/built-with-angstrom.patch
new file mode 100644 (file)
index 0000000..fc49789
--- /dev/null
@@ -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/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 (file)
index 0000000..8eb3210
--- /dev/null
@@ -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/do-not-panic-on-mixer-failure.patch b/packages/dsplink/files/do-not-panic-on-mixer-failure.patch
new file mode 100644 (file)
index 0000000..20e1aec
--- /dev/null
@@ -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/dsplink-semaphore-27.patch b/packages/dsplink/files/dsplink-semaphore-27.patch
new file mode 100644 (file)
index 0000000..b2f7116
--- /dev/null
@@ -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 @@
\r
\r
+ /*  ----------------------------------- OS Specific Headers         */\r
++#include <linux/version.h>\r
+ #include <linux/autoconf.h>\r
+ #include <linux/spinlock.h>\r
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)\r
+ #include <asm/semaphore.h>\r
++#else\r
++#include <linux/semaphore.h>\r
++#endif\r
+ #include <linux/timer.h>\r
+ #include <linux/sched.h>\r
+ #include <linux/delay.h>\r
+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 @@
\r
\r
+ /*  ----------------------------------- OS Specific Headers         */\r
++#include <linux/version.h>\r
+ #include <linux/autoconf.h>\r
+ #include <linux/spinlock.h>\r
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)\r
+ #include <asm/semaphore.h>\r
++#else\r
++#include <linux/semaphore.h>\r
++#endif\r
+ #include <linux/timer.h>\r
+ #include <linux/sched.h>\r
+ #include <linux/delay.h>\r
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 (file)
index 0000000..a3bc2b1
--- /dev/null
@@ -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/support-32bit-align.patch b/packages/dsplink/files/support-32bit-align.patch
new file mode 100644 (file)
index 0000000..0ee817d
--- /dev/null
@@ -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/update-cpu-name.patch b/packages/dsplink/files/update-cpu-name.patch
new file mode 100644 (file)
index 0000000..052a8e3
--- /dev/null
@@ -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/update-fb-display.patch b/packages/dsplink/files/update-fb-display.patch
new file mode 100644 (file)
index 0000000..91c1dd1
--- /dev/null
@@ -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/update-v4l2-display.patch b/packages/dsplink/files/update-v4l2-display.patch
new file mode 100644 (file)
index 0000000..8bb77d8
--- /dev/null
@@ -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 */
index 9c22734..c4be68c 100644 (file)
@@ -1,7 +1,7 @@
 DEPENDS = "codec-engine 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"
+SRCREV = "87"
 
 # Again, no '.' in PWD allowed :(
 PV = "0+svnr${SRCREV}"
diff --git a/packages/dsplink/readme.txt b/packages/dsplink/readme.txt
new file mode 100644 (file)
index 0000000..f20be41
--- /dev/null
@@ -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
+- 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
index 188dd54..eec3602 100644 (file)
@@ -22,6 +22,19 @@ export BIOS_INSTALL_DIR=${TITOOLSDIR}/${TIBIOSDIR}
 export CGTOOLS_V5T="${CROSS_DIR}"
 export CC_V5T="bin/${TARGET_PREFIX}gcc"
 export MVTOOL_PREFIX="${TARGET_PREFIX}"
+export CE_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/codecengine/cetools"
+export MVTOOL_DIR="${CROSS_DIR}"
+export CSTOOL_DIR="${CROSS_DIR}"
+export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+
+
+# 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 +64,7 @@ GPPOS ?= "MVL5G"
 GPPOS_beagleboard = "OMAPLSP"
 GPPOS_omap3evm = "OMAPLSP"
 
+export DEVICES
 export DSPLINKPLATFORM
 export DSPLINKDSP
 export DSPLINKSOC
diff --git a/packages/euphony/euphony_0.1.2.bb b/packages/euphony/euphony_0.1.2.bb
deleted file mode 100644 (file)
index 134a39d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "Euphony is a instrument loader that gives simple edje-guis a platform with soundsupport to let you play music"
-DEPENDS = "ecore evas edje eet fluidsynth"
-LICENSE = "BSD 3-clause"
-SECTION = "x11/multimedia"
-
-inherit autotools 
-
-SRC_URI = "http://projects.gstaedtner.net/euphony/${PN}-${PV}.tar.gz"
-
-FILES_${PN} += "${datadir}"
-
diff --git a/packages/euphony/euphony_0.1.3.bb b/packages/euphony/euphony_0.1.3.bb
new file mode 100644 (file)
index 0000000..134a39d
--- /dev/null
@@ -0,0 +1,11 @@
+DESCRIPTION = "Euphony is a instrument loader that gives simple edje-guis a platform with soundsupport to let you play music"
+DEPENDS = "ecore evas edje eet fluidsynth"
+LICENSE = "BSD 3-clause"
+SECTION = "x11/multimedia"
+
+inherit autotools 
+
+SRC_URI = "http://projects.gstaedtner.net/euphony/${PN}-${PV}.tar.gz"
+
+FILES_${PN} += "${datadir}"
+
diff --git a/packages/evtest/evtest_1.23.bb b/packages/evtest/evtest_1.23.bb
new file mode 100644 (file)
index 0000000..4c5d195
--- /dev/null
@@ -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_svn.bb b/packages/ezx/ezx-gen-blob_svn.bb
new file mode 100644 (file)
index 0000000..fb0def2
--- /dev/null
@@ -0,0 +1,37 @@
+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"
+PV = "0.1.0+${SRCREV}"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools
+
+SRC_URI = "svn://svn.openezx.org/trunk/src/blob/;module=gen-blob;proto=http"
+S = "${WORKDIR}/gen-blob"
+
+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/freesmartphone/fso-abyss/abyss.conf b/packages/freesmartphone/fso-abyss/abyss.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/freesmartphone/fso-abyss/om-gta01/abyss.conf b/packages/freesmartphone/fso-abyss/om-gta01/abyss.conf
new file mode 100644 (file)
index 0000000..2ff579d
--- /dev/null
@@ -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 = 1
+# set maximum 07.10 frame size
+framesize = 98
+# configure modem port
+port = /dev/ttySAC0
+speed = 115200
diff --git a/packages/freesmartphone/fso-abyss/om-gta02/abyss.conf b/packages/freesmartphone/fso-abyss/om-gta02/abyss.conf
new file mode 100644 (file)
index 0000000..2ff579d
--- /dev/null
@@ -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 = 1
+# set maximum 07.10 frame size
+framesize = 98
+# configure modem port
+port = /dev/ttySAC0
+speed = 115200
diff --git a/packages/freesmartphone/fso-abyss/om-gta03/abyss.conf b/packages/freesmartphone/fso-abyss/om-gta03/abyss.conf
new file mode 100644 (file)
index 0000000..1764c5b
--- /dev/null
@@ -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/ttySAC0
+speed = 115200
index 471f404..3cfff7d 100644 (file)
@@ -2,17 +2,35 @@ 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 libgee"
+DEPENDS = "vala-native dbus dbus-glib libgsm0710"
 LICENSE = "GPL"
-PV = "0.2.0+gitr${SRCREV}"
+PV = "0.3.0+gitr${SRCREV}"
 PR = "r0"
 
-SRC_URI = "${FREESMARTPHONE_GIT}/fso-abyss.git;protocol=git;branch=master"
+SRC_URI = "\
+  ${FREESMARTPHONE_GIT}/fso-abyss.git;protocol=git;branch=master \
+  file://abyss.conf \
+"
 S = "${WORKDIR}/git"
 
 inherit autotools
 
-RDEPENDS = "dbus dbus-glib"
-RCONFLICTS = "gsm0710muxd fso-gsm0710muxd"
+do_install_append() {
+       install -d ${D}${sysconfdir}
+       install -m 0644 ${WORKDIR}/abyss.conf ${D}${sysconfdir}/
+}
 
-FILES_${PN} += "${datadir} ${sysconfdir}"
+PACKAGES =+ "${PN}-config"
+
+FILES_${PN} += "${sysconfdir} ${datadir}"
+RRECOMMENDS_${PN} = "${PN}-config"
+
+FILES_${PN}-config = "\
+  ${sysconfdir}/abyss.conf \
+"
+
+CONFFILES_${PN}-config = "\
+  ${sysconfdir}/abyss.conf \
+"
+
+PACKAGE_ARCH_${PN} = "${BASE_PACKAGE_ARCH}"
index bce8312..79e040e 100644 (file)
@@ -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 (file)
index 0000000..bc4e59e
--- /dev/null
@@ -0,0 +1,14 @@
+DESCRIPTION = "A GSM 07.10 Protocol Engine"
+LICENSE = "GPL"
+SECTION = "devel"
+PV = "1.0.0+gitr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "${FREESMARTPHONE_GIT}/libgsm0710.git;protocol=git;branch=master"
+S = "${WORKDIR}/git"
+
+inherit autotools autotools_stage pkgconfig
+
+# ship vapi file
+FILES_${PN}-dev += "${datadir}/vala"
+
diff --git a/packages/fuse/sshfs-fuse_2.2.bb b/packages/fuse/sshfs-fuse_2.2.bb
new file mode 100644 (file)
index 0000000..0ca2e13
--- /dev/null
@@ -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"
index 73bc327..9e70af7 100644 (file)
@@ -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) in [ 'linux' ]:
         return "--with-float=soft"
     return ""
 
index 143a662..5528cf8 100644 (file)
@@ -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 (file)
index 0000000..d662970
--- /dev/null
@@ -0,0 +1,6 @@
+require glibc_${PV}.bb
+require glibc-initial.inc
+
+do_configure_prepend () {
+       unset CFLAGS
+}
index 3349ce5..ec4b347 100644 (file)
@@ -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
index 7d98f98..bb9ad73 100644 (file)
@@ -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 \
index 86f4cd8..7b272f6 100644 (file)
@@ -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"
 
index 72b04ec..fcc022c 100644 (file)
@@ -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"
 
index 47a8fae..48799d8 100644 (file)
@@ -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"
 
index 3c93bfb..79dcacc 100644 (file)
@@ -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/iscsi-target/files/2.6.29.patch b/packages/iscsi-target/files/2.6.29.patch
new file mode 100644 (file)
index 0000000..24c1afb
--- /dev/null
@@ -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;
index deb0902..07cbee9 100644 (file)
@@ -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/kaeilos/kaeilos-version.bb b/packages/kaeilos/kaeilos-version.bb
new file mode 100644 (file)
index 0000000..4600c41
--- /dev/null
@@ -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
+}
index 394e531..d83f652 100644 (file)
@@ -2,7 +2,7 @@ LICENSE = "GPL"
 SECTION = "base"
 DESCRIPTION = "Configuration file for kexecboot"
 
-PR = "r1"
+PR = "r2"
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
 CMDLINE_CON = "console=ttyS0,115200n8 console=tty1 noinitrd"
@@ -11,7 +11,7 @@ CMDLINE_CON_qemuarm = "console=ttyAMA0,115200n8 console=tty1 noinitrd"
 
 CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
 
-CMDLINE_MEM_collie = "mem=${mem}M"
+CMDLINE_MEM_collie = "mem=64M"
 
 CMDLINE_ROTATE_spitz = "fbcon=rotate:1"
 CMDLINE_ROTATE_akita = "fbcon=rotate:1"
diff --git a/packages/libsmi/libsmi_0.4.8.bb b/packages/libsmi/libsmi_0.4.8.bb
new file mode 100644 (file)
index 0000000..6c832f3
--- /dev/null
@@ -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 (file)
index 0000000..a9fcce7
--- /dev/null
@@ -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@
+
index ab6949f..833567e 100644 (file)
@@ -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 (file)
index 0000000..b776094
--- /dev/null
@@ -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/linux/at91_2.6.28.bb b/packages/linux/at91_2.6.28.bb
deleted file mode 100644 (file)
index a24dad3..0000000
+++ /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.25.20/ronetix-pm9261/defconfig b/packages/linux/linux-2.6.25.20/ronetix-pm9261/defconfig
new file mode 100644 (file)
index 0000000..77cb9fa
--- /dev/null
@@ -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 (file)
index 0000000..c7171cd
--- /dev/null
@@ -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/013-090116-lcd.patch b/packages/linux/linux-2.6.27/boc01/013-090116-lcd.patch
deleted file mode 100644 (file)
index 46a7534..0000000
+++ /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 (file)
index 0000000..c867e2c
--- /dev/null
@@ -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 (file)
index 536a788..0000000
+++ /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 (file)
index 0000000..3acbf40
--- /dev/null
@@ -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.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2 b/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2
deleted file mode 100644 (file)
index 7069c54..0000000
Binary files a/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-at91.patch.bz2 and /dev/null 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/at91sam9263ek/linux-2.6.28-exp.patch.bz2
deleted file mode 100644 (file)
index 9417b3a..0000000
Binary files a/packages/linux/linux-2.6.28/at91sam9263ek/linux-2.6.28-exp.patch.bz2 and /dev/null differ
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 (file)
index 0000000..51c161f
--- /dev/null
@@ -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 (file)
index 0000000..7530bee
--- /dev/null
@@ -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 (file)
index 0000000..4ce284d
--- /dev/null
@@ -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 (file)
index 0000000..6dbb856
--- /dev/null
@@ -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 (file)
index 0000000..1200038
--- /dev/null
@@ -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 (file)
index 0000000..0b987b6
--- /dev/null
@@ -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 (file)
index 0000000..230bd93
--- /dev/null
@@ -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 (file)
index 0000000..19557f9
--- /dev/null
@@ -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 (file)
index 0000000..bb8dd5c
--- /dev/null
@@ -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)\r
++
++/*-------------------------------------------------------------------------*/
+-- 
+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 (file)
index 0000000..fbf1b45
--- /dev/null
@@ -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 (file)
index 0000000..0bc3dbb
--- /dev/null
@@ -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 (file)
index 0000000..c1aafef
--- /dev/null
@@ -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 (file)
index 0000000..92159d5
--- /dev/null
@@ -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 (file)
index 0000000..4d2828e
--- /dev/null
@@ -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 (file)
index 0000000..99d0314
--- /dev/null
@@ -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 (file)
index 0000000..aab08a6
--- /dev/null
@@ -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 (file)
index 0000000..c08c21a
--- /dev/null
@@ -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 (file)
index 0000000..b28db63
--- /dev/null
@@ -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 (file)
index 0000000..7d74cb7
--- /dev/null
@@ -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 (file)
index 0000000..490e333
--- /dev/null
@@ -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 (file)
index 0000000..c40be53
--- /dev/null
@@ -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 (file)
index 0000000..b6cef07
--- /dev/null
@@ -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 (file)
index 0000000..3ff32b0
--- /dev/null
@@ -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 (file)
index 0000000..e815c97
--- /dev/null
@@ -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/linux-2.6.28-at91.patch.bz2 b/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2
new file mode 100644 (file)
index 0000000..7069c54
Binary files /dev/null and b/packages/linux/linux-2.6.28/linux-2.6.28-at91.patch.bz2 differ
diff --git a/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2 b/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2
new file mode 100644 (file)
index 0000000..9417b3a
Binary files /dev/null and b/packages/linux/linux-2.6.28/linux-2.6.28-exp.patch.bz2 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 (file)
index 0000000..ec5bf7a
--- /dev/null
@@ -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 (file)
index 0000000..fbd0c90
--- /dev/null
@@ -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
index 5f0dd18..4d700a2 100644 (file)
@@ -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 (file)
index 0000000..9f1eda7
--- /dev/null
@@ -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 (file)
index 2f6308c..0000000
+++ /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 (file)
index 0000000..3c15d78
--- /dev/null
@@ -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
+}
index f37ff8b..6b5d5b5 100644 (file)
@@ -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
 
index 0406267..7674379 100644 (file)
@@ -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.28/add-resizer-driver.patch b/packages/linux/linux-omap-2.6.28/add-resizer-driver.patch
new file mode 100644 (file)
index 0000000..9457bec
--- /dev/null
@@ -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;
index c92e425..0a8821e 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.28-omap1
-# Wed Feb  4 12:40:38 2009
+# Mon Feb 16 13:35:13 2009
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -588,7 +588,7 @@ CONFIG_MTD_NAND=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_OMAP2 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
@@ -599,7 +599,15 @@ CONFIG_MTD_NAND_IDS=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
@@ -616,6 +624,7 @@ 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
 
@@ -696,8 +705,36 @@ CONFIG_NETDEV_10000=y
 # Wireless LAN
 #
 # CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 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
@@ -1243,8 +1280,42 @@ CONFIG_FONT_8x16=y
 # 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_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
@@ -1601,14 +1672,25 @@ CONFIG_EXT2_FS=y
 # 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_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 is not set
+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
@@ -1681,6 +1763,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 is not set
 # CONFIG_VXFS_FS is not set
 # CONFIG_MINIX_FS is not set
@@ -1937,8 +2025,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
@@ -1951,7 +2039,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-2.6.28/overo/overo-ehci.patch b/packages/linux/linux-omap-2.6.28/overo/overo-ehci.patch
new file mode 100644 (file)
index 0000000..ff81d98
--- /dev/null
@@ -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 
index 21eb2cf..ff1c5d2 100644 (file)
@@ -7,11 +7,12 @@ COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|
 
 DEFAULT_PREFERENCE = "-1"
 DEFAULT_PREFERENCE_beagleboard = "1"
+DEFAULT_PREFERENCE_overo = "1"
 
 SRCREV = "79d042a081d3e467c735bb0d9569ed6296f85a3c"
 
 PV = "2.6.28"
-PR = "r12"
+PR = "r13"
 
 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,23 @@ 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 \
 "
 
 
 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"
 
 
index e2ce062..84ddcf0 100644 (file)
@@ -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 (file)
index 500d959..0000000
+++ /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 (file)
index 0000000..c0a7d3c
--- /dev/null
@@ -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_2.6.25.20.bb b/packages/linux/linux_2.6.25.20.bb
new file mode 100644 (file)
index 0000000..7b9308c
--- /dev/null
@@ -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/"
index 7da406a..4b094bf 100644 (file)
@@ -1,6 +1,6 @@
 require linux.inc
 
-PR = "r3"
+PR = "r4"
 
 # Mark archs/machines that this kernel supports
 DEFAULT_PREFERENCE = "-1"
@@ -21,8 +21,8 @@ SRC_URI_append_boc01 = "\
        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://013-090209-lcd.patch;patch=1 \
+       file://014-090209-pm-wakeup.patch;patch=1 \
        "
 
 SRC_URI_append_progear = "file://progear-bl.patch;patch=1\
index 393209c..603fe49 100644 (file)
@@ -1,12 +1,14 @@
 require linux.inc
 
-PR = "r2"
+PR = "r4"
 
 # 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"
 
 SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
            file://defconfig"
@@ -15,8 +17,40 @@ 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"
+
+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 " 
+
+S = "${WORKDIR}/linux-2.6.28/"
index 3674f6d..e904c75 100644 (file)
@@ -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 ] && {
index 04b78ec..e2bed84 100644 (file)
@@ -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 \
index a515080..5c99945 100644 (file)
@@ -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 (file)
index 0000000..89a5e43
--- /dev/null
@@ -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 (file)
index 0000000..b414b6f
--- /dev/null
@@ -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 (file)
index 0000000..92a8879
--- /dev/null
@@ -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 (file)
index 0000000..d437807
--- /dev/null
@@ -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 (file)
index 0000000..84ce8e4
--- /dev/null
@@ -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 (file)
index 0000000..6ef9635
--- /dev/null
@@ -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 (file)
index 0000000..607e019
--- /dev/null
@@ -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 (file)
index 0000000..73d6f76
--- /dev/null
@@ -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/maemo4/libosso/libosso-dont-use-inline.patch b/packages/maemo4/libosso/libosso-dont-use-inline.patch
new file mode 100644 (file)
index 0000000..d387830
--- /dev/null
@@ -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);
+
index 1920e29..25ee9aa 100644 (file)
@@ -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 (file)
index 0000000..3479dad
--- /dev/null
@@ -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"
index 60326c0..21d9a84 100644 (file)
@@ -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
index acc9bd3..1428fdc 100644 (file)
@@ -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 (file)
index 0000000..8c77b6a
--- /dev/null
@@ -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 (file)
index 0000000..c691d07
--- /dev/null
@@ -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 (file)
index 0000000..d384577
Binary files /dev/null and b/packages/mini-httpd/.mini-httpd_1.19.bb.swp differ
diff --git a/packages/mini-httpd/files/init b/packages/mini-httpd/files/init
new file mode 100644 (file)
index 0000000..5e9b176
--- /dev/null
@@ -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 (file)
index 0000000..cb4150c
--- /dev/null
@@ -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 (file)
index 0000000..7d48cd1
--- /dev/null
@@ -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 (file)
index 0000000..0fddcd7
--- /dev/null
@@ -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 (file)
index 0000000..6ca44e7
--- /dev/null
@@ -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 (file)
index 0000000..5b32401
--- /dev/null
@@ -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 (file)
index 0000000..5eede38
--- /dev/null
@@ -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 (file)
index 0000000..9626986
--- /dev/null
@@ -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 (file)
index 0000000..bd9c4ca
--- /dev/null
@@ -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/mpeg-encode/files/fixup.patch b/packages/mpeg-encode/files/fixup.patch
new file mode 100644 (file)
index 0000000..c90f327
--- /dev/null
@@ -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 (file)
index 0000000..c350739
--- /dev/null
@@ -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/mutagen/mutagen_1.15.bb b/packages/mutagen/mutagen_1.15.bb
new file mode 100644 (file)
index 0000000..682c144
--- /dev/null
@@ -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/neon/files/gnutls-2.patch b/packages/neon/files/gnutls-2.patch
new file mode 100644 (file)
index 0000000..2b37dfc
--- /dev/null
@@ -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/net-snmp/net-snmp.inc b/packages/net-snmp/net-snmp.inc
new file mode 100644 (file)
index 0000000..bbe8096
--- /dev/null
@@ -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
+}
+
index 330e13e..527c9e3 100644 (file)
@@ -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 = ""
+
index d900019..f76005b 100644 (file)
@@ -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 (file)
index 0000000..2f82865
--- /dev/null
@@ -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/netbase/netbase/ronetix-pm9261/interfaces b/packages/netbase/netbase/ronetix-pm9261/interfaces
new file mode 100644 (file)
index 0000000..ab20f5b
--- /dev/null
@@ -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 (file)
index 0000000..ab20f5b
--- /dev/null
@@ -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/nonworking/e2fsprogs/e2fsprogs_1.41.2.bb b/packages/nonworking/e2fsprogs/e2fsprogs_1.41.2.bb
new file mode 100644 (file)
index 0000000..1b139d2
--- /dev/null
@@ -0,0 +1,87 @@
+require e2fsprogs.inc
+
+PR = "r0"
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "file://no-hardlinks.patch;patch=1"
+
+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"
+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}/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-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/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch b/packages/nrlolsr/nrlolsr-7.8.1/nrlolsr-cross.patch
new file mode 100644 (file)
index 0000000..92af69f
--- /dev/null
@@ -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 (file)
index 0000000..3fa5e2f
--- /dev/null
@@ -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}
+}
index 7d73b79..ac2b384 100644 (file)
@@ -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 (file)
index 0000000..7d73b79
--- /dev/null
@@ -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"
index 8cecf56..9ca9e8f 100644 (file)
@@ -1,6 +1,8 @@
 DESCRIPTION = "OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine "
 LICENSE = "LGPL"
-DEPENDS = "zziplib boost freeimage freetype virtual/libx11 virtual/egl"
+DEPENDS = "gtk+ wgois cppunit zziplib boost freeimage freetype virtual/libx11 virtual/egl"
+
+PR = "r3"
 
 SRCREV = "8310"
 PV = "1.6.1+svnr${SRCREV}"
@@ -12,7 +14,7 @@ SRC_URI = "svn://ogre.svn.sourceforge.net/svnroot/ogre;module=trunk;proto=https
 inherit autotools_stage
 
 # This is the EGL version
-EXTRA_OECONF = " --with-allocator=std --enable-threading=no --disable-cg --enable-gles "
+EXTRA_OECONF = " --with-gui=gtk --disable-freetypetest --enable-ogre-demos --with-allocator=std --enable-threading=no --disable-cg --enable-gles "
 
 S = "${WORKDIR}/trunk"
 
@@ -23,7 +25,20 @@ do_configure_prepend() {
        sed -i -e /OGRE_DETECT_ENDIAN/d ${S}/configure.in
 }
 
-FILES_${PN}-dbg += "${libdir}/OGRE/.debug"
+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}/OGRE/*.so"
+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 (file)
index 0000000..ff59a3b
--- /dev/null
@@ -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 (file)
index 0000000..9e5ccfb
--- /dev/null
@@ -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 (file)
index 0000000..403073f
--- /dev/null
@@ -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"
index 57c6e61..82c74e0 100644 (file)
@@ -1,7 +1,7 @@
 require opkg.inc
 
 DEPENDS = "curl-native"
-PR = "r2"
+PR = "r3"
 
 target_libdir := "${libdir}"
 
index 4daa58f..6f8b446 100644 (file)
@@ -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}"
 
index f58df2f..a9297d7 100644 (file)
@@ -3,7 +3,7 @@ require opkg_svn.bb
 DEPENDS = "curl"
 PROVIDES += "opkg"
 
-PR = "r2"
+PR = "r3"
 
 SRCREV = "${SRCREV_pn-opkg}"
 
index c28fe97..d9b3727 100644 (file)
@@ -1,7 +1,7 @@
 require opkg.inc
 
 DEPENDS = "curl-sdk"
-PR = "r2"
+PR = "r3"
 target_libdir := "${libdir}"
 inherit sdk
 
index b586e70..bd16f92 100644 (file)
@@ -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"
 S = "${WORKDIR}/trunk"
 
 inherit autotools pkgconfig
index 4cf1c5c..a472897 100644 (file)
@@ -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 (file)
index 0000000..167a0fb
--- /dev/null
@@ -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 (file)
index 9278704..0000000
+++ /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 (file)
index be9b91c..0000000
+++ /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 (file)
index 0000000..ce30563
--- /dev/null
@@ -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 (file)
index ba37096..0000000
+++ /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 (file)
index cb9b08f..0000000
+++ /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 (file)
index 8681055..0000000
+++ /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 (file)
index bff27a6..0000000
+++ /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 (file)
index 1185014..0000000
+++ /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 (file)
index 59e3aea..0000000
+++ /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
-}
index d1b5cbe..4eb8aa5 100644 (file)
@@ -4,11 +4,13 @@ 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"
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 (file)
index 0000000..5a56c01
--- /dev/null
@@ -0,0 +1,12 @@
+inherit native
+
+require pax-utils_${PV}.bb
+
+do_stage() {
+    oe_runmake PREFIX=${STAGING_DIR_HOST}${layout_prefix} install
+}
+
+do_install() {
+       :
+}
+
index 6fc6850..c704d28 100644 (file)
@@ -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 (file)
index 0000000..bd657d7
--- /dev/null
@@ -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/perl/libdate-manip-perl-native_5.54.bb b/packages/perl/libdate-manip-perl-native_5.54.bb
new file mode 100644 (file)
index 0000000..7199d9f
--- /dev/null
@@ -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 (file)
index 0000000..9097ce3
--- /dev/null
@@ -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 (file)
index 0000000..180d1d0
--- /dev/null
@@ -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 (file)
index 0000000..6200c28
--- /dev/null
@@ -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 (file)
index 0000000..95aa53b
--- /dev/null
@@ -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 (file)
index 0000000..c5e3b1d
--- /dev/null
@@ -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 (file)
index 0000000..af68535
--- /dev/null
@@ -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 (file)
index 0000000..af3b2df
--- /dev/null
@@ -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 (file)
index 0000000..ebae345
--- /dev/null
@@ -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 (file)
index 0000000..d83dac0
--- /dev/null
@@ -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 (file)
index 0000000..0852533
--- /dev/null
@@ -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 (file)
index 0000000..788c37e
--- /dev/null
@@ -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 (file)
index 0000000..50be9e1
--- /dev/null
@@ -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 (file)
index 0000000..80de333
--- /dev/null
@@ -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 (file)
index 0000000..f09c3f9
--- /dev/null
@@ -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 (file)
index 0000000..1d5a3eb
--- /dev/null
@@ -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 (file)
index 0000000..9f83c5c
--- /dev/null
@@ -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 (file)
index 0000000..07dd7de
--- /dev/null
@@ -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 (file)
index 0000000..15eb630
--- /dev/null
@@ -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 (file)
index 0000000..e3037a2
--- /dev/null
@@ -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 (file)
index 0000000..bc5702d
--- /dev/null
@@ -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 (file)
index 0000000..bd76e20
--- /dev/null
@@ -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/popt/popt-1.13/iconv.patch b/packages/popt/popt-1.13/iconv.patch
deleted file mode 100644 (file)
index 4faf4c4..0000000
+++ /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-native_1.14.bb b/packages/popt/popt-native_1.14.bb
deleted file mode 100644 (file)
index 54712ab..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-require popt.inc
-
-DEPENDS = "gettext-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}
-}
index a83d384..320a211 100644 (file)
@@ -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_1.14.bb b/packages/popt/popt_1.14.bb
deleted file mode 100644 (file)
index 240ac52..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-require popt.inc
-
-DEPENDS = "gettext-native 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}
-}
-
-
index 7992db5..313e31b 100644 (file)
@@ -2,15 +2,10 @@ require popt.inc
 
 DEPENDS = "gettext virtual/libintl"
 
-PR = "r5"
+inherit autotools autotools_stage
 
-inherit 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"
-
-do_stage() {
-       oe_libinstall -a -so libpopt ${STAGING_LIBDIR}
-       install -m 0644 popt.h ${STAGING_INCDIR}
-}
+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 \
+"
index 9fae1ff..aba613c 100644 (file)
@@ -1,7 +1,7 @@
 require libgles-omap3.inc
 
 # Not released yet
-DEFAULT_PREFERENCE = "-1"
+#DEFAULT_PREFERENCE = "-1"
 PR = "r5"
 
 SGXPV = "3_00_00_06"
diff --git a/packages/psplash/files/kaeilos/psplash-hand-img.h b/packages/psplash/files/kaeilos/psplash-hand-img.h
new file mode 100644 (file)
index 0000000..d262d6c
--- /dev/null
@@ -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")
+
+
index 7e0d7c6..e7cbda5 100644 (file)
@@ -3,7 +3,7 @@ require psplash-ua.inc
 
 ALTERNATIVE_PRIORITY = "10"
 
-PR = "r16"
+PR = "r17"
 
 SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=psplash;proto=http \
           file://psplash-hand-img.h \
index e6f5faf..0310676 100644 (file)
@@ -3,17 +3,23 @@ SECTION = "devel/python"
 LICENSE = "MIT"
 HOMEPAGE = "http://coherence.beebits.net/wiki"
 
-PR = "r6"
+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-misc python-zopeinterface \
-       zope python-modules python-pygobject python-gdata python-inotify"
+       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-divmodaxiom_0.5.30.bb b/packages/python/python-divmodaxiom_0.5.30.bb
new file mode 100644 (file)
index 0000000..94c8a53
--- /dev/null
@@ -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 (file)
index 0000000..185708b
--- /dev/null
@@ -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-pycrypto_git.bb b/packages/python/python-pycrypto_git.bb
new file mode 100644 (file)
index 0000000..9e6eecb
--- /dev/null
@@ -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 (file)
index 8be6d54..0000000
+++ /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 (file)
index 0000000..4a6580e
--- /dev/null
@@ -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
index ef9fe0e..d7bd1c0 100644 (file)
@@ -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}"
index 8c3f354..ae9f8ee 100644 (file)
@@ -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 = "ml2"
+PR = "ml3"
 
 SRC_URI = "\
   http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \
@@ -27,6 +27,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 (file)
index 0000000..9e19749
--- /dev/null
@@ -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 (file)
index 0000000..ce6feb5
--- /dev/null
@@ -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 (file)
index 0000000..cd1abf3
--- /dev/null
@@ -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
index ce28508..3de44de 100644 (file)
@@ -1,45 +1,52 @@
-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.0+${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)
+
+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=${CC}
+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
index 37bf9af..968f688 100644 (file)
@@ -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"
 
index 3a12fba..6670896 100644 (file)
@@ -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/rt2x00/rt61-firmware_1.2.bb b/packages/rt2x00/rt61-firmware_1.2.bb
new file mode 100644 (file)
index 0000000..ae683c8
--- /dev/null
@@ -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/ruby/files/openssl.patch b/packages/ruby/files/openssl.patch
new file mode 100644 (file)
index 0000000..9de37ef
--- /dev/null
@@ -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));
index 9fe8333..978bf4b 100644 (file)
@@ -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/files/configure-3.2.7.patch b/packages/samba/files/configure-3.2.7.patch
deleted file mode 100644 (file)
index 94d6848..0000000
+++ /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/files/configure-3.2.8.patch b/packages/samba/files/configure-3.2.8.patch
new file mode 100644 (file)
index 0000000..2668b9d
--- /dev/null
@@ -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])
index 3854621..f07e3e4 100644 (file)
 #============================ 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/samba-ads-3.3.0/wbstatic.patch b/packages/samba/samba-ads-3.3.0/wbstatic.patch
new file mode 100644 (file)
index 0000000..1d2260c
--- /dev/null
@@ -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
index 1249528..e2f77b8 100644 (file)
@@ -1,4 +1,6 @@
-DEPENDS += " openldap krb5"
+# 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 \
@@ -16,22 +18,20 @@ EXTRA_OECONF += "\
         --with-ads \
         "
 
-PACKAGES =+ "libsmbclient-ads libsmbclient-ads-dev cifs-ads cifs-ads-doc smbfs-ads swat-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_smbfs-ads = "smbfs"
 RCONFLICTS_swat-ads = "swat"
 
-FILES_cifs-ads= "${base_sbindir}/mount.cifs ${base_sbindir}/umount.cifs"
+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_smbfs-ads = "${bindir}/smbmount ${bindir}/smbumount ${bindir}/smbmnt ${base_sbindir}/mount.smbfs ${base_sbindir}/mount.smb"
-FILES_swat-ads       = "${sbindir}/swat ${datadir}/swat ${libdir}/*.msg"
+FILES_swat-ads = "${sbindir}/swat ${datadir}/swat ${libdir}/*.msg"
 
 do_configure() {
         oe_runconf
diff --git a/packages/samba/samba-ads_3.2.7.bb b/packages/samba/samba-ads_3.2.7.bb
deleted file mode 100644 (file)
index 83b4416..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require samba.inc
-require samba-ads.inc
-
-PR = "r1"
-SRC_URI += "file://config-lfs.patch;patch=1 \
-            file://quota.patch;patch=1;pnum=0 \
-            file://configure-3.2.7.patch;patch=1 \
-            file://config-h.patch;patch=1 \
-            file://mtab.patch;patch=1 \
-               "
diff --git a/packages/samba/samba-ads_3.2.8.bb b/packages/samba/samba-ads_3.2.8.bb
new file mode 100644 (file)
index 0000000..95f09c1
--- /dev/null
@@ -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 \
+               "
index 7688fd6..9fd4303 100644 (file)
@@ -1,12 +1,13 @@
 require samba.inc
 require samba-ads.inc
 
-PR = "r1"
+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 () {
index 54c54ba..f1bda65 100644 (file)
@@ -8,19 +8,17 @@ EXTRA_OECONF += "\
         --without-ldap \
         --without-krb5"
 
-PACKAGES =+ "libsmbclient libsmbclient-dev cifs cifs-doc smbfs swat"
+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_smbfs = "smbfs-ads"
 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_smbfs = "${bindir}/smbmount ${bindir}/smbumount ${bindir}/smbmnt ${base_sbindir}/mount.smbfs ${base_sbindir}/mount.smb"
 FILES_swat       = "${sbindir}/swat ${datadir}/swat ${libdir}/*.msg"
index 0ffd4b9..36de08b 100644 (file)
@@ -24,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 \
@@ -59,22 +58,23 @@ 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
-
-       install -D -m 0644 ${WORKDIR}/volatiles.03_samba ${D}${sysconfdir}/default/volatiles/volatiles.03_samba
 }
 
 do_stage() {
index 6270ab7..c08dc04 100644 (file)
@@ -6,10 +6,13 @@ SRC_URI += "file://configure.patch;patch=1 \
 
 PR = "r7"
 
-PACKAGES =+ " smbfs-doc"
+EXTRA_OECONF += "\
+       --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 () {
index 69cf6b4..d43c50d 100644 (file)
@@ -8,14 +8,15 @@ SRC_URI_append_linux-uclibcgnueabi = "file://uclibc-strlcpy-strlcat.patch;patch=
 
 PR = "r5"
 
-PACKAGES =+ "smbfs-doc"
+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 += "\
        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 (file)
index 49ff24a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-require samba.inc
-require samba-basic.inc
-
-SRC_URI += "file://configure-3.2.7.patch;patch=1 \
-            file://config-h.patch;patch=1 \
-            file://mtab.patch;patch=1 \
-               "
-
-PR = "r4"
-
-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.2.8.bb b/packages/samba/samba_3.2.8.bb
new file mode 100644 (file)
index 0000000..2e2cb95
--- /dev/null
@@ -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
+}
index 49432ec..6270c8c 100644 (file)
@@ -12,7 +12,7 @@ SRC_URI += "file://configure-3.3.0.patch;patch=1 \
             file://mtab.patch;patch=1 \
                "
 
-PR = "r1"
+PR = "r2"
 
 EXTRA_OECONF += "\
        SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes \
diff --git a/packages/slugos-init/files/setup-optware.sh b/packages/slugos-init/files/setup-optware.sh
new file mode 100644 (file)
index 0000000..d4ae619
--- /dev/null
@@ -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
index 7d4769d..beeaa34 100644 (file)
@@ -4,7 +4,7 @@ PRIORITY = "required"
 LICENSE = "GPL"
 DEPENDS = "base-files devio"
 RDEPENDS = "busybox devio"
-PR = "r9"
+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 (file)
index 0000000..f67894c
--- /dev/null
@@ -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"
index 504332f..c60ae4f 100644 (file)
@@ -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 = "\
index 3d69256..1a74f15 100644 (file)
@@ -1,5 +1,5 @@
 DESCRIPTION = "Basic task to get a device booting"
-PR = "r47"
+PR = "r48"
 
 inherit task
 
index 97807cc..9a9e385 100644 (file)
@@ -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-slugos-toolchain-target.bb b/packages/tasks/task-slugos-toolchain-target.bb
new file mode 100644 (file)
index 0000000..489a412
--- /dev/null
@@ -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/tnef/tnef.inc b/packages/tnef/tnef.inc
new file mode 100644 (file)
index 0000000..2da8960
--- /dev/null
@@ -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 (file)
index 0000000..cec39d8
--- /dev/null
@@ -0,0 +1,3 @@
+require tnef.inc
+
+PR = "r0"
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 (file)
index 96b624b..0000000
+++ /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 (file)
index 0000000..6c0ed5c
--- /dev/null
@@ -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 */
index 07c7b38..33a0c76 100644 (file)
@@ -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 (file)
index 911dd29..0000000
+++ /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 (file)
index 0000000..803b46d
--- /dev/null
@@ -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 \
index e18055e..d2ebdef 100644 (file)
@@ -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 (file)
index 0000000..afc43c4
--- /dev/null
@@ -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 (file)
index 0000000..940e4ae
--- /dev/null
@@ -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;
index 003838a..0ed92c7 100644 (file)
@@ -2,7 +2,7 @@ require u-boot.inc
 
 DEFAULT_PREFERENCE = "-1"
 
-PR = "r9"
+PR = "r10"
 
 SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2"
 
@@ -22,9 +22,10 @@ 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://008-090107-TSEC.patch;patch=1 \
@@ -32,8 +33,10 @@ SRC_URI_append_boc01 = "\
            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}"
index 86d7712..efbe568 100644 (file)
@@ -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"
index 8da35c3..99e03b1 100644 (file)
@@ -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"
index 8da35c3..99e03b1 100644 (file)
@@ -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"
index 8da35c3..99e03b1 100644 (file)
@@ -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"
index b78a07b..9e11f08 100644 (file)
@@ -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
index 205b733..940d163 100644 (file)
@@ -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"
index 37b95ca..d9f5cba 100644 (file)
@@ -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 \
index e9a2694..a3dfa51 100644 (file)
@@ -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 \
index b0958c6..ef08aa4 100644 (file)
@@ -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 \
index 77e414e..a574014 100644 (file)
@@ -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 = "r12"
+PR = "r13"
 
 SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
           file://noasmlinkage.patch;patch=1 \
diff --git a/packages/v4l2apps/libv4l_0.5.7.bb b/packages/v4l2apps/libv4l_0.5.7.bb
deleted file mode 100644 (file)
index a53c52f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "libv4l is a collection of libraries which adds a thin abstraction layer on top of video4linux2 devices."
-LICENSE = "LGPLv2"
-
-SRC_URI = "http://people.atrpms.net/~hdegoede/libv4l-${PV}.tar.gz"
-
-inherit pkgconfig
-
-export PREFIX="${prefix}"
-
-do_install() {
-       oe_runmake DESTDIR="${D}" install
-}
-
-do_stage() {
-       oe_runmake DESTDIR="${STAGING_DIR_TARGET}" install
-}
diff --git a/packages/v4l2apps/libv4l_0.5.8.bb b/packages/v4l2apps/libv4l_0.5.8.bb
new file mode 100644 (file)
index 0000000..a53c52f
--- /dev/null
@@ -0,0 +1,16 @@
+DESCRIPTION = "libv4l is a collection of libraries which adds a thin abstraction layer on top of video4linux2 devices."
+LICENSE = "LGPLv2"
+
+SRC_URI = "http://people.atrpms.net/~hdegoede/libv4l-${PV}.tar.gz"
+
+inherit pkgconfig
+
+export PREFIX="${prefix}"
+
+do_install() {
+       oe_runmake DESTDIR="${D}" install
+}
+
+do_stage() {
+       oe_runmake DESTDIR="${STAGING_DIR_TARGET}" install
+}
index 00b92de..5bc4c79 100644 (file)
@@ -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/expose-bytesarray-struct.patch b/packages/vala/files/expose-bytesarray-struct.patch
new file mode 100644 (file)
index 0000000..ea01208
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Necessary to actually use BytesArray.
+# Signed-Off: Michael 'Mickey' Lauer <mlauer@vanille-media.de>
+#
+Index: vala/vapi/glib-2.0.vapi
+===================================================================
+--- vala/vapi/glib-2.0.vapi    (Revision 2422)
++++ vala/vapi/glib-2.0.vapi    (Arbeitskopie)
+@@ -3044,6 +3044,9 @@
+               public void sort (CompareFunc compare_func);
+               public void sort_with_data (CompareDataFunc compare_func);
+               public void set_size (uint length);
++
++              public uint len;
++              public uint8[] data;
+       }
+       /* N-ary Trees */
index 8feab50..84ed835 100644 (file)
@@ -1,5 +1,5 @@
 require vala_${PV}.bb
-PR = "r0"
+PR = "r1"
 
 inherit native
 DEPENDS = "glib-2.0-native"
index efe2900..c6f5aeb 100644 (file)
@@ -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://expose-bytesarray-struct.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
index 8775f1a..f6ee943 100644 (file)
@@ -1,2 +1,2 @@
 require vala.inc
-PR = "r0"
+PR = "r1"
index 30c22f8..511d226 100644 (file)
@@ -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 \
index f98e909..6127579 100644 (file)
@@ -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
index 7aec061..c74e1fa 100644 (file)
@@ -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
index 5353429..e69de29 100644 (file)
@@ -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
index a929538..f87238c 100644 (file)
@@ -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
index 7b451ef..c7ed988 100644 (file)
@@ -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],
index 96ef562..9892672 100644 (file)
@@ -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 (file)
index 0000000..3f6dbf3
--- /dev/null
@@ -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 (file)
index 0000000..8bcdd93
--- /dev/null
@@ -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 (file)
index 0000000..4a978ba
--- /dev/null
@@ -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
index 7338efd..b7fe2af 100644 (file)
@@ -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 (file)
index 0000000..13715ea
--- /dev/null
@@ -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}"
+}
+
index e34ca84..f4c90fc 100644 (file)
@@ -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 (file)
index 0000000..aa8e66c
--- /dev/null
@@ -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}"
+}
+
index ec0f3cc..b9ab758 100644 (file)
@@ -2,8 +2,9 @@ DESCRIPTION = "A C++ Web Toolkit"
 PRIORITY = "optional"
 SECTION = "devel"
 LICENSE = "GPL"
+HOMEPAGE = "http://www.webtoolkit.eu/wt"
 DEPENDS = "boost zlib openssl"
-PR = "r0"
+PR = "r1"
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/witty/wt-${PV}.tar.gz \
        file://cmakelist.patch;patch=1"
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 (file)
index 0000000..380ce2e
--- /dev/null
@@ -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 (file)
index 0000000..fecba81
--- /dev/null
@@ -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-xserver/xserver-xorg-conf/overo/xorg.conf b/packages/xorg-xserver/xserver-xorg-conf/overo/xorg.conf
new file mode 100644 (file)
index 0000000..983bb08
--- /dev/null
@@ -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/yasr/files/yasr-0.6.9-gcc43.patch b/packages/yasr/files/yasr-0.6.9-gcc43.patch
new file mode 100644 (file)
index 0000000..ee2b1a6
--- /dev/null
@@ -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 (file)
index 0000000..fa05f07
--- /dev/null
@@ -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 (file)
index 0000000..4d6fd28
--- /dev/null
@@ -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 (file)
index 0000000..970df6d
--- /dev/null
@@ -0,0 +1,10 @@
+require zope_${PV}.bb
+inherit native
+
+DEPENDS = "python-native"
+
+inherit distutils-base
+
+export BUILD_SYS
+export HOST_SYS
+
index 78cf439..cd85425 100644 (file)
@@ -4,7 +4,7 @@ PRIORITY = "optional"
 DEPENDS = "python"
 RDEPENDS = "python-core python-shell"
 LICENSE = "ZPL"
-PR = "r6"
+PR = "r7"
 
 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"
@@ -42,3 +44,4 @@ ${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"
+