Merge branch 'org.openembedded.dev' of git://git.openembedded.net/openembedded into...
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 23 Oct 2008 21:50:26 +0000 (23:50 +0200)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 23 Oct 2008 21:50:26 +0000 (23:50 +0200)
Conflicts:

packages/dsplink/codec-engine_2.21.bb
packages/dsplink/dsplink.inc

166 files changed:
classes/rootfs_deb.bbclass
conf/bitbake.conf
conf/checksums.ini
conf/distro/include/sane-srcrevs.inc
conf/distro/mamona.conf
packages/alsa/alsa-state/nokia800/asound.state [new file with mode: 0644]
packages/apt/apt-0.7.14/no-ko-translation.patch [new file with mode: 0644]
packages/apt/apt-0.7.14/noconfigure.patch [new file with mode: 0644]
packages/apt/apt-0.7.14/nodoc.patch [new file with mode: 0644]
packages/apt/apt-0.7.14/use-host.patch [new file with mode: 0644]
packages/apt/apt-native.inc
packages/apt/apt-native_0.7.14.bb [new file with mode: 0644]
packages/apt/apt-package.inc
packages/apt/apt.inc
packages/apt/apt_0.7.14.bb [new file with mode: 0644]
packages/apt/files/no-curl.patch [new file with mode: 0644]
packages/dpkg/dpkg-1.14.19/ignore_extra_fields.patch [new file with mode: 0644]
packages/dpkg/dpkg-native_1.13.22.bb
packages/dpkg/dpkg-native_1.14.19.bb [new file with mode: 0644]
packages/dpkg/dpkg.inc
packages/dpkg/dpkg_1.13.22.bb
packages/dpkg/dpkg_1.13.25.bb
packages/dpkg/dpkg_1.14.19.bb [new file with mode: 0644]
packages/dsplink/codec-engine_2.21.bb
packages/dsplink/dsplink.inc
packages/dsplink/files/Makefile.dsplink
packages/dsplink/ti-cmemk-module_2.21.bb [new file with mode: 0644]
packages/dsplink/ti-lpm-module_2.21.bb [new file with mode: 0644]
packages/dsplink/ti-paths.inc
packages/gnutls/gnutls-2.4.2/configure_madness.patch [new file with mode: 0644]
packages/gnutls/gnutls-2.4.2/gnutls-openssl.patch [new file with mode: 0644]
packages/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch [new file with mode: 0644]
packages/gnutls/gnutls_2.4.2.bb [new file with mode: 0644]
packages/linux/linux-davinci/davinci-dvevm/defconfig
packages/mamona/bash-noemu-3.2/006-add_internal_libcpwd_functions.patch [new file with mode: 0644]
packages/mamona/bash-noemu_3.2.bb
packages/mamona/binutils-noemu-2.18/110-arm-eabi-conf.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-2.16.1-e300c2c3.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-configure-texinfo-version.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-uclibc-100-uclibc-conf.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-001_ld_makefile_patch.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-006_better_file_error.patch [new file with mode: 0644]
packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-012_check_ldrunpath_length.patch [new file with mode: 0644]
packages/mamona/binutils-noemu_2.17.50.0.5.bb
packages/mamona/binutils-noemu_2.18.bb [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/create_sysfs_link_for_wlan0.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/cx3110x [new file with mode: 0755]
packages/mamona/cx3110x-770he-0.8.1/cx3110x.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/defconfig [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/fix_cross_makefile.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/fix_mem_allign.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/fix_mem_corruption.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/fix_opps_while_connecting_with_nm.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/fix_ssid_data_length.patch [new file with mode: 0644]
packages/mamona/cx3110x-770he-0.8.1/series [new file with mode: 0644]
packages/mamona/cx3110x-770he_0.8.1.bb [new file with mode: 0644]
packages/mamona/cx3110x-chinooke-2.0.15/create_sysfs_link_for_wlan0.patch [new file with mode: 0644]
packages/mamona/cx3110x-chinooke-2.0.15/cx3110x [new file with mode: 0755]
packages/mamona/cx3110x-chinooke-2.0.15/cx3110x.patch [new file with mode: 0644]
packages/mamona/cx3110x-chinooke-2.0.15/fix_old_include.patch [new file with mode: 0644]
packages/mamona/cx3110x-chinooke_2.0.15.bb [new file with mode: 0644]
packages/mamona/cx3110x-diablo-2.0.15/create_sysfs_link_for_wlan0.patch [new file with mode: 0644]
packages/mamona/cx3110x-diablo-2.0.15/cx3110x [new file with mode: 0755]
packages/mamona/cx3110x-diablo-2.0.15/cx3110x.patch [new file with mode: 0644]
packages/mamona/cx3110x-diablo-2.0.15/fix_old_include.patch [new file with mode: 0644]
packages/mamona/cx3110x-diablo_2.0.15.bb [new file with mode: 0644]
packages/mamona/cx3110x.inc [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/.mtn2git_empty [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/100-uclibc-conf.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/110-arm-eabi.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/200-uclibc-locale.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/300-libstdc++-pic.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/301-missing-execinfo_h.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/302-c99-snprintf.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/303-c99-complex-ugly-hack.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/304-index_macro.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/602-sdk-libstdc++-includes.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/740-sh-pr24836.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/800-arm-bigendian.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/801-arm-bigendian-eabi.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/README [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/arm-nolibfloat.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/arm-softfloat.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/arm-thumb-cache.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/arm-thumb.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/cache-amnesia.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/fix-ICE-in-arm_unwind_emit_set.diff [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/gcc-4.0.2-e300c2c3.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/gcc41-configure.in.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/gfortran.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/ldflags.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/pr34130.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/sdk-libstdc++-includes.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/sh3-installfix-fixheaders.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/unbreak-armv4t.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/zecke-no-host-includes.patch [new file with mode: 0644]
packages/mamona/gcc-noemu-4.1.2/zecke-xgcc-cpp.patch [new file with mode: 0644]
packages/mamona/gcc-noemu_4.1.1.bb
packages/mamona/gcc-noemu_4.1.2.bb [new file with mode: 0644]
packages/mamona/gcc-package-noemu.inc
packages/mamona/mamona-input-methods_git.bb [new file with mode: 0644]
packages/mamona/mamona-sound-n770/asound.conf [new file with mode: 0644]
packages/mamona/mamona-sound-n770/dsp-n800.rules [new file with mode: 0644]
packages/mamona/mamona-sound-n770_0.1.0.bb [new file with mode: 0644]
packages/mamona/mamona-sound-n800/asound.state [deleted file]
packages/mamona/mamona-sound-n800_0.1.0.bb
packages/mamona/mamonaim-e-applet_git.bb [new file with mode: 0644]
packages/mamona/udev-usbserial/80-usbconsole.rules [new file with mode: 0644]
packages/mamona/udev-usbserial_0.1.bb [new file with mode: 0644]
packages/mamona/uinput-2.6.21/nokia800/defconfig [new file with mode: 0644]
packages/mamona/uinput-2.6.21/uinput [new file with mode: 0755]
packages/mamona/uinput_2.6.21.bb [new file with mode: 0644]
packages/meta/mamona-buildall.inc [deleted file]
packages/meta/meta-mamona.bb
packages/opkg/opkg_svn.bb
packages/pidgin/pidgin.inc
packages/python/python-2.5.2/sitecustomize.py
packages/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/06_exit_segfault.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/10_signal_jobs.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/31_syscalls.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/52_ne2000_return.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/63_sparc_build.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/65_kfreebsd.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/66_tls_ld.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/fix_brk.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/fix_protection_bits.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/fix_segfault.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/no-strip.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/qemu-n800-support.patch [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/series [new file with mode: 0644]
packages/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch [new file with mode: 0644]
packages/qemu/qemu-native_svn.bb [new file with mode: 0644]
packages/qemu/qemu_svn.bb [new file with mode: 0644]
packages/shared-mime-info/shared-mime-info-native_0.51.bb [new file with mode: 0644]
packages/shared-mime-info/shared-mime-info.inc
packages/shared-mime-info/shared-mime-info_0.51.bb [new file with mode: 0644]
packages/tasks/mamona-sdk.inc [new file with mode: 0644]
packages/tasks/task-mamona-base.bb
packages/tasks/task-mamona-devel.bb
packages/tasks/task-mamona-e.bb [deleted file]
packages/tasks/task-mamona-extras.bb [deleted file]
packages/tasks/task-mamona-noemu.bb [deleted file]
packages/tasks/task-mamona-nokia-it.bb [deleted file]
packages/tasks/task-mamona-python.bb [new file with mode: 0644]
packages/tasks/task-mamona-sdk-noemu.bb [new file with mode: 0644]
packages/tasks/task-mamona-sdk.bb [new file with mode: 0644]
packages/tasks/task-mamona-systemtap.bb [new file with mode: 0644]
packages/tasks/task-mamona-wm.bb [new file with mode: 0644]
packages/tasks/task-mamona.bb
packages/u-boot/u-boot-mkimage-native-1.3.2/fix-arm920t-eabi.patch [new file with mode: 0644]
packages/u-boot/u-boot-mkimage-native_1.3.2.bb [new file with mode: 0644]

index 3a69b82..1b93767 100644 (file)
@@ -25,7 +25,7 @@ fakeroot rootfs_deb_do_rootfs () {
                # if [ -z "${DEPLOY_KEEP_PACKAGES}" ]; then
                        rm -f Packages.gz Packages Packages.bz2
                # fi
-               apt-ftparchive packages . | bzip2 > Packages.bz2
+               dpkg-scanpackages . | bzip2 > Packages.bz2
                echo "Label: $arch" > Release
 
                echo "deb file:${DEPLOY_DIR_DEB}/$arch/ ./" >> ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev
index e118245..ab8fa9d 100644 (file)
@@ -141,6 +141,7 @@ EXTENDPE = "${@['','${PE\x7d_'][bb.data.getVar('PE',d,1) > 0]}"
 EXTENDPEVER = "${@['','${PE\x7d:'][bb.data.getVar('PE',d,1) > 0]}"
 DEBPV = "${EXTENDPEVER}${PV}-${PR}"
 P = "${PN}-${PV}"
+DISTRO_PR ?= ""
 
 # Base package name
 # Automatically derives "foo" from "foo-native", "foo-cross" or "foo-initial"
index aa05d27..67e788e 100644 (file)
@@ -950,14 +950,30 @@ sha256=8cd84eb2031a91572e1be2975f4171730a9be72c4cd88718c4c40ac7dc4fd7d3
 md5=26b37525371cdaaec552237e0667305d
 sha256=57de084860870cccf510de62eb8ded252f5951a6e59e34a963d61d69de3aff10
 
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.5.28.6.tar.gz]
+md5=26b37525371cdaaec552237e0667305d
+sha256=57de084860870cccf510de62eb8ded252f5951a6e59e34a963d61d69de3aff10
+
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.6.25.tar.gz]
+md5=6569fd95e829036c141a5ccaf8e5948c
+sha256=fa00ce910ab6f0987c4a210962be357d4f013fc89ef72b015f39ae8649522b59
+
 [ftp://ftp.debian.org/debian/pool/main/a/apt/apt_0.6.46.2.tar.gz]
 md5=67d439a252996357b0313b3ad999739a
 sha256=6f1a7340d0de2a9a524055d0ed4289aa919dc29e9e1fe60aae598f2019105686
 
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.6.46.2.tar.gz]
+md5=67d439a252996357b0313b3ad999739a
+sha256=6f1a7340d0de2a9a524055d0ed4289aa919dc29e9e1fe60aae598f2019105686
+
 [ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.7.14.tar.gz]
 md5=19efa18fb1ef20c58b9b44e94258b814
 sha256=8fc06effaf8a4e4333308eedcdc6840f1c8056f2e924210f151dfc076bcd4045
 
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.7.2.tar.gz]
+md5=c66f943203fa24e85ed8c48f6ac5ad1e
+sha256=e7d58e2b202713b4df8cd5fd58bc20ba8d31c0da6e5e3b3c89a138dbf0b24ad9
+
 [ftp://ftp.pl.debian.org/pub/debian/pool/main/a/apt/apt_0.7.3.tar.gz]
 md5=e2e6e23f43bfdf135b923205659dfaf1
 sha256=d3a71446234e567a24740b02abe5bc6c695836343df6139eb7c03ec11871e710
@@ -3038,6 +3054,10 @@ sha256=8955fad7d9e7aef36f7a82f9577c3ae4901db1ded6ce57aec0d93e39c8899b65
 md5=0fc9fffc2c2cfa7107d8f422815078c1
 sha256=c33aeb300d93eaeac55927ce81dc6f3a1cf74b3b759b65182c9bfca31b75b98f
 
+[ftp://ftp.pl.debian.org/pub/debian/pool/main/d/dpkg/dpkg_1.13.22.tar.gz]
+md5=0fc9fffc2c2cfa7107d8f422815078c1
+sha256=c33aeb300d93eaeac55927ce81dc6f3a1cf74b3b759b65182c9bfca31b75b98f
+
 [ftp://ftp.pl.debian.org/pub/debian/pool/main/d/dpkg/dpkg_1.13.24.tar.gz]
 md5=d8ec0b2bf86d5277fb50f8d391c0dd4a
 sha256=8b1ed52659c5f6723f37bf1122508d7f1b82e064aa9db04d18d726bde34c2713
@@ -4550,6 +4570,10 @@ sha256=aeef281072cf3e045b73e7047bd9830a71128b828920b3d389a5b7b7cbd0beff
 md5=f754d2ddea7107c5dff5f846f9426d30
 sha256=69b3269a6b1ca26357e1e72c6be7f0ed742cd88d2042243c0bb9ba76e4acac99
 
+[http://www.kernel.org/pub/software/scm/git/git-1.5.6.5.tar.bz2]
+md5=5175d142ad0745b9e22a64904aa86c45
+sha256=692901194603cc4fb4072d8f907487d867caef6b62161f50f0f44dbeb001066e
+
 [http://downloads.sourceforge.net/gizmod/gizmod-2.3.tar.bz2]
 md5=b7200b08149599c4c0f56d88f0c7f208
 sha256=53af32530e58ba23cbb752f063364612bbea57b31de2ee35814973452c2f63f2
index cb6340a..98da283 100644 (file)
@@ -86,6 +86,8 @@ SRCREV_pn-linux-openmoko-devel ?= "04f54c7001fb609e11ff4b2b4575c04188dbefef"
 SRCREV_pn-llvm-gcc4 ?= "374"
 SRCREV_pn-llvm-gcc4-cross ?= "374"
 SRCREV_pn-maemo-mapper ?= "118"
+SRCREV_pn-mamonaim_e_applet ?= "51c747849f71981bd1dc9eb1807df4993ad97d04"
+SRCREV_pn-mamona_input_methods ?= "7e6a8cc947689a045d0fba90015da599275347d9"
 SRCREV_pn-matchbox-desktop-2 ?= "1778"
 SRCREV_pn-matchbox-keyboard ?= "1910"
 SRCREV_pn-matchbox-keyboard-inputmethod ?= "1910"
@@ -169,6 +171,10 @@ SRCREV_pn-python-gsmd = "148"
 SRCREV_pn-python-lightmediascanner = "68"
 SRCREV_pn-python-pyrtc = "d1f32060474767582dd4248d5e5c2adc63931d5a"
 SRCREV_pn-python-pyyaml = "294"
+QEMUSRCREV = "4242"
+SRCREV_pn-qemu-native ?= "${QEMUSRCREV}"
+SRCREV_pn-qemu-sdk ?= "${QEMUSRCREV}"
+SRCREV_pn-qemu ?= "${QEMUSRCREV}"
 SRCREV_pn-remoko = "115"
 SRCREV_pn-remoko-server = "115"
 SRCREV_pn-s3c24xx-gpio ?= "4130"
index 264a064..83e1026 100644 (file)
@@ -16,6 +16,7 @@ require conf/distro/include/sane-srcrevs.inc
 
 INHERIT += "angstrom-mirrors mamona-mirrors"
 INHERIT += "package_deb debian"
+INHERIT += "buildallpkgs"
 
 CXXFLAGS += "-fvisibility-inlines-hidden"
 
@@ -26,17 +27,17 @@ KERNEL = "kernel26"
 MACHINE_KERNEL_VERSION = "2.6"
 PREFERRED_VERSION_linux-omap1 ?= "2.6.22-omap1"
 PREFERRED_VERSION_linux-libc-headers ?= "2.6.22"
-PREFERRED_VERSION_linux = "2.6.16"
+PREFERRED_VERSION_linux ?= "2.6.22"
 PREFERRED_VERSION_linux-libc-headers_nokia770 = "2.6.16.osso7"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
 
 # Toolchain
 # =========
 
 # gcc
-PREFERRED_PROVIDERS_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
-PREFERRED_PROVIDERS_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
-PREFERRED_PROVIDERS_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
-PREFERRED_PROVIDERS_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
 
 PREFERRED_VERSION_gcc ?= "4.1.2"
 PREFERRED_VERSION_gcc-cross ?= "4.1.2"
@@ -45,6 +46,7 @@ PREFERRED_VERSION_gcc-cross-initial ?= "4.1.2"
 PREFERRED_VERSION_gcc-cross-intermediate ?= "4.1.2"
 
 # binutils
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
 PREFERRED_VERSION_binutils ?= "2.18"
 PREFERRED_VERSION_binutils-cross ?= "2.18"
 PREFERRED_VERSION_binutils-cross-sdk ?= "2.18"
@@ -57,6 +59,7 @@ PREFERRED_PROVIDER_virtual/libc = "glibc"
 PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial ?= "glibc-initial"
 
 PREFERRED_VERSION_glibc ?= "2.5"
+PREFERRED_VERSION_glibc-intermediate ?= "2.5"
 PREFERRED_VERSION_glibc-initial ?= "2.5"
 PREFERRED_VERSION_uclibc ?= "0.9.29"
 
@@ -75,6 +78,7 @@ PREFERRED_PROVIDER_virtual/update-alternatives ?= "update-alternatives-dpkg"
 PREFERRED_PROVIDER_virtual/ecore ?= "ecore-x11"
 PREFERRED_PROVIDER_virtual/evas ?= "evas-x11"
 PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
 PREFERRED_PROVIDER_virtual/db ?= "db"
 PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
 PREFERRED_PROVIDER_avahi = "avahi"
@@ -83,3 +87,15 @@ PREFERRED_PROVIDER_gconf = "gconf-dbus"
 PREFERRED_VERSION_apt = "0.7.6"
 PREFERRED_VERSION_gpsd ?= "2.33"
 PREFERRED_VERSION_hal_nokia770 = "0.5.7"
+PREFERRED_VERSION_networkmanager ?= "0.6.6"
+
+# Mplayer
+PREFERRED_VERSION_mplayer_nokia770 ?= "1.0maemo0"
+PREFERRED_VERSION_mplayer_nokia800 ?= "1.0maemo0"
+
+# Network
+PREFERRED_VERSION_wpa-supplicant = "0.5.7"
+
+# Mozilla
+PREFERRED_PROVIDER_gtk+ = "gtk+"
+PREFERRED_VERSION_gtk+ = "2.10.14"
diff --git a/packages/alsa/alsa-state/nokia800/asound.state b/packages/alsa/alsa-state/nokia800/asound.state
new file mode 100644 (file)
index 0000000..6ae874c
--- /dev/null
@@ -0,0 +1,105 @@
+state.EAC {
+       control.1 {
+               comment.access 'read write'
+               comment.type BOOLEAN
+               comment.count 2
+               iface MIXER
+               name 'Capture Switch'
+               value.0 false
+               value.1 false
+       }
+       control.2 {
+               comment.access 'read write'
+               comment.type INTEGER
+               comment.count 2
+               comment.range '6 - 127'
+               iface MIXER
+               name 'Capture Volume'
+               value.0 87
+               value.1 87
+       }
+       control.3 {
+               comment.access 'read write'
+               comment.type BOOLEAN
+               comment.count 2
+               iface MIXER
+               name 'PCM Playback Switch'
+               value.0 true
+               value.1 true
+       }
+       control.4 {
+               comment.access 'read write'
+               comment.type INTEGER
+               comment.count 2
+               comment.range '0 - 127'
+               iface MIXER
+               name 'PCM Playback Volume'
+               value.0 103
+               value.1 103
+       }
+       control.5 {
+               comment.access 'read write'
+               comment.type BOOLEAN
+               comment.count 2
+               iface MIXER
+               name 'Line Playback Switch'
+               value.0 false
+               value.1 false
+       }
+       control.6 {
+               comment.access 'read write'
+               comment.type INTEGER
+               comment.count 2
+               comment.range '31 - 127'
+               iface MIXER
+               name 'Line Playback Volume'
+               value.0 103
+               value.1 103
+       }
+       control.7 {
+               comment.access 'read write'
+               comment.type INTEGER
+               comment.count 1
+               comment.range '1 - 3'
+               iface MIXER
+               name 'Mic Boost'
+               value 0
+       }
+       control.8 {
+               comment.access 'read write'
+               comment.type ENUMERATED
+               comment.count 2
+               comment.item.0 Mic
+               comment.item.1 Line
+               comment.item.2 'Line swapped'
+               comment.item.3 'Line mono'
+               iface MIXER
+               name 'Capture Source'
+               value.0 Mic
+               value.1 Mic
+       }
+       control.9 {
+               comment.access 'read write'
+               comment.type BOOLEAN
+               comment.count 1
+               iface MIXER
+               name 'Headset Amplifier'
+               value false
+       }
+       control.10 {
+               comment.access 'read write'
+               comment.type BOOLEAN
+               comment.count 1
+               iface MIXER
+               name 'Speaker Amplifier'
+               value true
+       }
+       control.11 {
+               comment.access 'read write'
+               comment.type BOOLEAN
+               comment.count 1
+               iface MIXER
+               name 'Headset Mic Select'
+               value false
+       }
+}
diff --git a/packages/apt/apt-0.7.14/no-ko-translation.patch b/packages/apt/apt-0.7.14/no-ko-translation.patch
new file mode 100644 (file)
index 0000000..5f3634b
--- /dev/null
@@ -0,0 +1,9 @@
+---
+ po/LINGUAS |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- apt-0.7.14.orig/po/LINGUAS
++++ apt-0.7.14/po/LINGUAS
+@@ -1 +1 @@
+-ar bg bs ca cs cy da de dz el en_GB es eu fi fr gl he hu it ja km ko ku mr nb ne nl nn pl pt pt_BR ro ru sk sl sv th tl uk vi zh_CN zh_TW
++ar bg bs ca cs cy da de dz el en_GB es eu fi fr gl he hu it ja km ku mr nb ne nl nn pl pt pt_BR ro ru sk sl sv th tl uk vi zh_CN zh_TW
diff --git a/packages/apt/apt-0.7.14/noconfigure.patch b/packages/apt/apt-0.7.14/noconfigure.patch
new file mode 100644 (file)
index 0000000..682a96d
--- /dev/null
@@ -0,0 +1,35 @@
+---
+ apt-pkg/packagemanager.cc |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- apt-0.6.45exp2.orig/apt-pkg/packagemanager.cc
++++ apt-0.6.45exp2/apt-pkg/packagemanager.cc
+@@ -534,10 +534,12 @@ bool pkgPackageManager::SmartUnPack(PkgI
+    
+    List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
+    
++#if 0
+    // Perform immedate configuration of the package.
+    if (List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
+       if (SmartConfigure(Pkg) == false)
+        return _error->Error("Internal Error, Could not perform immediate configuration (2) on %s",Pkg.Name());
++#endif
+    
+    return true;
+ }
+@@ -609,6 +611,7 @@ pkgPackageManager::OrderResult pkgPackag
+       DoneSomething = true;
+    }
+    
++#if 0
+    // Final run through the configure phase
+    if (ConfigureAll() == false)
+       return Failed;
+@@ -623,6 +626,7 @@ pkgPackageManager::OrderResult pkgPackag
+        return Failed;
+       }
+    }   
++#endif
+        
+    return Completed;
+ }
diff --git a/packages/apt/apt-0.7.14/nodoc.patch b/packages/apt/apt-0.7.14/nodoc.patch
new file mode 100644 (file)
index 0000000..db8cf93
--- /dev/null
@@ -0,0 +1,19 @@
+---
+ Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- apt-0.7.14.orig/Makefile
++++ apt-0.7.14/Makefile
+@@ -15,11 +15,11 @@ all headers library clean veryclean bina
+       $(MAKE) -C apt-inst $@
+       $(MAKE) -C methods $@
+       $(MAKE) -C cmdline $@
+       $(MAKE) -C ftparchive $@
+       $(MAKE) -C dselect $@
+-      $(MAKE) -C doc $@
++#     $(MAKE) -C doc $@
+       $(MAKE) -C po $@
+ # Some very common aliases
+ .PHONY: maintainer-clean dist-clean distclean pristine sanity 
+ maintainer-clean dist-clean distclean pristine sanity: veryclean
diff --git a/packages/apt/apt-0.7.14/use-host.patch b/packages/apt/apt-0.7.14/use-host.patch
new file mode 100644 (file)
index 0000000..894a697
--- /dev/null
@@ -0,0 +1,44 @@
+---
+ buildlib/sizetable |    4 +++-
+ configure.in       |    2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- apt-0.7.14.orig/buildlib/sizetable
++++ apt-0.7.14/buildlib/sizetable
+@@ -9,16 +9,19 @@
+ #
+ # This is used primarily for the MD5 algorithm.
+ # The format is:-
+ # CPU endian sizeof: char, int, short, long
+ i386    little  1 4 2 4
++i486    little  1 4 2 4
++i586    little  1 4 2 4
++i686    little  1 4 2 4
+ armeb   big     1 4 2 4
+ arm     little  1 4 2 4
+ alpha   little  1 4 2 8
+ mipsel  little  1 4 2 4
+ sparc   big     1 4 2 4
+ sparc64 big     1 4 2 8
+ m68k    big     1 4 2 4
+ powerpc big     1 4 2 4
+ mips    big     1 4 2 4
+ hppa    big     1 4 2 4
+-m32r  big     1 4 2 4
+\ No newline at end of file
++m32r  big     1 4 2 4
+--- apt-0.7.14.orig/configure.in
++++ apt-0.7.14/configure.in
+@@ -86,11 +86,11 @@ AC_SUBST(BDBLIB)
+ dnl Converts the ARCH to be something singular for this general CPU family
+ dnl This is often the dpkg architecture string.
+ dnl First check against the full canonical canoncial-system-type in $target
+ dnl and if that fails, just look for the cpu
+ AC_MSG_CHECKING(debian architecture)
+-archset="`dpkg-architecture -qDEB_HOST_ARCH`"
++archset="`echo $host_alias|cut -d'-' -f1`"
+ if test "x$archset" = "x"; then
+    AC_MSG_ERROR([failed: use --host= or output from dpkg-architecture])
+ fi
+ AC_MSG_RESULT($archset)
+ AC_DEFINE_UNQUOTED(COMMON_ARCH,"$archset")
index 75cd8f4..6ee26e4 100644 (file)
@@ -1,10 +1,10 @@
 require apt.inc
 inherit native
 
-DEPENDS += "dpkg-native curl-native db-native"
+DEPENDS += "dpkg-native gettext-native"
 FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/apt-${PV}"
 PACKAGES = ""
-USE_NLS = "no"
+USE_NLS = "yes"
 
 SRC_URI += "file://db_linking_hack.patch;patch=1"
 
@@ -37,7 +37,6 @@ do_stage_base () {
        install -m 0755 bin/apt-get ${bindir}/
        install -m 0755 bin/apt-config ${bindir}/
        install -m 0755 bin/apt-cache ${bindir}/
-       install -m 0755 bin/apt-ftparchive ${bindir}/
        install -m 0755 bin/apt-sortpkgs ${bindir}/
        install -m 0755 bin/apt-extracttemplates ${bindir}/
 
@@ -60,4 +59,6 @@ do_stage_base () {
        install -d ${sysconfdir}/apt
        install -d ${localstatedir}/lib/apt/lists/partial
        install -d ${localstatedir}/cache/apt/archives/partial
+
+       install -d ${localstatedir}/log/apt/
 }
diff --git a/packages/apt/apt-native_0.7.14.bb b/packages/apt/apt-native_0.7.14.bb
new file mode 100644 (file)
index 0000000..268e9df
--- /dev/null
@@ -0,0 +1,7 @@
+require apt-native.inc
+
+PR = "r2"
+
+SRC_URI += "file://nodoc.patch;patch=1 \
+            file://noconfigure.patch;patch=1 \
+           file://no-curl.patch;patch=1"
index 605eb95..2b4f6d5 100644 (file)
@@ -58,7 +58,7 @@ FILES_${PN} = "${bindir}/apt-cdrom ${bindir}/apt-get \
               ${libdir}/apt ${libdir}/libapt*.so.* \
               ${localstatedir} ${sysconfdir} \
               ${libdir}/dpkg"
-FILES_${PN}-dbg += "${libdir}/apt/*/.debug"
+FILES_${PN}-dbg += "${libdir}/apt/*/.debug"
 FILES_${PN}-utils = "${bindir}/apt-sortpkgs ${bindir}/apt-extracttemplates"
 FILES_${PN}-doc = "${@get_files_apt_doc(d, bb, bb.data.getVar('apt-manpages', d, 1))} \
                   ${docdir}/apt"
index 92507be..5c49887 100644 (file)
@@ -1,11 +1,10 @@
 DESCRIPTION = "Advanced front-end for dpkg."
 LICENSE = "GPL"
 SECTION = "base"
-DEPENDS = "curl db"
-RDEPENDS = "dpkg"
 
 SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/apt_${PV}.tar.gz \
            file://environment.patch;patch=1"
+
 S = "${WORKDIR}/apt-${PV}"
 
 inherit autotools gettext
diff --git a/packages/apt/apt_0.7.14.bb b/packages/apt/apt_0.7.14.bb
new file mode 100644 (file)
index 0000000..251ed64
--- /dev/null
@@ -0,0 +1,27 @@
+DEPENDS = "curl db"
+RDEPENDS = "dpkg"
+
+require apt.inc
+
+SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/apt_${PV}.tar.gz \
+           file://no-ko-translation.patch;patch=1 \
+           file://use-host.patch;patch=1 "
+PR = "r2"
+
+SRC_URI += "file://nodoc.patch;patch=1"
+
+require apt-package.inc
+
+FILES_${PN} += "${bindir}/apt-key"
+apt-manpages += "doc/apt-key.8"
+
+do_stage() {
+       install -d ${STAGING_LIBDIR} ${STAGING_INCDIR}/apt-pkg
+       eval `cat environment.mak | grep ^GLIBC_VER | sed -e's, = ,=,'`
+       oe_libinstall -so -C bin libapt-pkg$GLIBC_VER-6 ${STAGING_LIBDIR}/
+       ln -sf libapt-pkg$GLIBC_VER-6.so ${STAGING_LIBDIR}/libapt-pkg.so
+       oe_libinstall -so -C bin libapt-inst$GLIBC_VER-6 ${STAGING_LIBDIR}/
+       ln -sf libapt-inst$GLIBC_VER-6.so ${STAGING_LIBDIR}/libapt-inst.so
+
+       install -m 0644 include/apt-pkg/*.h ${STAGING_INCDIR}/apt-pkg/
+}
diff --git a/packages/apt/files/no-curl.patch b/packages/apt/files/no-curl.patch
new file mode 100644 (file)
index 0000000..4e07c8f
--- /dev/null
@@ -0,0 +1,44 @@
+---
+ configure.in     |    6 ------
+ methods/makefile |    7 -------
+ 2 files changed, 13 deletions(-)
+
+--- apt-0.7.14.orig/configure.in
++++ apt-0.7.14/configure.in
+@@ -84,16 +84,10 @@ AC_CHECK_HEADER(db.h,
+     )]
+ )
+ LIBS="$saveLIBS"
+-AC_CHECK_LIB(curl, curl_easy_init,
+-     [AC_CHECK_HEADER(curl/curl.h,
+-        curl_ok=yes,
+-        curl_ok=no)],
+-     AC_MSG_ERROR([failed: I need CURL due https support]),
+-)
+ AC_SUBST(BDBLIB)
+ dnl Converts the ARCH to be something singular for this general CPU family
+ dnl This is often the dpkg architecture string.
+--- apt-0.7.14.orig/methods/makefile
++++ apt-0.7.14/methods/makefile
+@@ -50,17 +50,10 @@ PROGRAM=http
+ SLIBS = -lapt-pkg $(SOCKETLIBS)
+ LIB_MAKES = apt-pkg/makefile
+ SOURCE = http.cc rfc2553emu.cc connect.cc
+ include $(PROGRAM_H)
+-# The https method
+-PROGRAM=https
+-SLIBS = -lapt-pkg -lcurl
+-LIB_MAKES = apt-pkg/makefile
+-SOURCE = https.cc
+-include $(PROGRAM_H)
+-
+ # The ftp method
+ PROGRAM=ftp
+ SLIBS = -lapt-pkg $(SOCKETLIBS)
+ LIB_MAKES = apt-pkg/makefile
+ SOURCE = ftp.cc rfc2553emu.cc connect.cc
diff --git a/packages/dpkg/dpkg-1.14.19/ignore_extra_fields.patch b/packages/dpkg/dpkg-1.14.19/ignore_extra_fields.patch
new file mode 100644 (file)
index 0000000..d09343c
--- /dev/null
@@ -0,0 +1,26 @@
+ dpkg-deb/build.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- dpkg-1.14.19.orig/dpkg-deb/build.c
++++ dpkg-1.14.19/dpkg-deb/build.c
+@@ -241,18 +241,18 @@ void do_build(const char *const *argv) {
+     if (checkedinfo->priority == pri_other) {
+       fprintf(stderr, _("warning, `%s' contains user-defined Priority value `%s'\n"),
+               controlfile, checkedinfo->otherpriority);
+       warns++;
+     }
+-    for (field= checkedinfo->available.arbs; field; field= field->next) {
++    /*for (field= checkedinfo->available.arbs; field; field= field->next) {
+       if (known_arbitrary_field(field))
+         continue;
+       fprintf(stderr, _("warning, `%s' contains user-defined field `%s'\n"),
+               controlfile, field->name);
+       warns++;
+-    }
++    }*/
+     checkversion(checkedinfo->available.version.version,"(upstream) version",&errs);
+     checkversion(checkedinfo->available.version.revision,"Debian revision",&errs);
+     if (errs) ohshit(_("%d errors in control file"),errs);
+     if (subdir) {
index 7087f1f..5dcf53c 100644 (file)
@@ -1,5 +1,5 @@
 require dpkg.inc
-PR = "r3"
+PR = "r4"
 DEPENDS += "zlib-native virtual/update-alternatives-native"
 SRC_URI += "file://noman.patch;patch=1"
 
@@ -10,4 +10,5 @@ EXTRA_OECONF = "--without-static-progs \
                --with-start-stop-daemon \
                --with-zlib \
                --with-bz2lib \
+               --without-selinux \
                --without-sgml-doc"
diff --git a/packages/dpkg/dpkg-native_1.14.19.bb b/packages/dpkg/dpkg-native_1.14.19.bb
new file mode 100644 (file)
index 0000000..f8d6705
--- /dev/null
@@ -0,0 +1,15 @@
+require dpkg.inc
+DEPENDS += "bzip2-native zlib-native virtual/update-alternatives-native"
+SRC_URI += "file://noman.patch;patch=1"
+
+FILESPATH += "dpkg-${PV}"
+
+inherit native
+
+EXTRA_OECONF = "--without-static-progs \
+               --without-dselect \
+               --with-start-stop-daemon \
+               --with-zlib \
+               --with-bz2lib \
+                --without-selinux \
+               --without-sgml-doc"
index 1065f2c..eb5778f 100644 (file)
@@ -10,6 +10,8 @@ S = "${WORKDIR}/dpkg-${PV}"
 
 DEPENDS_${PN} += "update-alternatives"
 
+RDEPENDS += "perl perl-module-base perl-module-carp perl-module-cwd perl-module-english perl-module-exporter perl-module-exporter-heavy perl-module-fcntl perl-module-file-spec-unix perl-module-file-temp perl-module-io perl-module-io-handle perl-module-posix perl-module-strict perl-module-vars perl-module-warnings perl-module-warnings-register perl-module-autoloader perl-module-config perl-module-constant perl-module-errno perl-module-file-basename perl-module-file-path perl-module-file-spec perl-module-overload perl-module-selectsaver perl-module-symbol perl-module-xsloader"
+
 PARALLEL_MAKE = ""
 
 inherit autotools gettext
@@ -24,6 +26,7 @@ if [ "x$D" != "x" ]; then
        # this happens at S98 where our good 'ole packages script used to run
        printf "#!/bin/sh
        dpkg --configure -a
+       rm -f /${sysconfdir}/rcS.d/S${DPKG_INIT_POSITION}configure
 \n" > ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${DPKG_INIT_POSITION}configure
        chmod 0755 ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${DPKG_INIT_POSITION}configure
 fi
index fb301a6..e4e7a3b 100644 (file)
@@ -1,6 +1,6 @@
 require dpkg.inc
-PR = "r4"
-DEPENDS += "ncurses zlib bzip2"
+PR = "r5"
+DEPENDS += "zlib bzip2"
 SRC_URI += "file://noman.patch;patch=1"
 
 EXTRA_OECONF = "--without-static-progs \
index a0bb1dc..8a2c8ab 100644 (file)
@@ -1,6 +1,6 @@
 require dpkg.inc
-PR = "r0"
-DEPENDS += "ncurses zlib bzip2"
+PR = "r1"
+DEPENDS += "zlib bzip2"
 SRC_URI += "file://noman.patch;patch=1"
 
 EXTRA_OECONF = "--without-static-progs \
diff --git a/packages/dpkg/dpkg_1.14.19.bb b/packages/dpkg/dpkg_1.14.19.bb
new file mode 100644 (file)
index 0000000..0377ce1
--- /dev/null
@@ -0,0 +1,12 @@
+require dpkg.inc
+PR = "r1"
+DEPENDS += "zlib bzip2"
+#RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives}"
+SRC_URI += "file://noman.patch;patch=1"
+
+EXTRA_OECONF = "--without-static-progs \
+               --without-dselect \
+               --with-start-stop-daemon \
+               --with-zlib \
+               --with-bz2lib \
+               --without-sgml-doc"
index 21a90b3..4cb227e 100644 (file)
@@ -6,7 +6,7 @@ RDEPENDS = "update-modules"
 inherit module
 
 # tconf from xdctools dislikes '.' in pwd :/
-PR = "r0"
+PR = "r1"
 PV = "221"
 
 # Get CE tarball from TI website, place in sources and calculate
@@ -14,26 +14,58 @@ 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_00_06.tar.gz \
+           file://Makefile.dsplink \
           "
 
 S = "${WORKDIR}/codec_engine_2_21_00_06"
 
 require ti-paths.inc
 
-DSPPOWERSOC ?= "dm6446"
-DSPPOWERSOC_beagleboard = "omap3530"
+export DSPLINK="${S}/cetools/packages/dsplink"
 
 PARALLEL_MAKE = ""
+
+do_configure () {
+       # Run perl script to create appropriate makefiles (v1.60 and up)
+       perl ${S}/cetools/packages/dsplink/config/bin/dsplinkcfg.pl --platform=${DSPLINKPLATFORM} --nodsp=1 --dspcfg_0=${DSPCFG} --dspos_0=DSPBIOS5XX  --gppos=${GPPOS} --comps=ponslrm
+}
+
 do_compile() {
+    unset DISPLAY
+    sed -i -e s:armv7a:armv7-a:g make/Linux/omap3530_2.6.mk || true
+
+    # export various settings to override the defaults in the makefiles
+    export DSP_BASE_CGTOOLS=${TITOOLSDIR}/${TICGTOOLSDIR}
+    export DSP_BASE_BIOS=${TITOOLSDIR}/${TIBIOSDIR}
+    export DSP_BASE_RTDX=${TITOOLSDIR}/${TIBIOSDIR}/packages/ti/rtdx
+    export GPPTOOL_DIR=${CROSS_DIR}
+    export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+    export LINK_INSTALL_DIR=${DSPLINK}
+    export VARIANT=${DSPLINKSOC}
+    export PLATFORM=${DSPLINKPLATFORM}
+    export BASE_TOOLCHAIN=${CROSS_DIR}
+    export BASE_CGTOOLS=${BASE_TOOLCHAIN}/bin
+    # 'OSINC_PLATFORM' is used in both the dsp and gpp sides...
+    export OSINC_PLATFORM1=${CROSS_DIR}/lib/gcc/${TARGET_SYS}/$(${TARGET_PREFIX}gcc -dumpversion)/include
+    export OSINC_TARGET=${BASE_TOOLCHAIN}/target/usr/include
+
+    # 'ARCHIVER' is being used in the dsp side of the build as well as gpp
+    export ARCHIVER_AR=${TARGET_PREFIX}ar
+    export BASE_SABIOS=${DSP_BASE_BIOS}
+   
+    make -e -f ${WORKDIR}/Makefile.dsplink
+
        echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make         
        echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
        echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}"  >> ${S}/Rules.make
 
-       # Build the cmem kernel module  
+       # 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
 
        oe_runmake clean
+       # We probably don't need to build all 3, but atm it doesn't hurt us     
        oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
            KERNEL_SRC=${STAGING_KERNEL_DIR}    \
            KERNEL_VERSION=${KERNEL_VERSION}    \
@@ -55,7 +87,7 @@ do_compile() {
        # Build the DSP power manager kernel module
        cd ${S}/cetools/packages/ti/bios/power
 
-       # Unpack all kernel sources for teh DSP power manager module
+       # Unpack all kernel sources for the DSP power manager module
        for dsp in $(ls | grep bld | awk -F, '{print $2}' | awk -F_ '{print $1}') ; do
                if ! [ -e $dsp ] ; then tar xf ti_bios_power,${dsp}_bld.tar ; fi
        done            
@@ -64,7 +96,8 @@ do_compile() {
 
        export KERNEL_DIR=${STAGING_KERNEL_DIR}
        export TOOL_PREFIX=${TARGET_PREFIX} 
-       
+
+       # Different SoCs use different toolchains by default, we just want them to use the OE one, so replace the entries because they can't be overloaded within the environment
        sed -i -e s:/db/toolsrc/library/tools/vendors/mvl/arm/omap3/OMAP35x_SDK_0.9.7/src/linux/kernel_org/2.6_kernel:${STAGING_KERNEL_DIR}:g \
            -e s:/db/toolsrc/library/tools/vendors/cs/arm/arm-2007q3/bin/arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
            -e s:/db/atree/library/trees/power/power-d02x/imports:${STAGING_DIR}/${MULTIMACH_TARGET_SYS}:g \
@@ -79,9 +112,12 @@ do_compile() {
            AR="${KERNEL_AR}"
        
        cd ${S}/examples
+       # export some more variable to point to external TI tools
+       # information is duplicated between the js and make based tools
        export CE_INSTALL_DIR=${S}
        export XDC_INSTALL_DIR=${TIXDCTOOLSDIR}
        export BIOS_INSTALL_DIR=${TITOOLSDIR}/${TIBIOSDIR}
+       # needed for configuro:
        export CGTOOLS_V5T="${CROSS_DIR}"
        export CC_V5T="bin/${TARGET_PREFIX}gcc"
 
@@ -92,7 +128,7 @@ do_compile() {
         -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' \ 
+        -e 's:true,  // build for PC Linux:false,:g' \ 
        ${S}/examples/user.bld
 
        # Fix path to c6x codegen
@@ -100,7 +136,9 @@ do_compile() {
                xdcpaths.mak
        
        # Start building the CE examples: codecs, extensions, servers (codec bundles) and ARM side apps 
+       # the DSP side uses CC to point to the c6x codegen, but would get the gcc tool
        unset CC
+       # Make clean doesn't do what you'd expect, it only cleans stuff you've enabled, so some cruft remains   
        for i in codecs extensions servers apps ; do
                make -e -C ${S}/examples/ti/sdo/ce/examples/$i clean    
                make -e -C ${S}/examples/ti/sdo/ce/examples/$i
@@ -108,61 +146,24 @@ do_compile() {
 
 }
 
-export DSPLIBS = "${S}/packages/ti/sdo/ce/utils/trace/lib/*.a* \
-                  ${S}/packages/ti/sdo/ce/bioslog/lib/*.a* \
-                  ${S}/packages/ti/sdo/ce/video/lib/*.a* \
-                  ${S}/packages/ti/sdo/ce/audio/lib/*.a* \
-                  ${S}/packages/ti/sdo/ce/speech/lib/*.a* \
-                  ${S}/packages/ti/sdo/ce/lib/*.a* \
-                  ${S}/packages/ti/sdo/ce/alg/lib/*.a* \
-                  ${S}/cetools/packages/ti/sdo/fc/dman3/*.a* \
-                  ${S}/cetools/packages/ti/sdo/fc/acpy3/*.a* \
-                         ${S}/packages/ti/sdo/ce/osal/linux/lib/osal_linux_470.a* \ 
-                  ${S}/packages/ti/sdo/ce/utils/xdm/lib/*.a* \
-                  ${S}/cetools/packages/ti/sdo/utils/trace/lib/*.a* \
-                 "
 
 do_install() {
-               unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-               cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
-               oe_runmake install
                install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-               mv ${D}/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-               install -d ${D}/${base_sbindir}
-               cd ${D} ; mv apitest apitestd multi_process multi_processd translate translated ${D}/${base_sbindir}            
-
-
-               install -d ${D}/${libdir}
-               for i in ${DSPLIBS}; do
-                       install -m 0755 $i ${D}/${libdir}/ || true
-               done
-        install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/lib/*.a ${D}/${libdir}
+               cp ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+               cp ${S}/cetools/packages/ti/bios/power/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
 }
 
 do_stage() {
-               install -d ${STAGING_LIBDIR}    
-               for i in ${DSPLIBS} ; do
-                       install -m 0755 $i ${STAGING_LIBDIR}/ 
-                       ln -sf ${STAGING_LIBDIR}/$(basename $i | awk -F. '{print $1}').a470MV  ${STAGING_LIBDIR}/$(basename $i | awk -F. '{print $1}').a || true 
-               done
-
-        install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/lib/*.a ${STAGING_LIBDIR}/
-
-               install -d ${STAGING_INCDIR}/codec-engine}
-               
-               for header in $(find ${S}/cetools/packages/ -name "*.h") ; do
-                       install -d ${STAGING_INCDIR}/codec-engine/$(dirname $header | sed s:${S}::g)
-                       cp -pPr  $header ${STAGING_INCDIR}/codec-engine/$(echo $header | sed s:${S}::g)
-               done
-       
-               for header in $(find ${S}/packages/ -name "*.h") ; do
-                       install -d ${STAGING_INCDIR}/codec-engine/$(dirname $header | sed s:${S}::g)
-                       cp -pPr  $header ${STAGING_INCDIR}/codec-engine/$(echo $header | sed s:${S}::g)
-               done
-       
+    install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/codecengine
+    cp -pPr ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/codecengine/
 }
 
-pkg_postinst_${PN}-module () {
+INHIBIT_PACKAGE_STRIP = "1"
+
+PACKAGES =+ "ti-cmemk-module"
+FILES_ti-cmemk-module = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
+
+pkg_postinst_ti-cmemk-module () {
                if [ -n "$D" ]; then        
                 exit 1
         fi
@@ -170,13 +171,25 @@ pkg_postinst_${PN}-module () {
         update-modules || true
 }
 
-pkg_postrm_${PN}-module () {
+pkg_postrm_ti-cmemk-module () {
+        update-modules || true
+}
+
+PACKAGES =+ "ti-lpm-module"
+FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
+
+pkg_postinst_ti-lpm-module () {
+        if [ -n "$D" ]; then
+                exit 1
+        fi
+        depmod -a
+        update-modules || true
+}
+
+pkg_postrm_ti-lpm-module () {
         update-modules || true
 }
 
-PACKAGES =+ "dsplink-cmemk-module"
-FILES_dsplink-cmemk-module = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*ko"
-INHIBIT_PACKAGE_STRIP = "1"
 
 FILES_${PN} = "${base_sbindir}"
 
index 5253f00..10e7c23 100644 (file)
@@ -9,7 +9,7 @@ inherit module
 S = "${WORKDIR}/dsplink_1_60/dsplink"
 
 # Needed for buildscripts
-export DSPLINK = "${S}"
+export DSPLINK="${S}"
 
 require ti-paths.inc
 
@@ -37,10 +37,8 @@ export DSPCFG
 export GPPOS
 
 do_configure () {
-
-# Run perl script to create appropriate makefiles (v1.60 and up)
-DSPLINK=${S} perl config/bin/dsplinkcfg.pl --platform=${DSPLINKPLATFORM} --nodsp=1 --dspcfg_0=${DSPCFG} --dspos_0=DSPBIOS5XX  --gppos=${GPPOS} --comps=ponslrm
-
+       # Run perl script to create appropriate makefiles (v1.60 and up)
+       perl config/bin/dsplinkcfg.pl --platform=${DSPLINKPLATFORM} --nodsp=1 --dspcfg_0=${DSPCFG} --dspos_0=DSPBIOS5XX  --gppos=${GPPOS} --comps=ponslrm
 }
 
 PARALLEL_MAKE = ""
@@ -55,13 +53,16 @@ do_compile () {
        export DSP_BASE_RTDX=${TITOOLSDIR}/${TIBIOSDIR}/packages/ti/rtdx
        export GPPTOOL_DIR=${CROSS_DIR}
        export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
-       export LINK_INSTALL_DIR=${S}
+       export LINK_INSTALL_DIR=${DSPLINK}
        export VARIANT=${DSPLINKSOC}
        export PLATFORM=${DSPLINKPLATFORM}
        export BASE_TOOLCHAIN=${CROSS_DIR}
        export BASE_CGTOOLS=${BASE_TOOLCHAIN}/bin
+       # 'OSINC_PLATFORM' is used in both the dsp and gpp sides...     
        export OSINC_PLATFORM1=${CROSS_DIR}/lib/gcc/${TARGET_SYS}/$(${TARGET_PREFIX}gcc -dumpversion)/include
        export OSINC_TARGET=${BASE_TOOLCHAIN}/target/usr/include
+
+       # 'ARCHIVER' is being used in the dsp side of the build as well as gpp
        export ARCHIVER_AR=${TARGET_PREFIX}ar
        export BASE_SABIOS=${DSP_BASE_BIOS}
        
index 7156bcb..fdb8b42 100755 (executable)
@@ -6,27 +6,20 @@
 #include Rules.make
 
 PROJECT_BASE_DIR = $(shell pwd)
-LINUXKERNEL_INSTALL_DIR:=/home/rmonklocal/oe/angstrom-davinci-dvevm-tmp/staging/davinci-dvevm-angstrom-linux-gnueabi/kernel
-LINK_INSTALL_DIR := /home/rmonklocal/dsplink_1_51/dsplink
+LINUXKERNEL_INSTALL_DIR:=some-path/kernel
+LINK_INSTALL_DIR := some-path/dsplink_1_51/dsplink
 
 # The prefix to be added before the GNU compiler tools (optionally including
 # path), i.e. "arm_v5t_le-" or "/opt/bin/arm_v5t_le-".
-GPPTOOL_DIR:=/home/rmonklocal/oe/angstrom-davinci-dvevm-tmp/cross
+GPPTOOL_DIR:=some-path/cross
 
 # ---- DSP tools ----
-DSP_BASE_CGTOOLS    := /home/rmonklocal/opt/cg6x_6_0_19
-DSP_BASE_BIOS      := /home/rmonklocal/opt/bios_5_32_03
-DSP_BASE_RTDX      := /home/rmonklocal/opt/bios_5_32_03/packages/ti/rtdx
+DSP_BASE_CGTOOLS    := some-path/cg6x_6_0_19
+DSP_BASE_BIOS      := some-path/bios_5_32_03
+DSP_BASE_RTDX      := some-path/bios_5_32_03/packages/ti/rtdx
 OSINC_PLATFORM1     := something
 ARCHIVER_AR         := something
 
-# ---- get build host OS ----
-UNAME=$(shell uname)
-ifeq "$(UNAME)" "Linux"
-       BUILD_HOST_OS=Linux
-else
-       BUILD_HOST_OS=Solaris
-endif
 
 # ---- construct Link build make vars ----
 GPP_MAKE_OPTS :=  COMPILER=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-gcc \
@@ -39,46 +32,6 @@ GPP_MAKE_OPTS :=  COMPILER=$(GPPTOOL_DIR)/bin/arm-angstrom-linux-gnueabi-gcc \
                  BASE_TOOLCHAIN=$(GPPTOOL_DIR) \
                  BASE_BUILDOS=$(LINUXKERNEL_INSTALL_DIR) \
                  ARCHIVER=$(ARCHIVER_AR) OSINC_PLATFORM=$(OSINC_PLATFORM1) \
-                 #STD_KRNL_FLAGS=\
-                  -include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall  -Wstrict-prototypes \
-                   -Wno-trigraphs -fno-strict-aliasing -fno-common             \
-                   -fno-omit-frame-pointer -mapcs -mno-sched-prolog            \
-                   -mlittle-endian \
-                   -D__LINUX_ARM_ARCH__=5 -march=armv5t -mtune=arm9tdmi \
-                   -msoft-float -Uarm -mapcs                  \
-                   -Wdeclaration-after-statement -Os -marm  -mabi=aapcs-linux
-
-                 #STD_KRNL_FLAGS=\
-                       -nostdinc \
-                       -isystem /home/rmonklocal/oe/angstrom-davinci-dvevm-tmp/cross/lib/gcc/arm-angstrom-linux-gnueabi/4.2.4/include \
-                       -D__KERNEL__ \
-                       -Iinclude -include include/linux/autoconf.h \
-                       -mlittle-endian \
-                       -Wall \
-                       -Wundef \
-                       -Wstrict-prototypes \
-                       -Wno-trigraphs \
-                       -fno-strict-aliasing \
-                       -fno-common \
-                       -Werror-implicit-function-declaration \
-                       -Os \
-                       -fno-stack-protector \
-                       -marm \
-                       -fno-omit-frame-pointer \
-                       -mapcs \
-                       -mno-sched-prolog \
-                       -mabi=aapcs-linux \
-                       -mno-thumb-interwork \
-                       -D__LINUX_ARM_ARCH__=5 \
-                       -march=armv5te \
-                       -mtune=arm9tdmi \
-                       -msoft-float \
-                       -Uarm \
-                       -fno-omit-frame-pointer \
-                       -fno-optimize-sibling-calls \
-                       -Wdeclaration-after-statement \
-                       -Wno-pointer-sign \
-                       -c
 
 DSP_MAKE_OPTS :=  DSPLINK=$(DSPLINK) \
                   DPPROOT=$(DSPLINK)/dsp \
diff --git a/packages/dsplink/ti-cmemk-module_2.21.bb b/packages/dsplink/ti-cmemk-module_2.21.bb
new file mode 100644 (file)
index 0000000..82e5fb6
--- /dev/null
@@ -0,0 +1,83 @@
+DESCRIPTION = "Codec Engine for TI ARM/DSP processors - cmemk module"
+
+DEPENDS = "virtual/kernel perl-native"
+RDEPENDS = "update-modules"
+
+inherit module
+
+# tconf from xdctools dislikes '.' in pwd :/
+PR = "r1"
+PV = "221"
+
+# Get CE tarball from TI website, place in sources and calculate
+# md5sum
+# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html
+
+SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_21_00_06.tar.gz \
+           file://Makefile.dsplink \
+          "
+
+S = "${WORKDIR}/codec_engine_2_21_00_06"
+
+require ti-paths.inc
+
+export DSPLINK="${S}/cetools/packages/dsplink"
+
+PARALLEL_MAKE = ""
+
+
+do_compile() {
+       echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make         
+       echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
+       echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}"  >> ${S}/Rules.make
+
+       # Build the 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
+
+       oe_runmake clean
+       # We probably don't need to build all 3, but atm it doesn't hurt us     
+       oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
+           KERNEL_SRC=${STAGING_KERNEL_DIR}    \
+           KERNEL_VERSION=${KERNEL_VERSION}    \
+           CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+           AR="${KERNEL_AR}" \
+           release
+       oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
+           KERNEL_SRC=${STAGING_KERNEL_DIR}    \
+           KERNEL_VERSION=${KERNEL_VERSION}    \
+           CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+           AR="${KERNEL_AR}" \
+           debug
+       oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
+           KERNEL_SRC=${STAGING_KERNEL_DIR}    \
+           KERNEL_VERSION=${KERNEL_VERSION}    \
+           CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+           AR="${KERNEL_AR}" 
+
+}
+
+
+do_install() {
+               install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+               cp ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+FILES_ti-cmemk-module = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
+
+pkg_postinst_ti-cmemk-module () {
+               if [ -n "$D" ]; then        
+                exit 1
+        fi
+        depmod -a
+        update-modules || true
+}
+
+pkg_postrm_ti-cmemk-module () {
+        update-modules || true
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}" 
diff --git a/packages/dsplink/ti-lpm-module_2.21.bb b/packages/dsplink/ti-lpm-module_2.21.bb
new file mode 100644 (file)
index 0000000..cbbc5c8
--- /dev/null
@@ -0,0 +1,82 @@
+DESCRIPTION = "Codec Engine for TI ARM/DSP processors - power module"
+
+DEPENDS = "virtual/kernel perl-native dsplink"
+RDEPENDS = "update-modules"
+
+inherit module
+
+# tconf from xdctools dislikes '.' in pwd :/
+PR = "r1"
+PV = "221"
+
+# Get CE tarball from TI website, place in sources and calculate
+# md5sum
+# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html
+
+SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_21_00_06.tar.gz \
+           file://Makefile.dsplink \
+          "
+
+S = "${WORKDIR}/codec_engine_2_21_00_06"
+
+require ti-paths.inc
+
+PARALLEL_MAKE = ""
+
+do_compile() {
+       echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make         
+       echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
+       echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}"  >> ${S}/Rules.make
+
+       # Build the DSP power manager kernel module
+       cd ${S}/cetools/packages/ti/bios/power
+
+       # Unpack all kernel sources for the DSP power manager module
+       for dsp in $(ls | grep bld | awk -F, '{print $2}' | awk -F_ '{print $1}') ; do
+               if ! [ -e $dsp ] ; then tar xf ti_bios_power,${dsp}_bld.tar ; fi
+       done            
+       
+       cd ${DSPPOWERSOC}/lpm
+
+       export KERNEL_DIR=${STAGING_KERNEL_DIR}
+       export TOOL_PREFIX=${TARGET_PREFIX} 
+
+       # Different SoCs use different toolchains by default, we just want them to use the OE one, so replace the entries because they can't be overloaded within the environment
+       sed -i -e s:/db/toolsrc/library/tools/vendors/mvl/arm/omap3/OMAP35x_SDK_0.9.7/src/linux/kernel_org/2.6_kernel:${STAGING_KERNEL_DIR}:g \
+           -e s:/db/toolsrc/library/tools/vendors/cs/arm/arm-2007q3/bin/arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
+           -e s:/db/atree/library/trees/power/power-d02x/imports:${STAGING_DIR}/${MULTIMACH_TARGET_SYS}:g \
+           -e s:/db/toolsrc/library/tools/vendors/mvl/arm/dm6446/REL_LSP_02_00_00_010/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.18_pro500:${STAGING_KERNEL_DIR}:g \
+           -e s:/db/toolsrc/library/tools/vendors/mvl/arm/mvl5.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-:${TARGET_PREFIX}:g \
+        Makefile
+
+       oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
+           KERNEL_SRC=${STAGING_KERNEL_DIR}    \
+           KERNEL_VERSION=${KERNEL_VERSION}    \
+           CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+           AR="${KERNEL_AR}"
+}
+
+
+do_install() {
+               install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+               cp ${S}/cetools/packages/ti/bios/power/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+
+FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
+
+pkg_postinst_ti-lpm-module () {
+        if [ -n "$D" ]; then
+                exit 1
+        fi
+        depmod -a
+        update-modules || true
+}
+
+pkg_postrm_ti-lpm-module () {
+        update-modules || true
+}
+
+
+PACKAGE_ARCH = "${MACHINE_ARCH}" 
index b54f4bc..ba84155 100644 (file)
@@ -6,3 +6,29 @@ TIXDCTOOLSDIR ?= "${TITOOLSDIR}/xdctools_3_10_02"
 # Path under TITOOLSDIR where the dsp toolchain is unpacked
 TICGTOOLSDIR ?= "cg6x_6_0_19"
 
+DSPLINKPLATFORM ?= "DAVINCI"
+DSPLINKPLATFORM_omap5912osk = "OMAP"
+DSPLINKPLATFORM_beagleboard = "OMAP3530"
+DSPLINKPLATFORM_davinci-sffsdr = "DAVINCI"
+DSPLINKPLATFORM_davinci-dvevm = "DAVINCI"
+
+DSPLINKDSP ?= "C64XX"
+
+DSPLINKSOC ?= "DM6446"
+DSPLINKSOC_beagleboard = "3530"
+
+DSPCFG ?= "DM6446GEMSHMEM"
+DSPCFG_beagleboard ?= "OMAP3530SHMEM"
+
+GPPOS ?= "MVL5G"
+GPPOS_beagleboard = "OMAPLSP"
+
+export DSPLINKPLATFORM
+export DSPLINKDSP
+export DSPLINKSOC
+export DSPCFG
+export GPPOS
+
+DSPPOWERSOC ?= "dm6446"
+DSPPOWERSOC_beagleboard = "omap3530"
+
diff --git a/packages/gnutls/gnutls-2.4.2/configure_madness.patch b/packages/gnutls/gnutls-2.4.2/configure_madness.patch
new file mode 100644 (file)
index 0000000..19b6b49
--- /dev/null
@@ -0,0 +1,57 @@
+---
+ configure.in                |    8 ++++----
+ lib/gnutls.pc.in            |    3 ++-
+ libextra/gnutls-extra.pc.in |    3 ++-
+ 3 files changed, 8 insertions(+), 6 deletions(-)
+
+--- gnutls-2.4.0.orig/configure.in
++++ gnutls-2.4.0/configure.in
+@@ -637,17 +637,17 @@ AC_MSG_RESULT([***
+ *** Detecting options for shared libraries...
+ ])
+ AC_LIBTOOL_WIN32_DLL
+ AC_PROG_LIBTOOL
+-LIBGNUTLS_LIBS="-L${libdir} -lgnutls $LIBTASN1_LIBS $LIBGCRYPT_LIBS $LIBS"
+-LIBGNUTLS_CFLAGS="$LIBGCRYPT_CFLAGS $LIBTASN1_CFLAGS -I${includedir}"
++LIBGNUTLS_LIBS="-lgnutls $LIBTASN1_LIBS $LIBGCRYPT_LIBS $LIBS"
++LIBGNUTLS_CFLAGS="$LIBGCRYPT_CFLAGS $LIBTASN1_CFLAGS"
+ AC_SUBST(LIBGNUTLS_LIBS)
+ AC_SUBST(LIBGNUTLS_CFLAGS)
+-LIBGNUTLS_EXTRA_LIBS="-L${libdir} -lgnutls-extra $LZO_LIBS $LIBGNUTLS_LIBS"
+-LIBGNUTLS_EXTRA_CFLAGS="-I${includedir}"
++LIBGNUTLS_EXTRA_LIBS=" -lgnutls-extra $LZO_LIBS $LIBGNUTLS_LIBS"
++LIBGNUTLS_EXTRA_CFLAGS=""
+ AC_SUBST(LIBGNUTLS_EXTRA_LIBS)
+ AC_SUBST(LIBGNUTLS_EXTRA_CFLAGS)
+ export ac_full
+ AM_CFLAGS="${AM_CFLAGS} ${LIBGCRYPT_CFLAGS}"
+--- gnutls-2.4.0.orig/lib/gnutls.pc.in
++++ gnutls-2.4.0/lib/gnutls.pc.in
+@@ -16,8 +16,9 @@ libdir=@libdir@
+ includedir=@includedir@
+ Name: GnuTLS
+ Description: Transport Security Layer implementation for the GNU system
+ Version: @VERSION@
++Requires.private: libgcrypt
+ Libs: -L${libdir} -lgnutls
+-Libs.private: @LIBGNUTLS_LIBS@ 
++Libs.private: -L${libdir} -lgnutls
+ Cflags: -I${includedir}
+--- gnutls-2.4.0.orig/libextra/gnutls-extra.pc.in
++++ gnutls-2.4.0/libextra/gnutls-extra.pc.in
+@@ -16,9 +16,10 @@ libdir=@libdir@
+ includedir=@includedir@
+ Name: GnuTLS-extra
+ Description: Additional add-ons for GnuTLS licensed under GPL
+ Requires: gnutls
++Requires.private: gnutls
+ Version: @VERSION@
+ Libs: -L${libdir} -lgnutls-extra
+-Libs.private: @LIBGNUTLS_EXTRA_LIBS@
++Libs.private: -L${libdir} -lgnutls-extra
+ Cflags: -I${includedir}
diff --git a/packages/gnutls/gnutls-2.4.2/gnutls-openssl.patch b/packages/gnutls/gnutls-2.4.2/gnutls-openssl.patch
new file mode 100644 (file)
index 0000000..e2c1895
--- /dev/null
@@ -0,0 +1,124 @@
+Index: gnutls-1.6.0/libextra/gnutls_openssl.c
+===================================================================
+--- gnutls-1.6.0.orig/libextra/gnutls_openssl.c        2006-08-13 22:34:09.000000000 +0200
++++ gnutls-1.6.0/libextra/gnutls_openssl.c     2006-12-12 15:07:59.002227000 +0100
+@@ -256,12 +256,17 @@
+   ssl->rfd = (gnutls_transport_ptr_t) - 1;
+   ssl->wfd = (gnutls_transport_ptr_t) - 1;
++  ssl->ssl_peek_buffer = NULL;
++  ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
++
+   return ssl;
+ }
+ void
+ SSL_free (SSL * ssl)
+ {
++  if (ssl->ssl_peek_buffer)
++    free(ssl->ssl_peek_buffer);
+   gnutls_certificate_free_credentials (ssl->gnutls_cred);
+   gnutls_deinit (ssl->gnutls_state);
+   free (ssl);
+@@ -285,6 +290,7 @@
+ SSL_set_fd (SSL * ssl, int fd)
+ {
+   gnutls_transport_set_ptr (ssl->gnutls_state, GNUTLS_INT_TO_POINTER (fd));
++  ssl->rfd = ssl->wfd = fd;
+   return 1;
+ }
+@@ -310,6 +316,17 @@
+   return 1;
+ }
++int SSL_get_rfd(SSL *ssl)
++{
++  return ssl->rfd;
++}
++
++int SSL_get_wfd(SSL *ssl)
++{
++  return ssl->wfd;
++}
++
++
+ void
+ SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
+ {
+@@ -325,6 +342,8 @@
+ int
+ SSL_pending (SSL * ssl)
+ {
++  if (ssl->ssl_peek_avail)
++    return ssl->ssl_peek_avail;
+   return gnutls_record_check_pending (ssl->gnutls_state);
+ }
+@@ -480,11 +499,50 @@
+   return 1;
+ }
++int SSL_peek(SSL *ssl, void *buf, int len)
++{
++  if (len > ssl->ssl_peek_buffer_size) {
++    ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
++    ssl->ssl_peek_buffer_size = len;
++  }
++
++  if (ssl->ssl_peek_avail == 0) {
++
++    int ret;
++    
++    ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
++    ssl->last_error = ret;
++    
++    if (ret > 0)
++      ssl->ssl_peek_avail += ret;
++  }
++
++  if (len > ssl->ssl_peek_avail)
++    len = ssl->ssl_peek_avail;
++
++  memcpy (buf, ssl->ssl_peek_buffer, len);
++
++  return len;
++}
++
+ int
+ SSL_read (SSL * ssl, void *buf, int len)
+ {
+   int ret;
++  if (ssl->ssl_peek_avail) {
++    int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
++
++    memcpy (buf, ssl->ssl_peek_buffer, n);
++
++    if (ssl->ssl_peek_avail > n)
++      memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
++
++    ssl->ssl_peek_avail -= n;
++
++    return n;
++  }
++
+   ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
+   ssl->last_error = ret;
+Index: gnutls-1.6.0/includes/gnutls/openssl.h
+===================================================================
+--- gnutls-1.6.0.orig/includes/gnutls/openssl.h        2006-03-08 11:44:58.000000000 +0100
++++ gnutls-1.6.0/includes/gnutls/openssl.h     2006-12-12 15:07:26.032227000 +0100
+@@ -164,6 +164,11 @@
+     gnutls_transport_ptr_t rfd;
+     gnutls_transport_ptr_t wfd;
++
++    char *ssl_peek_buffer;
++    size_t ssl_peek_buffer_size;
++    size_t ssl_peek_avail;
++
+   };
+ #define rbio gnutls_state
diff --git a/packages/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch b/packages/gnutls/gnutls-2.4.2/gnutls-texinfo-euro.patch
new file mode 100644 (file)
index 0000000..e2a2762
--- /dev/null
@@ -0,0 +1,16 @@
+The version of texinfo in Debian Sarge does not understand the @euro{} command.
+This patch replaces the @euro{} command with the word "euro".
+
+--- gnutls-1.3.5/doc/signatures.texi.orig      2006-04-26 08:06:40.918268000 +0930
++++ gnutls-1.3.5/doc/signatures.texi   2006-04-26 08:06:52.446515440 +0930
+@@ -11,8 +11,8 @@
+ long as it is difficult enough to generate two different messages with
+ the same hash algorithm output. In that case the same signature could
+ be used as a proof for both messages. Nobody wants to sign an innocent
+-message of donating 1 @euro{} to Greenpeace and find out that he
+-donated 1.000.000 @euro{} to Bad Inc.
++message of donating 1 euro to Greenpeace and find out that he
++donated 1.000.000 euro to Bad Inc.
+ For a hash algorithm to be called cryptographic the following three
+ requirements must hold
diff --git a/packages/gnutls/gnutls_2.4.2.bb b/packages/gnutls/gnutls_2.4.2.bb
new file mode 100644 (file)
index 0000000..3313a45
--- /dev/null
@@ -0,0 +1,7 @@
+require gnutls.inc
+
+SRC_URI += "\
+       file://gnutls-openssl.patch;patch=1 \
+       file://gnutls-texinfo-euro.patch;patch=1 \
+       file://configure_madness.patch;patch=1 \
+       "
index dad46d7..0e6dc33 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.25-davinci1
-# Tue May  6 14:23:06 2008
+# Linux kernel version: 2.6.26-rc5-davinci1
+# Thu Oct 23 11:48:33 2008
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -62,6 +62,7 @@ CONFIG_SYSCTL=y
 CONFIG_EMBEDDED=y
 CONFIG_UID16=y
 CONFIG_SYSCTL_SYSCALL=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -88,12 +89,14 @@ CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
 CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
+# CONFIG_HAVE_DMA_ATTRS is not set
 CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
 CONFIG_MODVERSIONS=y
@@ -181,6 +184,8 @@ CONFIG_ARCH_DAVINCI644x=y
 CONFIG_MACH_DAVINCI_EVM=y
 CONFIG_DAVINCI_I2C_EXPANDER=y
 CONFIG_DAVINCI_MCBSP=y
+# CONFIG_DAVINCI_RESET_CLOCKS is not set
+# CONFIG_DAVINCI_BOOT_TAG is not set
 
 #
 # DaVinci Options
@@ -237,6 +242,7 @@ CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
 # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4096
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
@@ -251,7 +257,7 @@ 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
 
@@ -423,6 +429,7 @@ CONFIG_MTD=m
 CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
 
 #
 # User Modules And Translation Layers
@@ -691,8 +698,8 @@ 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_TSC2005 is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
 # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
 # CONFIG_INPUT_MISC is not set
 
@@ -712,6 +719,7 @@ CONFIG_VT=y
 # CONFIG_VT_CONSOLE is not set
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -734,7 +742,6 @@ CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
 CONFIG_HW_RANDOM=m
 # CONFIG_NVRAM is not set
-# CONFIG_DAVINCI_RTC is not set
 # CONFIG_R3964 is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
@@ -775,12 +782,7 @@ CONFIG_GPIOEXPANDER_DAVINCI=y
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
 # CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
 # CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
 CONFIG_HAVE_GPIO_LIB=y
 
 #
@@ -880,10 +882,31 @@ CONFIG_SSB_POSSIBLE=y
 #
 # Multimedia devices
 #
+
+#
+# Multimedia core support
+#
 CONFIG_VIDEO_DEV=y
 CONFIG_VIDEO_V4L2_COMMON=y
 CONFIG_VIDEO_ALLOW_V4L1=y
 CONFIG_VIDEO_V4L1_COMPAT=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=y
+
+#
+# Multimedia drivers
+#
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=y
+# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=y
+CONFIG_MEDIA_TUNER_TDA8290=y
+CONFIG_MEDIA_TUNER_TDA9887=y
+CONFIG_MEDIA_TUNER_TEA5761=y
+CONFIG_MEDIA_TUNER_TEA5767=y
+CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER_XC2028=y
+CONFIG_MEDIA_TUNER_XC5000=y
 CONFIG_VIDEO_V4L2=y
 CONFIG_VIDEO_V4L1=y
 CONFIG_VIDEO_CAPTURE_DRIVERS=y
@@ -896,11 +919,9 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
 # CONFIG_VIDEO_SAA5246A is not set
 # CONFIG_VIDEO_SAA5249 is not set
 # CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_AU0828 is not set
 # CONFIG_V4L_USB_DRIVERS is not set
 # CONFIG_SOC_CAMERA is not set
 # CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_DVB_CORE is not set
 CONFIG_DAB=y
 # CONFIG_USB_DABUSB is not set
 
@@ -919,8 +940,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
 # CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
 # CONFIG_FB_SVGALIB is not set
 # CONFIG_FB_MACMODES is not set
 # CONFIG_FB_BACKLIGHT is not set
@@ -951,10 +972,7 @@ CONFIG_FRAMEBUFFER_CONSOLE=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_LOGO is not set
 
 #
 # Sound
@@ -970,8 +988,6 @@ CONFIG_SOUND=m
 # Open Sound System
 #
 CONFIG_SOUND_PRIME=m
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
 CONFIG_SOUND_DAVINCI=m
 CONFIG_SOUND_DAVINCI_AIC33=m
 
@@ -1013,11 +1029,15 @@ CONFIG_USB_DEVICEFS=y
 CONFIG_USB_DEVICE_CLASS=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
 
 #
 # USB Host Controller Drivers
 #
+# CONFIG_USB_C67X00_HCD is not set
 # CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
 # CONFIG_USB_SL811_HCD is not set
 # CONFIG_USB_R8A66597_HCD is not set
 CONFIG_USB_MUSB_HDRC=m
@@ -1038,6 +1058,7 @@ CONFIG_USB_MUSB_LOGLEVEL=0
 #
 # CONFIG_USB_ACM is not set
 # CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
 
 #
 # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1059,6 +1080,7 @@ CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_ALAUDA is not set
 # CONFIG_USB_STORAGE_ONETOUCH is not set
 # CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
 # CONFIG_USB_LIBUSUAL is not set
 
 #
@@ -1095,6 +1117,7 @@ CONFIG_USB_MON=y
 # CONFIG_USB_TRANCEVIBRATOR is not set
 # CONFIG_USB_IOWARRIOR is not set
 # CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
 CONFIG_USB_GADGET=m
 # CONFIG_USB_GADGET_DEBUG is not set
 CONFIG_USB_GADGET_DEBUG_FILES=y
@@ -1106,6 +1129,7 @@ CONFIG_USB_GADGET_SELECTED=y
 # CONFIG_USB_GADGET_NET2280 is not set
 # CONFIG_USB_GADGET_PXA2XX is not set
 # CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
 # CONFIG_USB_GADGET_GOKU is not set
 # CONFIG_USB_GADGET_LH7A40X is not set
 # CONFIG_USB_GADGET_OMAP is not set
@@ -1132,6 +1156,7 @@ CONFIG_MMC=m
 CONFIG_MMC_BLOCK=m
 CONFIG_MMC_BLOCK_BOUNCE=y
 # CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
 
 #
 # MMC/SD Host Controller Drivers
@@ -1152,6 +1177,7 @@ CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=m
 # CONFIG_LEDS_TRIGGER_IDE_DISK is not set
 CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=m
 
@@ -1222,6 +1248,7 @@ 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
@@ -1381,6 +1408,7 @@ CONFIG_NLS_UTF8=m
 # CONFIG_PRINTK_TIME is not set
 CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
 # CONFIG_MAGIC_SYSRQ is not set
 # CONFIG_UNUSED_SYMBOLS is not set
 CONFIG_DEBUG_FS=y
@@ -1391,6 +1419,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
 CONFIG_SCHED_DEBUG=y
 # CONFIG_SCHEDSTATS is not set
 CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_SLAB is not set
 CONFIG_DEBUG_PREEMPT=y
 # CONFIG_DEBUG_RT_MUTEXES is not set
@@ -1506,6 +1535,8 @@ CONFIG_CRYPTO=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=m
 # CONFIG_CRC16 is not set
 # CONFIG_CRC_ITU_T is not set
diff --git a/packages/mamona/bash-noemu-3.2/006-add_internal_libcpwd_functions.patch b/packages/mamona/bash-noemu-3.2/006-add_internal_libcpwd_functions.patch
new file mode 100644 (file)
index 0000000..c0f501d
--- /dev/null
@@ -0,0 +1,752 @@
+Index: bash-3.2/libcnisint.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ bash-3.2/libcnisint.c      2008-08-01 17:52:42.000000000 -0300
+@@ -0,0 +1,296 @@
++#include "libcnisint.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <errno.h>
++#include <string.h>
++
++# undef ENTDATA
++
++struct parser_data
++  {
++#ifdef ENTDATA
++    struct ENTDATA entdata;
++# define ENTDATA_DECL(data) struct ENTDATA *const entdata = &data->entdata;
++#else
++# define ENTDATA_DECL(data)
++#endif
++    char linebuffer[0];
++  };
++
++
++static FILE *stream = NULL;
++static struct passwd passwd;
++static char buffer[NSS_BUFLEN_PASSWD];
++
++# define STRING_FIELD(variable, terminator_p, swallow)  \
++  {                                                     \
++    variable = line;                                    \
++    while (*line != '\0' && !terminator_p (*line))      \
++      ++line;                                           \
++    if (*line != '\0')                                  \
++      {                                                 \
++    *line = '\0';                                       \
++    do                                                  \
++      ++line;                                           \
++    while (swallow && terminator_p (*line));            \
++      }                                                 \
++  }
++
++# define STRUCTURE    passwd
++# define TRAILING_LIST_PARSER
++
++# define LINE_PARSER(EOLSET, BODY)                     \
++int parse_line (char *line, struct STRUCTURE *result,  \
++        struct parser_data *data, size_t datalen)      \
++{                                                      \
++  ENTDATA_DECL (data)                                  \
++  char *p = strpbrk (line, EOLSET "\n");               \
++  if (p != NULL)                                       \
++    *p = '\0';                                         \
++  BODY;                                                \
++  TRAILING_LIST_PARSER;                                \
++  return 1;                                            \
++}
++
++# define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default)  \
++  {                                                                                     \
++    char *endp;                                                                         \
++    if (*line == '\0')                                                                  \
++      /* We expect some more input, so don't allow the string to end here. */           \
++      return 0;                                                                         \
++    variable = convert (strtoul (line, &endp, base));                                   \
++    if (endp == line)                                                                   \
++      variable = default;                                                               \
++    if (terminator_p (*endp))                                                           \
++      do                                                                                \
++    ++endp;                                                                             \
++      while (swallow && terminator_p (*endp));                                          \
++    else if (*endp != '\0')                                                             \
++      return 0;                                                                         \
++    line = endp;                                                                        \
++  }
++
++# define INT_FIELD(variable, terminator_p, swallow, base, convert) \
++  {                                                                \
++    char *endp;                                                    \
++    variable = convert (strtoul (line, &endp, base));              \
++    if (endp == line)                                              \
++      return 0;                                                    \
++    else if (terminator_p (*endp))                                 \
++      do                                                           \
++    ++endp;                                                        \
++      while (swallow && terminator_p (*endp));                     \
++    else if (*endp != '\0')                                        \
++      return 0;                                                    \
++    line = endp;                                                   \
++  }
++
++# define ISCOLON(c) ((c) == ':')
++
++LINE_PARSER (,
++ STRING_FIELD (result->pw_name, ISCOLON, 0)
++ if (line[0] == '\0'
++     && (result->pw_name[0] == '+' || result->pw_name[0] == '-'))
++   {
++     /* This a special case.  We allow lines containing only a `+' sign
++    since this is used for nss_compat.  All other services will
++    reject this entry later.  Initialize all other fields now.  */
++     result->pw_passwd = NULL;
++     result->pw_uid = 0;
++     result->pw_gid = 0;
++     result->pw_gecos = NULL;
++     result->pw_dir = NULL;
++     result->pw_shell = NULL;
++   }
++ else
++   {
++     STRING_FIELD (result->pw_passwd, ISCOLON, 0)
++     if (result->pw_name[0] == '+' || result->pw_name[0] == '-')
++       {
++     INT_FIELD_MAYBE_NULL (result->pw_uid, ISCOLON, 0, 10, , 0)
++     INT_FIELD_MAYBE_NULL (result->pw_gid, ISCOLON, 0, 10, , 0)
++       }
++     else
++       {
++     INT_FIELD (result->pw_uid, ISCOLON, 0, 10,)
++     INT_FIELD (result->pw_gid, ISCOLON, 0, 10,)
++       }
++     STRING_FIELD (result->pw_gecos, ISCOLON, 0)
++     STRING_FIELD (result->pw_dir, ISCOLON, 0)
++     result->pw_shell = line;
++   }
++ )
++
++
++void internal_setpwent (void)
++{
++  if (stream == NULL)
++    {
++      stream = fopen ("/etc/passwd", "rme");
++
++      if (stream == NULL)
++        fprintf (stderr, "ERROR: Cannot fopen \"/etc/passwd\". Errno: %d", errno);
++    }
++  else
++    rewind (stream);
++
++}
++
++void internal_endpwent (void)
++{
++  if (stream != NULL)
++    {
++      fclose (stream);
++      stream = NULL;
++    }
++}
++
++struct passwd *internal_getpwent (void)
++{
++  struct parser_data *data = (void *) &buffer;
++  struct passwd *result = &passwd;
++  int buflen = NSS_BUFLEN_PASSWD;
++
++  while (1)
++    {
++      fpos_t pos;
++      char *p;
++      int parse_res;
++
++      do
++    {
++      /* We need at least 3 characters for one line.  */
++      if (buflen < 3)
++        {
++        erange:
++          fprintf (stderr, "ERROR: Range error");
++          return NULL;
++        }
++
++      fgetpos (stream, &pos);
++      buffer[buflen - 1] = '\xff';
++      p = fgets (buffer, buflen, stream);
++      if (p == NULL && feof (stream))
++        return NULL;
++
++      if (p == NULL || buffer[buflen - 1] != '\xff')
++        {
++        erange_reset:
++          fsetpos (stream, &pos);
++          goto erange;
++        }
++
++      /* Terminate the line for any case.  */
++      buffer[buflen - 1] = '\0';
++
++      /* Skip leading blanks.  */
++      while (isspace (*p))
++        ++p;
++    }
++      while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines.  */
++              /* Parse the line.  If it is invalid, loop to
++                 get the next line of the file to parse.  */
++              !(parse_res = parse_line (p, result, data, buflen)));
++
++      if (parse_res == -1)
++          /* The parser ran out of space.  */
++          goto erange_reset;
++
++      if (result->pw_name[0] != '+' && result->pw_name[0] != '-')
++          /* This is a real entry.  */
++          break;
++
++      /* XXX Ignoring
++       *
++       *  -@netgroup
++       *  +@netgroup
++       *  -user
++       *  +user
++       *  +:...
++       *
++       * as we don't suppose to use them */
++
++    }
++
++  return result;
++
++}
++
++/* Searches in /etc/passwd and the NSS subsystem for a special user id */
++struct passwd *internal_getpwuid (uid_t uid)
++{
++  struct parser_data *data = (void *) buffer;
++  struct passwd *result = &passwd;
++  int buflen = NSS_BUFLEN_PASSWD;
++
++  internal_setpwent ();
++
++  while (1)
++    {
++      fpos_t pos;
++      char *p;
++      int parse_res;
++
++      do
++      {
++        /* We need at least 3 characters for one line.  */
++        if (buflen < 3)
++          {
++          erange:
++            fprintf (stderr, "ERROR: Range error");
++            return NULL;
++          }
++
++        fgetpos (stream, &pos);
++        buffer[buflen - 1] = '\xff';
++        p = fgets (buffer, buflen, stream);
++        if (p == NULL && feof (stream))
++          return NULL;
++
++        if (p == NULL || buffer[buflen - 1] != '\xff')
++          {
++          erange_reset:
++            fsetpos (stream, &pos);
++            goto erange;
++          }
++
++        /* Terminate the line for any case.  */
++        buffer[buflen - 1] = '\0';
++
++        /* Skip leading blanks.  */
++        while (isspace (*p))
++          ++p;
++      }
++      while (*p == '\0' || *p == '#' ||       /* Ignore empty and comment lines.  */
++           /* Parse the line.  If it is invalid, loop to
++              get the next line of the file to parse.  */
++           !(parse_res = parse_line (p, result, data, buflen)));
++
++      if (parse_res == -1)
++          /* The parser ran out of space.  */
++          goto erange_reset;
++
++      /* This is a real entry.  */
++      if (result->pw_name[0] != '+' && result->pw_name[0] != '-')
++      {
++          if (result->pw_uid == uid)
++              return result;
++          else
++              continue;
++      }
++
++      /* XXX Ignoring
++       *
++       *  -@netgroup
++       *  +@netgroup
++       *  -user
++       *  +user
++       *  +:...
++       *
++       * as we don't suppose to use them */
++
++    }
++  internal_endpwent ();
++  return result;
++}
+Index: bash-3.2/libcnisint.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ bash-3.2/libcnisint.h      2008-08-01 17:18:20.000000000 -0300
+@@ -0,0 +1,7 @@
++#include <pwd.h>
++
++void internal_setpwent (void);
++void internal_endpwent (void);
++struct passwd *internal_getpwent (void);
++struct passwd *internal_getpwuid (uid_t uid);
++
+Index: bash-3.2/examples/loadables/finfo.c
+===================================================================
+--- bash-3.2.orig/examples/loadables/finfo.c   2008-08-01 14:29:55.000000000 -0300
++++ bash-3.2/examples/loadables/finfo.c        2008-08-01 15:32:37.000000000 -0300
+@@ -9,7 +9,6 @@
+ #include <sys/types.h>
+ #include "posixstat.h"
+ #include <stdio.h>
+-#include <pwd.h>
+ #include <grp.h>
+ #include <errno.h>
+@@ -18,6 +17,8 @@
+ #include "builtins.h"
+ #include "common.h"
++#include "libcnisint.h"
++
+ #ifndef errno
+ extern int    errno;
+ #endif
+@@ -262,7 +263,7 @@
+       printf("Mode: (%o) ", (int) st->st_mode);
+       printmode((int) st->st_mode);
+       printf("Link count: %d\n", (int) st->st_nlink);
+-      pw = getpwuid(st->st_uid);
++      pw = internal_getpwuid(st->st_uid);
+       owner = pw ? pw->pw_name : "unknown";
+       printf("Uid of owner: %d (%s)\n", (int) st->st_uid, owner);
+       gr = getgrgid(st->st_gid);
+@@ -341,7 +342,7 @@
+       else if (flags & OPT_PMASK)
+               printf("%o\n", getperm(st->st_mode) & pmask);
+       else if (flags & OPT_UID) {
+-              pw = getpwuid(st->st_uid);
++              pw = internal_getpwuid(st->st_uid);
+               if (flags & OPT_ASCII)
+                       printf("%s\n", pw ? pw->pw_name : "unknown");
+               else
+Index: bash-3.2/examples/loadables/id.c
+===================================================================
+--- bash-3.2.orig/examples/loadables/id.c      2008-08-01 14:17:24.000000000 -0300
++++ bash-3.2/examples/loadables/id.c   2008-08-01 14:51:23.000000000 -0300
+@@ -12,7 +12,6 @@
+ #include <config.h>
+ #include <stdio.h>
+ #include "bashtypes.h"
+-#include <pwd.h>
+ #include <grp.h>
+ #include "bashansi.h"
+@@ -22,9 +21,8 @@
+ #  include <sys/param.h>
+ #endif
+-#if !defined (HAVE_GETPW_DECLS)
+-extern struct passwd *getpwuid ();
+-#endif
++#include "libcnisint.h"
++
+ extern struct group *getgrgid ();
+ #include "shell.h"
+@@ -152,7 +150,7 @@
+   r = 0;
+   if (id_flags & ID_USENAME)
+     {
+-      pwd = getpwuid (uid);
++      pwd = internal_getpwuid (uid);
+       if (pwd == NULL)
+         r = 1;
+     }
+@@ -233,7 +231,7 @@
+   r = 0;
+   printf ("uid=%u", (unsigned) ruid);
+-  pwd = getpwuid (ruid);
++  pwd = internal_getpwuid (ruid);
+   if (pwd == NULL)
+     r = 1;
+   else
+@@ -249,7 +247,7 @@
+   if (euid != ruid)
+     { 
+       printf (" euid=%u", (unsigned) euid);
+-      pwd = getpwuid (euid);
++      pwd = internal_getpwuid (euid);
+       if (pwd == NULL)
+       r = 1;
+       else 
+Index: bash-3.2/lib/readline/complete.c
+===================================================================
+--- bash-3.2.orig/lib/readline/complete.c      2008-07-31 19:06:06.000000000 -0300
++++ bash-3.2/lib/readline/complete.c   2008-08-01 15:52:25.000000000 -0300
+@@ -48,9 +48,7 @@
+ extern int errno;
+ #endif /* !errno */
+-#if defined (HAVE_PWD_H)
+-#include <pwd.h>
+-#endif
++#include "libcnisint.h"
+ #include "posixdir.h"
+ #include "posixstat.h"
+@@ -79,12 +77,6 @@
+ /* Unix version of a hidden file.  Could be different on other systems. */
+ #define HIDDEN_FILE(fname)    ((fname)[0] == '.')
+-/* Most systems don't declare getpwent in <pwd.h> if _POSIX_SOURCE is
+-   defined. */
+-#if defined (HAVE_GETPWENT) && (!defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE))
+-extern struct passwd *getpwent PARAMS((void));
+-#endif /* HAVE_GETPWENT && (!HAVE_GETPW_DECLS || _POSIX_SOURCE) */
+-
+ /* If non-zero, then this is the address of a function to call when
+    completing a word would normally display the list of possible matches.
+    This function is called instead of actually doing the display.
+@@ -1849,24 +1841,19 @@
+       username = savestring (&text[first_char_loc]);
+       namelen = strlen (username);
+-      setpwent ();
++      internal_setpwent ();
+     }
+-#if defined (HAVE_GETPWENT)
+-  while (entry = getpwent ())
++  while (entry = internal_getpwent ())
+     {
+       /* Null usernames should result in all users as possible completions. */
+       if (namelen == 0 || (STREQN (username, entry->pw_name, namelen)))
+       break;
+     }
+-#endif
+   if (entry == 0)
+     {
+-#if defined (HAVE_GETPWENT)
+-      endpwent ();
+-#endif
+-      return ((char *)NULL);
++      internal_endpwent ();
+     }
+   else
+     {
+Index: bash-3.2/lib/readline/shell.c
+===================================================================
+--- bash-3.2.orig/lib/readline/shell.c 2008-08-01 14:44:38.000000000 -0300
++++ bash-3.2/lib/readline/shell.c      2008-08-01 15:36:03.000000000 -0300
+@@ -51,9 +51,8 @@
+ #if defined (HAVE_FCNTL_H)
+ #include <fcntl.h>
+ #endif
+-#if defined (HAVE_PWD_H)
+-#include <pwd.h>
+-#endif
++
++#include "libcnisint.h"
+ #include <stdio.h>
+@@ -61,10 +60,6 @@
+ #include "rlshell.h"
+ #include "xmalloc.h"
+-#if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS)
+-extern struct passwd *getpwuid PARAMS((uid_t));
+-#endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */
+-
+ #ifndef NULL
+ #  define NULL 0
+ #endif
+@@ -163,11 +158,9 @@
+   struct passwd *entry;
+   home_dir = (char *)NULL;
+-#if defined (HAVE_GETPWUID)
+-  entry = getpwuid (getuid ());
++  entry = internal_getpwuid (getuid ());
+   if (entry)
+     home_dir = entry->pw_dir;
+-#endif
+   return (home_dir);
+ }
+Index: bash-3.2/lib/readline/tilde.c
+===================================================================
+--- bash-3.2.orig/lib/readline/tilde.c 2008-07-31 19:09:19.000000000 -0300
++++ bash-3.2/lib/readline/tilde.c      2008-08-01 15:51:52.000000000 -0300
+@@ -42,10 +42,7 @@
+ #  include "ansi_stdlib.h"
+ #endif /* HAVE_STDLIB_H */
+-#include <sys/types.h>
+-#if defined (HAVE_PWD_H)
+-#include <pwd.h>
+-#endif
++#include "libcnisint.h"
+ #include "tilde.h"
+@@ -56,9 +53,6 @@
+ #endif /* TEST || STATIC_MALLOC */
+ #if !defined (HAVE_GETPW_DECLS)
+-#  if defined (HAVE_GETPWUID)
+-extern struct passwd *getpwuid PARAMS((uid_t));
+-#  endif
+ #  if defined (HAVE_GETPWNAM)
+ extern struct passwd *getpwnam PARAMS((const char *));
+ #  endif
+@@ -409,15 +403,11 @@
+       if (dirname == 0)
+       dirname = savestring (filename);
+     }
+-#if defined (HAVE_GETPWENT)
+   else
+     dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
+-#endif
+   free (username);
+-#if defined (HAVE_GETPWENT)
+-  endpwent ();
+-#endif
++  internal_endpwent ();
+   return (dirname);
+ }
+Index: bash-3.2/lib/tilde/shell.c
+===================================================================
+--- bash-3.2.orig/lib/tilde/shell.c    2008-08-01 14:41:32.000000000 -0300
++++ bash-3.2/lib/tilde/shell.c 2008-08-01 15:32:49.000000000 -0300
+@@ -43,11 +43,7 @@
+ #  include <strings.h>
+ #endif /* !HAVE_STRING_H */
+-#include <pwd.h>
+-
+-#if !defined (HAVE_GETPW_DECLS)
+-extern struct passwd *getpwuid ();
+-#endif /* !HAVE_GETPW_DECLS */
++#include "libcnisint.h"
+ char *
+ get_env_value (varname)
+@@ -63,7 +59,7 @@
+   struct passwd *entry;
+   home_dir = (char *)NULL;
+-  entry = getpwuid (getuid ());
++  entry = internal_getpwuid (getuid ());
+   if (entry)
+     home_dir = entry->pw_dir;
+   return (home_dir);
+Index: bash-3.2/lib/tilde/tilde.c
+===================================================================
+--- bash-3.2.orig/lib/tilde/tilde.c    2008-08-01 15:41:27.000000000 -0300
++++ bash-3.2/lib/tilde/tilde.c 2008-08-01 15:51:13.000000000 -0300
+@@ -43,9 +43,8 @@
+ #endif /* HAVE_STDLIB_H */
+ #include <sys/types.h>
+-#if defined (HAVE_PWD_H)
+-#include <pwd.h>
+-#endif
++
++#include "libcnisint.h"
+ #include "tilde.h"
+@@ -56,9 +55,6 @@
+ #endif /* TEST || STATIC_MALLOC */
+ #if !defined (HAVE_GETPW_DECLS)
+-#  if defined (HAVE_GETPWUID)
+-extern struct passwd *getpwuid PARAMS((uid_t));
+-#  endif
+ #  if defined (HAVE_GETPWNAM)
+ extern struct passwd *getpwnam PARAMS((const char *));
+ #  endif
+@@ -409,15 +405,11 @@
+       if (dirname == 0)
+       dirname = savestring (filename);
+     }
+-#if defined (HAVE_GETPWENT)
+   else
+     dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
+-#endif
+   free (username);
+-#if defined (HAVE_GETPWENT)
+-  endpwent ();
+-#endif
++  internal_endpwent ();
+   return (dirname);
+ }
+Index: bash-3.2/shell.c
+===================================================================
+--- bash-3.2.orig/shell.c      2008-07-31 19:10:00.000000000 -0300
++++ bash-3.2/shell.c   2008-08-01 15:46:10.000000000 -0300
+@@ -37,7 +37,8 @@
+ #include <signal.h>
+ #include <errno.h>
+ #include "filecntl.h"
+-#include <pwd.h>
++
++#include "libcnisint.h"
+ #if defined (HAVE_UNISTD_H)
+ #  include <unistd.h>
+@@ -78,10 +79,6 @@
+ #  include <opennt/opennt.h>
+ #endif
+-#if !defined (HAVE_GETPW_DECLS)
+-extern struct passwd *getpwuid ();
+-#endif /* !HAVE_GETPW_DECLS */
+-
+ #if !defined (errno)
+ extern int errno;
+ #endif
+@@ -1586,7 +1583,7 @@
+   /* Don't fetch this more than once. */
+   if (current_user.user_name == 0)
+     {
+-      entry = getpwuid (current_user.uid);
++      entry = internal_getpwuid (current_user.uid);
+       if (entry)
+       {
+         current_user.user_name = savestring (entry->pw_name);
+@@ -1602,7 +1599,7 @@
+         current_user.shell = savestring ("/bin/sh");
+         current_user.home_dir = savestring ("/");
+       }
+-      endpwent ();
++      internal_endpwent ();
+     }
+ }
+Index: bash-3.2/config.h.in
+===================================================================
+--- bash-3.2.orig/config.h.in  2008-08-01 15:54:05.000000000 -0300
++++ bash-3.2/config.h.in       2008-08-01 15:54:34.000000000 -0300
+@@ -553,15 +553,9 @@
+ /* Define if you have the getpeername function.  */
+ #undef HAVE_GETPEERNAME
+-/* Define if you have the getpwent function. */
+-#undef HAVE_GETPWENT
+-
+ /* Define if you have the getpwnam function. */
+ #undef HAVE_GETPWNAM
+-/* Define if you have the getpwuid function. */
+-#undef HAVE_GETPWUID
+-
+ /* Define if you have the getrlimit function.  */
+ #undef HAVE_GETRLIMIT
+Index: bash-3.2/configure.in
+===================================================================
+--- bash-3.2.orig/configure.in 2008-08-01 15:55:19.000000000 -0300
++++ bash-3.2/configure.in      2008-08-01 15:56:12.000000000 -0300
+@@ -710,7 +710,7 @@
+ AC_CHECK_FUNCS(vsnprintf snprintf vasprintf asprintf)
+ AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit)
+-AC_CHECK_FUNCS(getpwent getpwnam getpwuid)
++AC_CHECK_FUNCS(getpwnam)
+ AC_REPLACE_FUNCS(getcwd memset strcasecmp strerror strftime strnlen strpbrk strstr)
+ AC_REPLACE_FUNCS(strtod strtol strtoul strtoll strtoull strtoimax strtoumax)
+@@ -790,12 +790,6 @@
+ BASH_FUNC_INET_ATON
+ fi
+-dnl libraries
+-dnl this is reportedly no longer necessary for irix[56].?
+-case "$host_os" in
+-irix4*)       AC_CHECK_LIB(sun, getpwent) ;;
+-esac
+-
+ dnl check for getpeername in the socket library only if it's not in libc
+ if test "$ac_cv_func_getpeername" = no; then
+       BASH_CHECK_LIB_SOCKET
+Index: bash-3.2/patchlevel.h
+===================================================================
+--- bash-3.2.orig/patchlevel.h 2008-08-01 16:24:52.000000000 -0300
++++ bash-3.2/patchlevel.h      2008-08-01 16:25:03.000000000 -0300
+@@ -25,6 +25,6 @@
+    regexp `^#define[  ]*PATCHLEVEL', since that's what support/mkversion.sh
+    looks for to find the patch level (for the sccs version string). */
+-#define PATCHLEVEL 5
++#define PATCHLEVEL 6
+ #endif /* _PATCHLEVEL_H_ */
+Index: bash-3.2/Makefile.in
+===================================================================
+--- bash-3.2.orig/Makefile.in  2008-08-01 16:32:13.000000000 -0300
++++ bash-3.2/Makefile.in       2008-08-01 17:12:17.000000000 -0300
+@@ -405,7 +405,7 @@
+          input.c bashhist.c array.c arrayfunc.c sig.c pathexp.c \
+          unwind_prot.c siglist.c bashline.c bracecomp.c error.c \
+          list.c stringlib.c locale.c findcmd.c redir.c \
+-         pcomplete.c pcomplib.c syntax.c xmalloc.c
++         pcomplete.c pcomplib.c syntax.c xmalloc.c libcnisint.c
+ HSOURCES = shell.h flags.h trap.h hashcmd.h hashlib.h jobs.h builtins.h \
+          general.h variables.h config.h $(ALLOC_HEADERS) alias.h \
+@@ -413,7 +413,7 @@
+          command.h input.h error.h bashansi.h dispose_cmd.h make_cmd.h \
+          subst.h externs.h siglist.h bashhist.h bashline.h bashtypes.h \
+          array.h arrayfunc.h sig.h mailcheck.h bashintl.h bashjmp.h \
+-         execute_cmd.h parser.h pathexp.h pathnames.h pcomplete.h \
++         execute_cmd.h parser.h pathexp.h pathnames.h pcomplete.h libcnisint.h \
+          $(BASHINCFILES)
+ SOURCES        = $(CSOURCES) $(HSOURCES) $(BUILTIN_DEFS)
+@@ -433,7 +433,7 @@
+          trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o \
+          alias.o array.o arrayfunc.o braces.o bracecomp.o bashhist.o \
+          bashline.o $(SIGLIST_O) list.o stringlib.o locale.o findcmd.o redir.o \
+-         pcomplete.o pcomplib.o syntax.o xmalloc.o $(SIGNAMES_O)
++         pcomplete.o pcomplib.o syntax.o xmalloc.o libcnisint.o $(SIGNAMES_O)
+ # Where the source code of the shell builtins resides.
+ BUILTIN_SRCDIR=$(srcdir)/builtins
+@@ -978,7 +978,7 @@
+ shell.o: make_cmd.h subst.h sig.h pathnames.h externs.h 
+ shell.o: flags.h trap.h mailcheck.h builtins.h $(DEFSRC)/common.h
+ shell.o: jobs.h siglist.h input.h execute_cmd.h findcmd.h bashhist.h
+-shell.o: ${GLOB_LIBSRC}/strmatch.h ${BASHINCDIR}/posixtime.h
++shell.o: ${GLOB_LIBSRC}/strmatch.h ${BASHINCDIR}/posixtime.h libcnisint.h
+ sig.o: config.h bashtypes.h
+ sig.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
+ sig.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
index c638b03..4d46d6f 100644 (file)
@@ -1,8 +1,12 @@
 require ../bash/bash.inc
 PR = "r1"
 
+RCONFLICTS = "bash"
+RREPLACES = "bash"
+
 SRC_URI = "${GNU_MIRROR}/bash/bash-${PV}.tar.gz \
-           file://001-005.patch;patch=1"
+           file://001-005.patch;patch=1 \
+           file://006-add_internal_libcpwd_functions.patch;patch=1"
 
 S = "${WORKDIR}/bash-${PV}"
 
diff --git a/packages/mamona/binutils-noemu-2.18/110-arm-eabi-conf.patch b/packages/mamona/binutils-noemu-2.18/110-arm-eabi-conf.patch
new file mode 100644 (file)
index 0000000..050969b
--- /dev/null
@@ -0,0 +1,24 @@
+diff -urN binutils-2.16.91.0.7.orig/configure binutils-2.16.91.0.7/configure
+--- binutils-2.16.91.0.7.orig/configure        2006-05-31 14:54:24.000000000 +0300
++++ binutils-2.16.91.0.7/configure     2006-05-31 14:55:53.000000000 +0300
+@@ -1299,7 +1299,7 @@
+   arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+     noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+     ;;
+-  arm*-*-linux-gnueabi)
++  arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+     noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+     noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+     ;;
+diff -urN binutils-2.16.91.0.7.orig/configure.in binutils-2.16.91.0.7/configure.in
+--- binutils-2.16.91.0.7.orig/configure.ac     2006-05-31 14:54:24.000000000 +0300
++++ binutils-2.16.91.0.7/configure.ac  2006-05-31 14:55:53.000000000 +0300
+@@ -497,7 +497,7 @@
+   arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+     noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+     ;;
+-  arm*-*-linux-gnueabi)
++  arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+     noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+     noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+     ;;
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-2.16.1-e300c2c3.patch b/packages/mamona/binutils-noemu-2.18/binutils-2.16.1-e300c2c3.patch
new file mode 100644 (file)
index 0000000..c5e4234
--- /dev/null
@@ -0,0 +1,19 @@
+Adds support for Freescale Power architecture e300c2 and e300c3 cores.
+http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
+
+Leon Woestenberg <leonw@mailcan.com>
+
+diff -uNr binutils-2.16.1.orig/gas/config/tc-ppc.c binutils-2.16.1/gas/config/tc-ppc.c
+--- binutils-2.16.1.orig/gas/config/tc-ppc.c   2005-03-02 13:24:01.000000000 +0000
++++ binutils-2.16.1/gas/config/tc-ppc.c        2006-07-04 11:45:24.000000000 +0100
+@@ -879,6 +879,10 @@
+       else
+       ppc_cpu |= PPC_OPCODE_SPE;
+     }
++  else if (strcmp (arg, "pmr") == 0)
++    {
++      ppc_cpu |= PPC_OPCODE_PMR;
++    }
+   /* -mppc64 and -m620 mean to assemble for the 64-bit PowerPC
+      620.  */
+   else if (strcmp (arg, "ppc64") == 0 || strcmp (arg, "620") == 0)
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch b/packages/mamona/binutils-noemu-2.18/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
new file mode 100644 (file)
index 0000000..8df5b1f
--- /dev/null
@@ -0,0 +1,39 @@
+# strip (and objcopy) fail to set the error code if there is no
+# output file name and the rename of the stripped (or copied) file
+# fails, yet the command fails to do anything.  This fixes both
+# objcopy and strip.
+#
+# modification by bero: Ported to 2.16.91.0.6
+#
+#Signed-off-by: John Bowler <jbowler@acm.org>
+#Signed-off-by: Bernhard Rosenkraenzer <bero@arklinux.org>
+---
+# binutils/objcopy.c |    8 +++++---
+# 1 file changed, 5 insertions(+), 3 deletions(-)
+#
+Index: src/binutils/objcopy.c
+===================================================================
+--- src.orig/binutils/objcopy.c        2007-08-09 13:26:03.000000000 +0100
++++ src/binutils/objcopy.c     2007-08-09 16:36:12.000000000 +0100
+@@ -2787,8 +2787,9 @@ strip_main (int argc, char *argv[])
+         if (preserve_dates)
+           set_times (tmpname, &statbuf);
+         if (output_file != tmpname)
+-          smart_rename (tmpname, output_file ? output_file : argv[i],
+-                        preserve_dates);
++          if (smart_rename (tmpname, output_file ? output_file : argv[i],
++                        preserve_dates))
++            hold_status = 1;
+         status = hold_status;
+       }
+       else
+@@ -3411,7 +3412,8 @@ copy_main (int argc, char *argv[])
+       if (preserve_dates)
+       set_times (tmpname, &statbuf);
+       if (tmpname != output_filename)
+-      smart_rename (tmpname, input_filename, preserve_dates);
++      if (smart_rename (tmpname, input_filename, preserve_dates))
++        status = 1;
+     }
+   else
+     unlink_if_ordinary (tmpname);
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-configure-texinfo-version.patch b/packages/mamona/binutils-noemu-2.18/binutils-configure-texinfo-version.patch
new file mode 100644 (file)
index 0000000..dd21aed
--- /dev/null
@@ -0,0 +1,22 @@
+--- binutils-2.18/configure.orig       2007-10-11 21:09:27.000000000 -0700
++++ binutils-2.18/configure    2007-10-11 21:10:20.000000000 -0700
+@@ -6128,7 +6128,7 @@ case " $build_configdirs " in
+     # For an installed makeinfo, we require it to be from texinfo 4.4 or
+     # higher, else we use the "missing" dummy.
+     if ${MAKEINFO} --version \
+-       | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
++       | egrep 'texinfo[^0-9]*(4\.([6-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
+       :
+     else
+       MAKEINFO="$MISSING makeinfo"
+--- binutils-2.18/configure.ac.orig    2007-10-11 21:10:54.000000000 -0700
++++ binutils-2.18/configure.ac 2007-10-11 21:11:13.000000000 -0700
+@@ -2403,7 +2403,7 @@ changequote(,)
+     # For an installed makeinfo, we require it to be from texinfo 4.4 or
+     # higher, else we use the "missing" dummy.
+     if ${MAKEINFO} --version \
+-       | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|[5-9])' >/dev/null 2>&1; then
++       | egrep 'texinfo[^0-9]*(4\.([6-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then
+       :
+     else
+       MAKEINFO="$MISSING makeinfo"
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-uclibc-100-uclibc-conf.patch b/packages/mamona/binutils-noemu-2.18/binutils-uclibc-100-uclibc-conf.patch
new file mode 100644 (file)
index 0000000..8de04e0
--- /dev/null
@@ -0,0 +1,34 @@
+--- binutils-2.18.orig/configure
++++ binutils-2.18/configure
+@@ -2206,7 +2206,7 @@
+   am33_2.0-*-linux*)
+     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+     ;;
+-  sh-*-linux*)
++  sh*-*-linux*)
+     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+     ;;
+   sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -2504,7 +2504,7 @@
+   romp-*-*)
+     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+     ;;
+-  sh-*-* | sh64-*-*)
++  sh*-*-* | sh64-*-*)
+     case "${host}" in
+       i[3456789]86-*-vsta) ;; # don't add gprof back in
+       i[3456789]86-*-go32*) ;; # don't add gprof back in
+--- binutils-2.18.orig/gprof/configure
++++ binutils-2.18/gprof/configure
+@@ -4124,6 +4124,11 @@
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-001_ld_makefile_patch.patch b/packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-001_ld_makefile_patch.patch
new file mode 100644 (file)
index 0000000..04a7e61
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+--- binutils-2.16.91.0.1/ld/Makefile.am
++++ binutils-2.16.91.0.1/ld/Makefile.am
+@@ -20,7 +20,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+--- binutils-2.16.91.0.1/ld/Makefile.in
++++ binutils-2.16.91.0.1/ld/Makefile.in
+@@ -268,7 +268,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-006_better_file_error.patch b/packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-006_better_file_error.patch
new file mode 100644 (file)
index 0000000..f337611
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c     2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c  2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
diff --git a/packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-012_check_ldrunpath_length.patch b/packages/mamona/binutils-noemu-2.18/binutils-uclibc-300-012_check_ldrunpath_length.patch
new file mode 100644 (file)
index 0000000..498651a
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em       2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em        2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+             && command_line.rpath == NULL)
+           {
+             lib_path = (const char *) getenv ("LD_RUN_PATH");
++            if ((lib_path) && (strlen (lib_path) == 0))
++                lib_path = NULL;
+             if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+                                                     force))
+               break;
+@@ -871,6 +873,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+   if (! (bfd_elf_size_dynamic_sections
+        (output_bfd, command_line.soname, rpath,
+         command_line.filter_shlib,
index cefc2af..679768b 100644 (file)
@@ -2,6 +2,9 @@ require ../binutils/binutils.inc
 
 PR = "r1"
 
+RCONFLICTS = "binutils"
+RREPLACES = "binutils"
+
 SRC_URI = \
     "${KERNELORG_MIRROR}/pub/linux/devel/binutils/binutils-${PV}.tar.bz2 \
      file://binutils-2.16.91.0.6-objcopy-rename-errorcode.patch;patch=1 \
diff --git a/packages/mamona/binutils-noemu_2.18.bb b/packages/mamona/binutils-noemu_2.18.bb
new file mode 100644 (file)
index 0000000..c9bfd8d
--- /dev/null
@@ -0,0 +1,38 @@
+PR = "r0"
+
+require ../binutils/binutils.inc
+
+RCONFLICTS = "binutils"
+RREPLACES = "binutils"
+RCONFLICTS_binutils-noemu-symlinks = "binutils-symlinks"
+RREPLACES_binutils-noemu-symlinks = "binutils-symlinks"
+
+SRC_URI = "\
+     ${GNU_MIRROR}/binutils/binutils-${PV}.tar.bz2 \
+     file://binutils-2.16.91.0.6-objcopy-rename-errorcode.patch;patch=1 \
+     file://binutils-configure-texinfo-version.patch;patch=1 \
+     file://binutils-uclibc-100-uclibc-conf.patch;patch=1 \
+     file://110-arm-eabi-conf.patch;patch=1 \
+     file://binutils-uclibc-300-001_ld_makefile_patch.patch;patch=1 \
+     file://binutils-uclibc-300-006_better_file_error.patch;patch=1 \
+     file://binutils-uclibc-300-012_check_ldrunpath_length.patch;patch=1 \
+     "
+
+# powerpc patches
+SRC_URI += "file://binutils-2.16.1-e300c2c3.patch;patch=1"
+
+EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} --disable-shared"
+
+
+do_configure () {
+    CC=gcc AS=as LD=ld CXX=g++ AR=ar OBJCOPY=objcopy OBJDUMP=objdump RANLIB=ranlib NM=nm STRIP=strip oe_runconf
+}
+
+do_compile() {
+    make configure-host LDFLAGS=\"\" 
+    make LDFLAGS=\"-all-static\"
+}
+
+do_stage() {
+    :
+}
diff --git a/packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch b/packages/mamona/cx3110x-770he-0.8.1/770_performance_improvements.patch
new file mode 100644 (file)
index 0000000..be9be86
--- /dev/null
@@ -0,0 +1,307 @@
+Index: cx3110x-0.8.1/src/sm_drv_spi.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_spi.c        2008-04-28 18:30:22.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi.c     2008-04-28 18:30:25.000000000 -0300
+@@ -99,10 +99,10 @@
+       struct net_local *lp = dev->priv;
+       uint32_t host_ints, host_ints_ack, target_ints;
+       unsigned long timeout;
+-      int result;
++      int result, pass = 1;
+       
+       DEBUG(DBG_BH, "w\n");
+-      
++again:
+       /* Here we wake the target up */
+       target_ints = SPI_TARGET_INT_WAKEUP; 
+       sm_spi_write(dev, SPI_ADRS_ARM_INTERRUPTS,
+@@ -117,6 +117,11 @@
+               if (time_after(jiffies, timeout)) {
+                       printk(KERN_WARNING "We haven't got a READY interrupt"
+                              " from WAKEUP. (firmware crashed?)\n");
++                      if (pass == 1) {
++                              printk(KERN_WARNING "Try again...\n");
++                              pass = 2;
++                              goto again;
++                      }
+                       lp->device_state = DEVSTATE_DEAD;
+                       result = -1;
+                       goto exit;
+@@ -131,7 +136,10 @@
+                    (unsigned char *)&host_ints_ack, sizeof(host_ints_ack));
+       result = 0;
+-      
++
++      if (pass == 2) {
++              printk(KERN_WARNING "succeeded!!!\n");
++      }
+ exit:
+       DEBUG(DBG_BH, "W\n");
+       return result;
+@@ -150,49 +158,84 @@
+       return 0;
+ }
+-static int sm_drv_spi_rx(struct net_device *dev) 
++static int sm_drv_spi_is_rx_frame_available(struct net_device *dev)
++{
++      uint32_t host_ints, host_ints_ack;
++      sm_spi_read(dev, SPI_ADRS_HOST_INTERRUPTS, (unsigned char *)&host_ints, sizeof(host_ints));
++      if ((host_ints & SPI_HOST_INT_UPDATE) || (host_ints & SPI_HOST_INT_SW_UPDATE)) {
++              host_ints_ack = SPI_HOST_INT_UPDATE | SPI_HOST_INT_SW_UPDATE;
++              sm_spi_write(dev, SPI_ADRS_HOST_INT_ACK, (unsigned char *)&host_ints_ack, sizeof(host_ints_ack));
++              return 1;
++      }
++      return 0;
++}
++
++static struct s_ic_msg * sm_drv_spi_alloc_frame_and_start_rx_transfer(struct net_device *dev)
+ {
+       struct net_local *lp = dev->priv;
+-      struct spi_hif_local_data *hif_lp = HIF_LP(lp);
+       struct s_sm_frame *frame;
++      unsigned short length;
+       struct s_ic_msg *ic_msg;
++
++      frame = frame_skb_alloc(dev, lp->sm_descr.mtu + lp->sm_descr.rxoffset, 0);
++      if (frame == NULL) return NULL;
++
++      /* dummy read to flush SPI DMA controller bug */
++      sm_spi_read(dev, SPI_ADRS_GEN_PURP_1, (unsigned char *)&length, sizeof(length));
++
++      sm_spi_read(dev, SPI_ADRS_DMA_DATA, (unsigned char *)&length, sizeof(length));
++      DEBUG(DBG_BH, "%s: received frame len=%d\n", DRIVER_NAME, length);
++            
++      if (length > SPI_MAX_PACKET_SIZE) 
++              length = SPI_MAX_PACKET_SIZE;
++
++      sm_spi_dma_read_start(dev, SPI_ADRS_DMA_DATA, (unsigned char *) frame->data, length);
++
++      ic_msg = FRAME_ICMSG(frame);
++      ic_msg->frame = frame;
++      ic_msg->channel = 0; 
++      ic_msg->flags   = 0;
++      ic_msg->length  = length;
++      ic_msg->address = 0;
++      ic_msg->data    = frame->data;
++
++      return ic_msg;
++}
++
++static int sm_drv_spi_rx(struct net_device *dev) 
++{
++      struct net_local *lp = dev->priv;
++      struct spi_hif_local_data *hif_lp = HIF_LP(lp);
++      struct s_ic_msg *ic_msg, *ic_msg_next;
+       int result, err;
+-      unsigned short length;
+       int32_t callb_mask = 0;
+-                      
++
+       err = sm_drv_spi_wakeup(dev);
+       if (err < 0) {
+               result = -1;
+               goto exit;
+       }
+       
+-      frame = frame_skb_alloc(dev, lp->sm_descr.mtu + lp->sm_descr.rxoffset,
+-                              0);
+-      if (frame != NULL) {
+-              ic_msg = FRAME_ICMSG(frame);
+-              ic_msg->frame = frame;
+-            
+-              /* dummy read to flush SPI DMA controller bug */
+-              sm_spi_read(dev, SPI_ADRS_GEN_PURP_1, (unsigned char *)&length,
+-                          sizeof(length));
+-
+-              sm_spi_read(dev, SPI_ADRS_DMA_DATA, (unsigned char *)&length,
+-                          sizeof(length));
+-            
+-              DEBUG(DBG_BH, "%s: received frame len=%d\n", DRIVER_NAME,
+-                    length);
+-            
+-              if (length > SPI_MAX_PACKET_SIZE) 
+-                      length = SPI_MAX_PACKET_SIZE;
++      ic_msg_next = sm_drv_spi_alloc_frame_and_start_rx_transfer(dev);
++      if (ic_msg_next == NULL) {
++              printk("Couldn't allocate RX frame\n");
++              result = -1;
++              goto exit;
++      }
+-              sm_spi_dma_read(dev, SPI_ADRS_DMA_DATA,
+-                              (unsigned char *) frame->data, length);
+-                      
+-              ic_msg->channel = 0; 
+-              ic_msg->flags   = 0;
+-              ic_msg->length  = length;
+-              ic_msg->address = 0;
+-              ic_msg->data    = frame->data;
++      while (ic_msg_next) {
++              sm_spi_dma_read_wait_for_completion();
++              ic_msg = ic_msg_next;
++              ic_msg_next = NULL;
++
++              if (sm_drv_spi_is_rx_frame_available(dev)) {
++                      ic_msg_next = sm_drv_spi_alloc_frame_and_start_rx_transfer(dev);
++                      if (ic_msg_next == NULL) {
++                              printk("Couldn't allocate RX frame\n");
++                              result = -1;
++                              goto exit;
++                      }
++              }
+                       
+               hif_lp->spi_packets++;
+               spin_lock_bh(&lp->sm_lock);
+@@ -207,13 +250,14 @@
+                       
+               DEBUG(DBG_IC,"Callback mask: %d\n", callb_mask);
+                       
+-              if(callb_mask < 0)
++              if (callb_mask < 0) {
+                       printk(KERN_WARNING "prism_interconnect_message_handle"
+                              "returned error %d\n", callb_mask);
+-      } else
+-              printk("Couldn't allocate RX frame\n");
+-
+-      handle_sm_callback(dev, callb_mask);
++                      result = -1;
++                      goto exit;
++              }
++              handle_sm_callback(dev, callb_mask);
++      }
+       result = 0;
+Index: cx3110x-0.8.1/src/sm_drv_spi_io.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_spi_io.c     2008-04-28 18:30:25.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi_io.c  2008-04-28 18:35:59.000000000 -0300
+@@ -120,7 +120,7 @@
+ }
+-int cx3110x_spi_dma_read(struct net_device *dev, unsigned long address, void * buffer, unsigned int length)
++int cx3110x_spi_dma_read_start(struct net_device *dev, unsigned long address, void * buffer, unsigned int length)
+ {
+       SPI_CS_ON();
+@@ -170,13 +170,22 @@
+       omap_start_dma(spi_dma.dma_rx_ch);
+       omap_start_dma(spi_dma.dma_tx_ch);
+-      /* Wait for reading to complete */
+-      while(!spi_dma.dma_rx_done) {
+-              udelay(5);
++      return 0;
++}
++
++int cx3110x_spi_dma_read_wait_for_completion()
++{
++      int wait_limit = 15000 * 5;
++      int wait_cycles = 0;
++
++      /* Wait for DMA reading to complete */
++      while ((!spi_dma.dma_rx_done || !spi_dma.dma_tx_done) && wait_cycles < wait_limit) {
++              wait_cycles++;
++              udelay(1);
+       }
+-      while(!spi_dma.dma_tx_done) {
+-              udelay(5);
++      if (wait_cycles >= wait_limit) {
++              printk("McBSP read DMA timeout, spi_dma.dma_rx_done=%d, spi_dma.dma_tx_done=%d\n", spi_dma.dma_rx_done, spi_dma.dma_tx_done);
+       }
+       spi_dma.dma_rx_done = 0;
+@@ -184,11 +193,14 @@
+       SPI_CS_OFF();
+-      return 0;
++      return wait_cycles;
+ }
+ int cx3110x_spi_dma_write(struct net_device *dev, unsigned long address, void * buffer, unsigned int length)
+ {
++      int wait_limit = 15000 * 5;
++      int wait_cycles = 0;
++
+       SPI_CS_ON();
+       omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, address << 8);
+@@ -239,16 +251,20 @@
+       omap_start_dma(spi_dma.dma_rx_ch);
+       omap_start_dma(spi_dma.dma_tx_ch);
+-      /* We don't want to turn CS off before transfer is done */
+-
+-        while(!spi_dma.dma_rx_done) {
+-                udelay(5);
++      /* Wait for DMA writing to complete */
++      while ((!spi_dma.dma_rx_done || !spi_dma.dma_tx_done) && wait_cycles < wait_limit) {
++              wait_cycles++;
++              udelay(1);
+         }
+       while(!spi_dma.dma_tx_done) {
+               udelay(5);
+       }
++      if (wait_cycles >= wait_limit) {
++              printk("McBSP write DMA timeout, spi_dma.dma_rx_done=%d, spi_dma.dma_tx_done=%d\n", spi_dma.dma_rx_done, spi_dma.dma_tx_done);
++      }
++
+       spi_dma.dma_rx_done = 0;
+       spi_dma.dma_tx_done = 0;
+@@ -320,7 +336,7 @@
+ int cx3110x_spi_start(struct net_device *dev)
+ {
+       struct omap_mcbsp_spi_cfg spi_cfg;
+-      int r, div = 1, rate_mhz, max_mhz = 14;
++      int r, div = 1, rate_mhz, max_mhz = 16;
+       struct net_local * lp;
+       struct spi_hif_local_data * spi_lp;
+@@ -368,11 +384,11 @@
+       
+       cx3110x_hw_reset();
+       
+-      while(rate_mhz/div >= max_mhz)
++      while(rate_mhz/(div+1) >= max_mhz)
+               div++;
+               
+-        printk("McBSP2: freq_limit=%dMHz, base_freq=%dMHz, divisor=%d (%d.%dMHz)\n",
+-                max_mhz, rate_mhz, div, rate_mhz / div, (rate_mhz * 10 / div) % 10);
++      printk("McBSP2: freq_limit=%dMHz, base_freq=%dMHz, div=%d (%d.%dMHz)\n",
++              max_mhz, rate_mhz, div, rate_mhz / (div+1), (rate_mhz * 10 / (div+1)) % 10);
+       spi_dma.dma_tx_done = 0;
+       spi_dma.dma_rx_done = 0;
+Index: cx3110x-0.8.1/src/sm_drv_spi_io.h
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_spi_io.h     2008-04-28 18:30:22.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi_io.h  2008-04-28 18:30:25.000000000 -0300
+@@ -27,15 +27,17 @@
+ int cx3110x_spi_read(struct net_device * dev, unsigned long address, unsigned char * buffer, unsigned int length);
+ int cx3110x_spi_write(struct net_device * dev, unsigned long address, unsigned char * buffer, unsigned int length);
+-int cx3110x_spi_dma_read(struct net_device *dev, unsigned long address, void * buffer, unsigned int length);
++int cx3110x_spi_dma_read_start(struct net_device *dev, unsigned long address, void * buffer, unsigned int length);
++int cx3110x_spi_dma_read_wait_for_completion(void);
+ int cx3110x_spi_dma_write(struct net_device *dev, unsigned long address, void * buffer, unsigned int length);
+ void cx3110x_dump_register(struct net_device * dev);
+-#define sm_spi_read(dev, addr, data, len)     cx3110x_spi_read(dev, (addr), (data), (len))  
++#define sm_spi_read(dev, addr, data, len)     cx3110x_spi_read(dev, (addr), (data), (len))
+ #define sm_spi_write(dev, addr, data, len)    cx3110x_spi_write(dev, (addr), (data), (len))
+-#define sm_spi_dma_read(dev, addr, data, len)     cx3110x_spi_dma_read(dev, (addr), (data), (len))
++#define sm_spi_dma_read_start(dev, addr, data, len)     cx3110x_spi_dma_read_start(dev, (addr), (data), (len))
++#define sm_spi_dma_read_wait_for_completion()        cx3110x_spi_dma_read_wait_for_completion()
+ #define sm_spi_dma_write(dev, addr, data, len)    cx3110x_spi_dma_write(dev, (addr), (data), (len))
+ #endif
diff --git a/packages/mamona/cx3110x-770he-0.8.1/create_sysfs_link_for_wlan0.patch b/packages/mamona/cx3110x-770he-0.8.1/create_sysfs_link_for_wlan0.patch
new file mode 100644 (file)
index 0000000..cf4fa1e
--- /dev/null
@@ -0,0 +1,11 @@
+--- cx3110x-0.8.1.new/src/sm_drv_spi.c 2008-05-13 10:27:19.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi.c     2008-05-12 19:02:16.000000000 -0300
+@@ -1067,6 +1067,8 @@
+               goto err_out_4;
+       }
++        SET_NETDEV_DEV(dev, &wlan_omap_device.dev);
++
+       register_netdev(dev);
+       
+       /* Let's fetch the firmware from userspace */
diff --git a/packages/mamona/cx3110x-770he-0.8.1/cx3110x b/packages/mamona/cx3110x-770he-0.8.1/cx3110x
new file mode 100755 (executable)
index 0000000..ce2ecdf
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+MODULE="/lib/modules/`uname -r`/cx3110x.ko"
+
+swap_module () {
+    if [ -e $MODULE ]; then
+        # Removing builtin driver
+        rmmod cx3110x
+        # Inserting the new one
+        insmod $MODULE
+        # Setting device options (MAC, default country, etc)
+        if [ -x /mnt/initfs/usr/bin/wlan-cal ]; then
+            chroot /mnt/initfs /usr/bin/wlan-cal
+        fi
+    else
+        echo "OOPS: $MODULE not found, the switch is not possible" 1>&2
+    fi
+}
+
+case "$1" in
+    start)
+       swap_module
+       ;;
+    stop)
+       rmmod cx3110x
+       ;;
+    force-reload | restart)
+       swap_module
+       ;;
+    *)
+       echo "Usage: /etc/init.d/cx3110x {start|stop|restart|force-reload}"
+       exit 1
+       ;;
+esac
+
+exit 0
+
diff --git a/packages/mamona/cx3110x-770he-0.8.1/cx3110x.patch b/packages/mamona/cx3110x-770he-0.8.1/cx3110x.patch
new file mode 100644 (file)
index 0000000..0634058
--- /dev/null
@@ -0,0 +1,492 @@
+Index: cx3110x-0.8.1/src/sm_drv_ioctl_umac.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_ioctl_umac.c 2007-10-15 08:56:20.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_ioctl_umac.c      2008-04-22 15:50:45.000000000 -0300
+@@ -76,7 +76,7 @@
+       kfree(wrqu.data.pointer);
+ }
+-void send_wpa_ie_event(struct net_device *dev, char * bss_addr, char * wpa_ie, size_t wpa_ie_len, uint32_t event)
++void send_wpa_ie_event(struct net_device *dev, char * wpa_ie, size_t wpa_ie_len, uint32_t event)
+ {
+       union iwreq_data wrqu;
+       uint32_t we_event;
+@@ -97,15 +97,12 @@
+               return;
+       }
+-      wrqu.data.pointer = kzalloc(ETH_ALEN + 1 + wpa_ie_len, GFP_ATOMIC);
++      wrqu.data.pointer = kzalloc(wpa_ie_len, GFP_ATOMIC);
+       if (!wrqu.data.pointer)
+               return;
+-      memcpy(wrqu.data.pointer, bss_addr, ETH_ALEN);
+-      *((char *)(wrqu.data.pointer + ETH_ALEN)) = ':';        
+-      memcpy(wrqu.data.pointer + ETH_ALEN + 1, wpa_ie, wpa_ie_len);
+-      
+-      wrqu.data.length = ETH_ALEN + 1 + wpa_ie_len;
++      memcpy(wrqu.data.pointer, wpa_ie, wpa_ie_len);
++      wrqu.data.length = wpa_ie_len;
+       wireless_send_event(dev, we_event, &wrqu, wrqu.data.pointer);
+       kfree(wrqu.data.pointer);
+@@ -495,7 +492,7 @@
+       /* We send the event after parsing the association frame */
+       if ((lp->link_state == DOT11_STATE_ASSOCING || lp->link_state == DOT11_STATE_ASSOC)  
+           && event)
+-              send_wpa_ie_event(dev, bssid, wpa_ie, wpa_ie_len, event);
++              send_wpa_ie_event(dev, wpa_ie, wpa_ie_len, event);
+                       
+       /* try to use existing entry */
+       list_for_each_entry_safe(bss, safe, &lp->bss_wpa_list, list) {
+@@ -1782,6 +1779,435 @@
+       return sm_drv_oid_set(dev, DOT11_OID_STAKEY, (void *)&key, sizeof(struct obj_stakey));
+ }
++static int sm_drv_set_auth(struct net_device *dev,
++                         struct iw_request_info *info,
++                         union iwreq_data *wrqu, char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_param *param = &wrqu->param;
++      u32 authen = 0, dot1x = 0;
++      u32 exunencrypt = 0, privinvoked = 0, wpa = 0;
++      u32 old_wpa;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "SET AUTH\n");
++
++      /* first get the flags */
++      down(&priv->wpa_sem);
++      wpa = old_wpa = priv->wpa;
++      up(&priv->wpa_sem);
++      ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                           (void *)&authen, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                            (void *)&privinvoked, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                            (void *)&exunencrypt, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_DOT1XENABLE,
++                            (void *)&dot1x, sizeof(uint32_t));
++
++      if (ret < 0)
++              goto out;
++
++      switch (param->flags & IW_AUTH_INDEX) {
++      case IW_AUTH_CIPHER_PAIRWISE:
++      case IW_AUTH_CIPHER_GROUP:
++      case IW_AUTH_KEY_MGMT:
++              break;
++
++      case IW_AUTH_WPA_ENABLED:
++              /* Do the same thing as IW_AUTH_WPA_VERSION */
++              if (param->value) {
++                      wpa = DOT11_PRIV_INV_TKIP;
++                      privinvoked = 1; /* For privacy invoked */
++                      exunencrypt = 1; /* Filter out all unencrypted frames */
++                      dot1x = 0x01; /* To enable eap filter */
++                      authen = DOT11_AUTH_OS; /* Only WEP uses _SK and _BOTH */
++              } else {
++                      wpa = DOT11_PRIV_INV_NONE;
++                      privinvoked = 0;
++                      exunencrypt = 0; /* Do not filter un-encrypted data */
++                      dot1x = 0;
++              }
++              break;
++
++      case IW_AUTH_WPA_VERSION:
++              if (param->value & IW_AUTH_WPA_VERSION_DISABLED) {
++                      wpa = DOT11_PRIV_INV_NONE;
++                      privinvoked = 0;
++                      exunencrypt = 0; /* Do not filter un-encrypted data */
++                      dot1x = 0;
++              } else {
++                      if (param->value & IW_AUTH_WPA_VERSION_WPA)
++                              wpa = DOT11_PRIV_INV_TKIP;
++                      else if (param->value & IW_AUTH_WPA_VERSION_WPA2)
++                              wpa = DOT11_PRIV_INV_AES_CCMP;
++                      privinvoked = 1; /* For privacy invoked */
++                      exunencrypt = 1; /* Filter out all unencrypted frames */
++                      dot1x = 0x01; /* To enable eap filter */
++                      authen = DOT11_AUTH_OS; /* Only WEP uses _SK and _BOTH */
++              }
++              break;
++
++      case IW_AUTH_RX_UNENCRYPTED_EAPOL:
++              /* dot1x should be the opposite of RX_UNENCRYPTED_EAPOL;
++               * turn off dot1x when allowing receipt of unencrypted EAPOL
++               * frames, turn on dot1x when receipt should be disallowed
++               */
++              dot1x = param->value ? 0 : 0x01;
++              break;
++
++      case IW_AUTH_PRIVACY_INVOKED:
++              privinvoked = param->value ? 1 : 0;
++              break;
++
++      case IW_AUTH_DROP_UNENCRYPTED:
++              exunencrypt = param->value ? 1 : 0;
++              break;
++
++      case IW_AUTH_80211_AUTH_ALG:
++              if (param->value & IW_AUTH_ALG_SHARED_KEY) {
++                      /* Only WEP uses _SK and _BOTH */
++                      if (wpa > 0) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
++                      authen = DOT11_AUTH_SK;
++              } else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) {
++                      authen = DOT11_AUTH_OS;
++              } else {
++                      ret = -EINVAL;
++                      goto out;
++              }
++              break;
++
++      default:
++              return -EOPNOTSUPP;
++      }
++
++      /* Set all the values */
++      down(&priv->wpa_sem);
++      priv->wpa = wpa;
++      up(&priv->wpa_sem);
++
++      sm_drv_oid_set(dev, DOT11_OID_AUTHENABLE,
++                     (void *)&authen, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_PRIVACYINVOKED,
++                     (void *)&privinvoked, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_EXUNENCRYPTED,
++                     (void *)&exunencrypt, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_DOT1XENABLE,
++                     (void *)&dot1x, sizeof(uint32_t));
++
++ out:
++      return ret;
++}
++
++static int sm_drv_get_auth(struct net_device *dev,
++                         struct iw_request_info *info,
++                         union iwreq_data *wrqu, char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_param *param = &wrqu->param;
++      u32 authen = 0, dot1x = 0;
++      u32 exunencrypt = 0, privinvoked = 0, wpa = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "GET AUTH\n");
++
++      /* first get the flags */
++      down(&priv->wpa_sem);
++      wpa = priv->wpa;
++      up(&priv->wpa_sem);
++
++      switch (param->flags & IW_AUTH_INDEX) {
++      case IW_AUTH_CIPHER_PAIRWISE:
++      case IW_AUTH_CIPHER_GROUP:
++      case IW_AUTH_KEY_MGMT:
++              /*
++               * wpa_supplicant will control these internally
++               */
++              ret = -EOPNOTSUPP;
++              break;
++
++      case IW_AUTH_WPA_VERSION:
++              switch (wpa) {
++              case DOT11_PRIV_INV_TKIP:
++                      param->value = IW_AUTH_WPA_VERSION_WPA;
++                      break;
++              case DOT11_PRIV_INV_AES_CCMP:
++                      param->value = IW_AUTH_WPA_VERSION_WPA2;
++                      break;
++              default:
++                      param->value = IW_AUTH_WPA_VERSION_DISABLED;
++                      break;
++              }
++              break;
++
++      case IW_AUTH_DROP_UNENCRYPTED:
++              ret = sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                                   (void *)&exunencrypt, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = exunencrypt > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_80211_AUTH_ALG:
++              ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                                   (void *)&authen, sizeof(uint32_t));
++              if (ret >= 0) {
++                      switch (authen) {
++                      case DOT11_AUTH_OS:
++                              param->value = IW_AUTH_ALG_OPEN_SYSTEM;
++                              break;
++                      case DOT11_AUTH_BOTH:
++                      case DOT11_AUTH_SK:
++                              param->value = IW_AUTH_ALG_SHARED_KEY;
++                      case DOT11_AUTH_NONE:
++                      default:
++                              param->value = 0;
++                              break;
++                      }
++              }
++              break;
++
++      case IW_AUTH_WPA_ENABLED:
++              param->value = wpa > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_RX_UNENCRYPTED_EAPOL:
++              ret = sm_drv_oid_get(dev, DOT11_OID_DOT1XENABLE,
++                                   (void *)&dot1x, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = dot1x > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_PRIVACY_INVOKED:
++              ret = sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                                   (void *)&privinvoked, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = privinvoked > 0 ? 1 : 0;
++              break;
++
++      default:
++              return -EOPNOTSUPP;
++      }
++      return ret;
++}
++
++#define KEY_SIZE_WEP104 13    /* 104/128-bit WEP keys */
++#define KEY_SIZE_WEP40  5     /* 40/64-bit WEP keys */
++#define KEY_SIZE_TKIP   32    /* TKIP keys */
++
++static int sm_drv_set_encodeext(struct net_device *dev,
++                              struct iw_request_info *info,
++                              union iwreq_data *wrqu,
++                              char *extra)
++{
++      struct iw_point *encoding = &wrqu->encoding;
++      struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
++      int idx, alg = ext->alg, set_key = 1;
++      int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "SET ENCODEEXT\n");
++
++      /* Determine and validate the key index */
++      idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
++      if (idx) {
++              if (idx < 0 || idx > 3)
++                      return -EINVAL;
++      } else {
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              if (ret < 0)
++                      goto out;
++      }
++
++      if (encoding->flags & IW_ENCODE_DISABLED)
++              alg = IW_ENCODE_ALG_NONE;
++
++      if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
++              /* Only set transmit key index here, actual
++               * key is set below if needed.
++               */
++              ret = sm_drv_oid_set(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              set_key = ext->key_len > 0 ? 1 : 0;
++      }
++
++      if (set_key) {
++              switch (alg) {
++              case IW_ENCODE_ALG_NONE:
++                      break;
++              case IW_ENCODE_ALG_WEP: {
++                      struct obj_key key = { DOT11_PRIV_WEP, 0, "" };
++                      memset(key.key, 0, sizeof(key.key));
++                      if (ext->key_len > KEY_SIZE_WEP104) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
++                      if (ext->key_len > KEY_SIZE_WEP40)
++                              key.length = KEY_SIZE_WEP104;
++                      else
++                              key.length = KEY_SIZE_WEP40;
++                      memcpy(key.key, ext->key, ext->key_len);
++                      ret = sm_drv_oid_set(dev, DOT11_OID_DEFKEYID + idx + 1,
++                                           (void *)&key,
++                                           sizeof(struct obj_key));
++                      break;
++              }
++              case IW_ENCODE_ALG_TKIP:
++              case IW_ENCODE_ALG_CCMP: {
++                      struct obj_stakey key;
++                      memset(key.key, 0, sizeof(key.key));
++                      if (alg == IW_ENCODE_ALG_TKIP)
++                              key.type = DOT11_PRIV_TKIP;
++                      else
++                              key.type = DOT11_PRIV_AES_CCMP;
++                      memcpy(key.address, ext->addr.sa_data, ETH_ALEN);
++                      key.length = ext->key_len;
++                      key.keyid = idx;
++                      key.ext = 0;
++                      memcpy(key.key, ext->key, ext->key_len);
++                      ret = sm_drv_oid_set(dev, DOT11_OID_STAKEY,
++                                           (void *)&key,
++                                           sizeof(struct obj_stakey));
++                      break;
++              }
++              default:
++                      return -EINVAL;
++              }
++
++              if (ret < 0)
++                      goto out;
++
++      }
++
++      /* Read the flags */
++      if (encoding->flags & IW_ENCODE_DISABLED) {
++              /* Encoding disabled,
++               * authen = DOT11_AUTH_OS;
++               * invoke = 0;
++               * exunencrypt = 0; */
++      }
++      if (encoding->flags & IW_ENCODE_OPEN) {
++              /* Encode but accept non-encoded packets. No auth */
++              invoke = 1;
++      }
++      if (encoding->flags & IW_ENCODE_RESTRICTED) {
++              /* Refuse non-encoded packets. Auth */
++              authen = DOT11_AUTH_BOTH;
++              invoke = 1;
++              exunencrypt = 1;
++      }
++
++      /* do the change if requested  */
++      if (encoding->flags & IW_ENCODE_MODE) {
++              sm_drv_oid_set(dev, DOT11_OID_AUTHENABLE,
++                             (void *)&authen, sizeof(uint32_t));
++              sm_drv_oid_set(dev, DOT11_OID_PRIVACYINVOKED,
++                             (void *)&invoke, sizeof(uint32_t));
++              sm_drv_oid_set(dev, DOT11_OID_EXUNENCRYPTED,
++                             (void *)&exunencrypt, sizeof(uint32_t));
++      }
++
++ out:
++      return ret;
++}
++
++
++static int sm_drv_get_encodeext(struct net_device *dev,
++                              struct iw_request_info *info,
++                              union iwreq_data *wrqu,
++                              char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_point *encoding = &wrqu->encoding;
++      struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
++      int idx, max_key_len;
++      int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0, wpa = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "GET ENCODEEXT\n");
++
++      /* first get the flags */
++      ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                           (void *)&authen, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                            (void *)&invoke, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                            (void *)&exunencrypt, sizeof(uint32_t));
++      if (ret < 0)
++              goto out;
++
++      max_key_len = encoding->length - sizeof(*ext);
++      if (max_key_len < 0)
++              return -EINVAL;
++
++      idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
++      if (idx) {
++              if (idx < 0 || idx > 3)
++                      return -EINVAL;
++      } else {
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              if (ret < 0)
++                      goto out;
++      }
++
++      encoding->flags = idx + 1;
++      memset(ext, 0, sizeof(*ext));
++
++      switch (authen) {
++      case DOT11_AUTH_BOTH:
++      case DOT11_AUTH_SK:
++              wrqu->encoding.flags |= IW_ENCODE_RESTRICTED;
++      case DOT11_AUTH_OS:
++      default:
++              wrqu->encoding.flags |= IW_ENCODE_OPEN;
++              break;
++      }
++
++      down(&priv->wpa_sem);
++      wpa = priv->wpa;
++      up(&priv->wpa_sem);
++
++      if (authen == DOT11_AUTH_OS && !exunencrypt && !invoke && !wpa) {
++              /* No encryption */
++              ext->alg = IW_ENCODE_ALG_NONE;
++              ext->key_len = 0;
++              wrqu->encoding.flags |= IW_ENCODE_DISABLED;
++      } else {
++              struct obj_key *key;
++
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID + idx + 1,
++                                   (void *)&key, sizeof(struct obj_key));
++              if (ret < 0)
++                      goto out;
++              if (max_key_len < key->length) {
++                      ret = -E2BIG;
++                      goto out;
++              }
++              memcpy(ext->key, key->key, key->length);
++              ext->key_len = key->length;
++
++              switch (key->type) {
++              case DOT11_PRIV_TKIP:
++                      ext->alg = IW_ENCODE_ALG_TKIP;
++                      break;
++              case DOT11_PRIV_AES_CCMP:
++                      ext->alg = IW_ENCODE_ALG_CCMP;
++                      break;
++              default:
++              case DOT11_PRIV_WEP:
++                      ext->alg = IW_ENCODE_ALG_WEP;
++                      break;
++              }
++              wrqu->encoding.flags |= IW_ENCODE_ENABLED;
++      }
++
++ out:
++      return ret;
++}
+ /* Private handlers */
+@@ -2155,10 +2581,10 @@
+       (iw_handler) NULL,                      /* -- hole -- */
+       (iw_handler) sm_drv_set_genie,          /* SIOCSIWGENIE*/
+       (iw_handler) NULL,                      /* SIOCGIWGENIE */
+-      (iw_handler) NULL,                      /* SIOCSIWAUTH */
+-      (iw_handler) NULL,                      /* SIOCGIWAUTH */
+-      (iw_handler) NULL,                      /* SIOCSIWENCODEEXT */
+-      (iw_handler) NULL,                      /* SIOCGIWENCODEEXT */
++      (iw_handler) sm_drv_set_auth,           /* SIOCSIWAUTH */
++      (iw_handler) sm_drv_get_auth,           /* SIOCGIWAUTH */
++      (iw_handler) sm_drv_set_encodeext,      /* SIOCSIWENCODEEXT */
++      (iw_handler) sm_drv_get_encodeext,      /* SIOCGIWENCODEEXT */
+       (iw_handler) sm_drv_set_pmk,            /* SIOCSIWPMKSA */
+ };
diff --git a/packages/mamona/cx3110x-770he-0.8.1/defconfig b/packages/mamona/cx3110x-770he-0.8.1/defconfig
new file mode 100644 (file)
index 0000000..7119b50
--- /dev/null
@@ -0,0 +1,1380 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16.27-omap1
+# Fri Apr 18 16:19:13 2008
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+CONFIG_ARCH_OMAP1=y
+# CONFIG_ARCH_OMAP2 is not set
+
+#
+# OMAP Feature Selections
+#
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+CONFIG_OMAP_COMPONENT_VERSION=y
+CONFIG_OMAP_GPIO_SWITCH=y
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_STI=y
+CONFIG_OMAP_STI_CONSOLE=y
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+CONFIG_OMAP_LL_DEBUG_UART1=y
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+
+#
+# OMAP Core Type
+#
+# CONFIG_ARCH_OMAP730 is not set
+# CONFIG_ARCH_OMAP15XX is not set
+CONFIG_ARCH_OMAP16XX=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_INNOVATOR is not set
+# CONFIG_MACH_OMAP_H2 is not set
+# CONFIG_MACH_OMAP_H3 is not set
+# CONFIG_MACH_OMAP_OSK is not set
+CONFIG_MACH_NOKIA770=y
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP CPU Speed
+#
+CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
+CONFIG_OMAP_ARM_216MHZ=y
+# CONFIG_OMAP_ARM_192MHZ is not set
+# CONFIG_OMAP_ARM_168MHZ is not set
+# CONFIG_OMAP_ARM_120MHZ is not set
+# CONFIG_OMAP_ARM_60MHZ is not set
+# CONFIG_OMAP_ARM_30MHZ is not set
+CONFIG_OMAP_DSP=y
+# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set
+CONFIG_OMAP_DSP_TASK_MULTIOPEN=y
+CONFIG_OMAP_DSP_FBEXPORT=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=1f03 rootfstype=jffs2 time"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=y
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=y
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_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_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_IPRANGE is not set
+# CONFIG_IP_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_RECENT is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_DSCP is not set
+# CONFIG_IP_NF_MATCH_AH_ESP is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
+CONFIG_IP_NF_FILTER=y
+# CONFIG_IP_NF_TARGET_REJECT is not set
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IP_NF_TARGET_IDLETIMER=y
+# CONFIG_IP_NF_MANGLE is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIBRF6150=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=y
+# CONFIG_PROC_EVENTS is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_TOTO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_OMAP_HW=y
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+# CONFIG_MTD_ONENAND_SYNC_READ is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ATMEL is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_OMAP=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_OMAP is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+CONFIG_OMAP_RNG=y
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_OMAP_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+CONFIG_I2C_OMAP=y
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_TPS65010 is not set
+CONFIG_SENSORS_TLV320AIC23=y
+CONFIG_SENSORS_TLV320AIC23_ESD_WORKAROUND=y
+# CONFIG_GPIOEXPANDER_OMAP is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_OMAP_UWIRE=y
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+CONFIG_NOKIA_OMAP_USBTEST=m
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_OMAP=y
+CONFIG_FB_OMAP_LCDC_EXTERNAL=y
+CONFIG_FB_OMAP_LCDC_HWA742=y
+CONFIG_FB_OMAP_MANUAL_UPDATE=y
+CONFIG_FB_OMAP_LCD_MIPID=y
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+# CONFIG_FB_OMAP_DMA_TUNE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_OMAP_AIC23=y
+# CONFIG_SND_OMAP_TSC2101 is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_BANDWIDTH=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_OMAP=y
+CONFIG_USB_OMAP=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+CONFIG_USB_FILE_STORAGE_TEST=y
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BROKEN_RFD=y
+CONFIG_MMC_BULKTRANSFER=y
+CONFIG_MMC_OMAP=y
+
+#
+# Synchronous Serial Interfaces (SSI)
+#
+CONFIG_OMAP_UWIRE=y
+# CONFIG_OMAP_TSC2101 is not set
+
+#
+# CBUS support
+#
+CONFIG_CBUS=y
+CONFIG_CBUS_TAHVO=y
+CONFIG_CBUS_TAHVO_USER=y
+CONFIG_CBUS_TAHVO_USB=y
+# CONFIG_CBUS_TAHVO_USB_HOST_BY_DEFAULT is not set
+CONFIG_CBUS_RETU=y
+CONFIG_CBUS_RETU_USER=y
+CONFIG_CBUS_RETU_POWERBUTTON=y
+CONFIG_CBUS_RETU_RTC=y
+CONFIG_CBUS_RETU_WDT=y
+CONFIG_CBUS_RETU_HEADSET=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=y
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_CAPABILITIES is not set
+# CONFIG_SECURITY_ROOTPLUG is not set
+# CONFIG_SECURITY_SECLVL is not set
+CONFIG_SECURITY_LOWMEM=y
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/mamona/cx3110x-770he-0.8.1/fix_cross_makefile.patch b/packages/mamona/cx3110x-770he-0.8.1/fix_cross_makefile.patch
new file mode 100644 (file)
index 0000000..1f75f09
--- /dev/null
@@ -0,0 +1,11 @@
+Index: cx3110x-0.8.1/src/Makefile
+===================================================================
+--- cx3110x-0.8.1.orig/src/Makefile    2008-04-28 15:58:24.000000000 -0300
++++ cx3110x-0.8.1/src/Makefile 2008-04-28 15:58:28.000000000 -0300
+@@ -1,5 +1,5 @@
+ ifeq ($(KERNELRELEASE),)
+-STRIP = arm-linux-strip
++STRIP = $(CROSS_COMPILE)strip
+ PWD := $(shell pwd)
+ .PHONY: modules clean
diff --git a/packages/mamona/cx3110x-770he-0.8.1/fix_mem_allign.patch b/packages/mamona/cx3110x-770he-0.8.1/fix_mem_allign.patch
new file mode 100644 (file)
index 0000000..6c45219
--- /dev/null
@@ -0,0 +1,94 @@
+Index: cx3110x-0.8.1/src/sm_drv_spi_io.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_spi_io.c     2008-04-22 14:54:42.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi_io.c  2008-04-22 15:00:07.000000000 -0300
+@@ -240,18 +240,21 @@
+       omap_start_dma(spi_dma.dma_tx_ch);
+       /* We don't want to turn CS off before transfer is done */
+-      
++
++        while(!spi_dma.dma_rx_done) {
++                udelay(5);
++        }
++
+       while(!spi_dma.dma_tx_done) {
+               udelay(5);
+       }
++      spi_dma.dma_rx_done = 0;
+       spi_dma.dma_tx_done = 0;
+       /* UMAC may send us odd number of bytes long frames */
+       if (length % 2) {
+-              u16 last_word;
+-              
+-              last_word = *(uint16_t *)(buffer + length - 1);         
++              u16 last_word = *((uint8_t *)buffer + length - 1);
+               omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, last_word);
+       }
+@@ -264,7 +267,6 @@
+ int cx3110x_spi_read(struct net_device *dev, unsigned long address, unsigned char * buffer, unsigned int length)
+ {
+       int i;
+-      u16 * short_buffer = (u16 *) buffer;
+       unsigned int r_length = length >> 1;
+       DEBUG(DBG_SPI_IO, "omap_wlan_spi_read\n");
+@@ -274,8 +276,13 @@
+       omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, 
+                                     (address << 8) | ADDR_READ_BIT_15);
+-      for (i = 0 ; i < r_length ; i++)
+-              omap_mcbsp_spi_master_recv_word_poll(OMAP_MCBSP2, (u32*)(short_buffer + i));
++        for (i = 0 ; i < r_length ; i++) {
++                u32 tmp;
++                omap_mcbsp_spi_master_recv_word_poll(OMAP_MCBSP2, &tmp);
++                /* Assume little endian byte order */
++                buffer[i * 2 + 0] = tmp & 0xFF;
++                buffer[i * 2 + 1] = (tmp >> 8) & 0xFF;
++        }
+       SPI_CS_OFF();
+       return 0;
+@@ -285,24 +292,22 @@
+ int cx3110x_spi_write(struct net_device *dev, unsigned long address, unsigned char * buffer, unsigned int length)
+ {
+       int i;
+-      u16 * short_buffer = (u16 *) buffer;
+       unsigned int w_length = length >> 1;
+-
+       DEBUG(DBG_SPI_IO, "omap_wlan_spi_write (%d bytes @ 0x%lx)\n", length, address << 8);
+       SPI_CS_ON();
+       omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, address << 8);
+       
+-      for (i = 0 ; i < w_length ; i++)
+-              omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, short_buffer[i]); 
++        for (i = 0 ; i < w_length ; i++) {
++                /* Assume little endian byte order */
++                omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, (u32)buffer[i * 2] | ((u32)buffer[i * 2 + 1] << 8));
++        }
+       /* UMAC may send us odd number of bytes long frames */
+       if (length % 2) {
+-              u16 last_word;
+-
+-              last_word = buffer[length - 1];
++                u16 last_word = buffer[length - 1];
+               omap_mcbsp_spi_master_xmit_word_poll(OMAP_MCBSP2, last_word); 
+       }
+@@ -366,6 +371,9 @@
+       while(rate_mhz/div >= max_mhz)
+               div++;
+               
++        printk("McBSP2: freq_limit=%dMHz, base_freq=%dMHz, divisor=%d (%d.%dMHz)\n",
++                max_mhz, rate_mhz, div, rate_mhz / div, (rate_mhz * 10 / div) % 10);
++
+       spi_dma.dma_tx_done = 0;
+       spi_dma.dma_rx_done = 0;
+       
diff --git a/packages/mamona/cx3110x-770he-0.8.1/fix_mem_corruption.patch b/packages/mamona/cx3110x-770he-0.8.1/fix_mem_corruption.patch
new file mode 100644 (file)
index 0000000..ae3e87f
--- /dev/null
@@ -0,0 +1,53 @@
+Index: cx3110x-0.8.1/src/sm_drv_spi_io.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_spi_io.c     2007-10-15 08:56:20.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi_io.c  2008-04-22 14:53:49.000000000 -0300
+@@ -91,7 +91,7 @@
+       int dma_tx_done;
+       int dma_rx_done;
+       
+-      uint16_t recv_buffer;
++      uint16_t *recv_buffer;
+ };
+ static struct omap_wlan_spi_dma spi_dma;
+@@ -142,7 +142,7 @@
+       omap_set_dma_src_params(spi_dma.dma_tx_ch,
+                               OMAP_DMA_PORT_EMIFF,
+                               OMAP_DMA_AMODE_CONSTANT,
+-                              virt_to_phys(&spi_dma.recv_buffer),
++                              virt_to_phys(spi_dma.recv_buffer),
+                               0, 0);
+       /* Prepare for reading */
+@@ -208,7 +208,7 @@
+       omap_set_dma_dest_params(spi_dma.dma_rx_ch,
+                                OMAP_DMA_PORT_EMIFF,
+                                OMAP_DMA_AMODE_CONSTANT,
+-                               virt_to_phys(&spi_dma.recv_buffer),
++                               virt_to_phys(spi_dma.recv_buffer),
+                                0, 0);
+@@ -319,6 +319,12 @@
+       struct net_local * lp;
+       struct spi_hif_local_data * spi_lp;
++        spi_dma.recv_buffer = kmalloc(sizeof(*spi_dma.recv_buffer), GFP_ATOMIC);
++        if (!spi_dma.recv_buffer) {
++                printk("spi_dma.recv_buffer allocation failed\n");
++                return -1;
++        }
++
+       lp = dev->priv;
+       spi_lp = HIF_LP(lp);
+@@ -411,6 +417,8 @@
+       omap_free_gpio(wlan_config->irq_gpio);
+       omap_free_dma(spi_dma.dma_tx_ch);
+       omap_free_dma(spi_dma.dma_rx_ch);
++
++        kfree(spi_dma.recv_buffer);
+ }
diff --git a/packages/mamona/cx3110x-770he-0.8.1/fix_opps_while_connecting_with_nm.patch b/packages/mamona/cx3110x-770he-0.8.1/fix_opps_while_connecting_with_nm.patch
new file mode 100644 (file)
index 0000000..c735645
--- /dev/null
@@ -0,0 +1,128 @@
+Index: cx3110x-0.8.1/src/sm_drv_ioctl_umac.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_ioctl_umac.c
++++ cx3110x-0.8.1/src/sm_drv_ioctl_umac.c
+@@ -1085,28 +1085,31 @@ static int sm_drv_get_wap(struct net_dev
+ static int sm_drv_set_scan(struct net_device *dev, struct iw_request_info *info,
+                          struct iw_point *vwrq, char *extra)
+ {
+-      int ret = 0;
++      int ret = 0, l, msecs;
+       struct obj_ssid essid;
+       int16_t scan = -1;
+       uint32_t scan_mode, flush_bss_list = 1;
+       struct net_local *lp = dev->priv;
+       uint32_t bgr_scan_disable = 1;
++      memset(essid.octets, 0, sizeof(essid.octets));
++
+       if (vwrq == NULL)
+               return -EINVAL;
+       /* First we flush the UMAC's AP list*/
+-      ret = sm_drv_oid_set(dev, DOT11_OID_BSSLISTFLUSH, (void*)&flush_bss_list, sizeof(uint32_t));
++      ret = sm_drv_oid_set(dev, DOT11_OID_BSSLISTFLUSH,
++                           (void*)&flush_bss_list, sizeof(uint32_t));
+       if (ret < 0)
+               return ret;
+       if (vwrq->flags & IW_SCAN_THIS_ESSID) {
+               if (vwrq->length > 0) {
+-                      essid.length = vwrq->length - 1;
+-                      memcpy(essid.octets, vwrq->pointer, essid.length + 1);
++                      l = vwrq->length;
++                      essid.length = min(l, IW_ESSID_MAX_SIZE);
++                      memcpy(essid.octets, vwrq->pointer, essid.length);
+               } else {
+                       essid.length = 0;
+-                      memset(essid.octets, 0, sizeof(essid.octets));
+               }
+               scan_mode = SCAN_MODE_ACTIVE;
+       } else {
+@@ -1114,48 +1117,76 @@ static int sm_drv_set_scan(struct net_de
+               scan_mode = SCAN_MODE_PASSIVE;
+       }
+-      ret = sm_drv_oid_set(dev, DOT11_OID_SCANMODE, (void*)&scan_mode, sizeof(uint32_t));
++      ret = sm_drv_oid_set(dev, DOT11_OID_SCANMODE, (void*)&scan_mode,
++                           sizeof(uint32_t));
+       if (ret < 0)
+               return ret;
+-      ret = sm_drv_oid_set(dev, DOT11_OID_SCANSSID, (void*)&essid, sizeof(struct obj_ssid));
++      ret = sm_drv_oid_set(dev, DOT11_OID_SCANSSID, (void*)&essid,
++                           sizeof(struct obj_ssid));
+       if (ret < 0)
+               return ret;
++
++      spin_lock_bh(&lp->sm_lock);
+       
+       /* We let the background scanning work a bit...*/
+-      if (scan_mode == SCAN_MODE_PASSIVE && lp->link_state != DOT11_STATE_ASSOC)
+-              msleep(2000);
++      if (scan_mode == SCAN_MODE_PASSIVE
++          && lp->link_state != DOT11_STATE_ASSOC)
++              msecs = 2000;
++      else
++              /* for active scan, the delay can be smaller */
++              msecs = 30;
++
++      spin_unlock_bh(&lp->sm_lock);
++
++      msleep(msecs);
++
++      spin_lock_bh(&lp->sm_lock);
+-      /* Let's start the scan timer in case UMAC doesn't trap the scan event */
++      /*
++       * Let's start the scan timer in case UMAC doesn't trap the scan
++       * event
++       */
+       mod_timer(&lp->scan_timer, jiffies + 4 * HZ);
+       
+       if (lp->link_state != DOT11_STATE_ASSOC && 
+           lp->bss_type != DOT11_BSSTYPE_IBSS) {
++              spin_unlock_bh(&lp->sm_lock);
+               ret = sm_drv_oid_set(dev, DOT11_OID_AUTOSCANDISABLE,
+                                    (void*)&bgr_scan_disable,
+                                    sizeof(uint32_t));
++              spin_lock_bh(&lp->sm_lock);
+               if (ret < 0)
+                       return ret;
+       }
++      spin_unlock_bh(&lp->sm_lock);
+       /* And finally we send the scan request */
+-      ret = sm_drv_oid_set(dev, DOT11_OID_SCAN, (void*)&scan, sizeof(int16_t));
++      ret = sm_drv_oid_set(dev, DOT11_OID_SCAN, (void*)&scan,
++                           sizeof(int16_t));
++
+       if (ret < 0) {
+               /* 
+                * If we're associated, we haven't disable bgr scan,
+                * so we don't need to go there.
+                */
++              spin_lock_bh(&lp->sm_lock);
+               if (lp->link_state != DOT11_STATE_ASSOC &&
+-                  lp->bss_type != DOT11_BSSTYPE_IBSS)
++                  lp->bss_type != DOT11_BSSTYPE_IBSS) {
++                      spin_unlock_bh(&lp->sm_lock);
+                       goto scan_err_out;
++              }
++              spin_unlock_bh(&lp->sm_lock);
+       }
+-      
++
+       return 0;
+  scan_err_out:
+-      DEBUG(DBG_ALL, "Scanning failed (err: %d), turning background scanning on\n", ret);
++      DEBUG(DBG_ALL, "scanning failed (%d), enabling background scan.",
++                      ret);
+       bgr_scan_disable = 0;
+-      sm_drv_oid_set(dev, DOT11_OID_AUTOSCANDISABLE, (void*)&bgr_scan_disable, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_AUTOSCANDISABLE,
++                     (void*)&bgr_scan_disable, sizeof(uint32_t));
+       
+       return ret;
+ }
diff --git a/packages/mamona/cx3110x-770he-0.8.1/fix_ssid_data_length.patch b/packages/mamona/cx3110x-770he-0.8.1/fix_ssid_data_length.patch
new file mode 100644 (file)
index 0000000..a9e36ce
--- /dev/null
@@ -0,0 +1,13 @@
+Index: cx3110x-0.8.1/src/sm_drv_ioctl_umac.c
+===================================================================
+--- cx3110x-0.8.1.orig/src/sm_drv_ioctl_umac.c 2008-04-28 15:59:37.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_ioctl_umac.c      2008-04-28 15:59:57.000000000 -0300
+@@ -171,7 +171,7 @@
+       /* The following entries will be displayed in the same order we give them */
+       /* The ESSID. */
+-      iwe.u.data.length = strlen(bss->ssid);
++      iwe.u.data.length = strlen(bss->ssid + 1);
+       iwe.u.data.flags = 1;
+       iwe.cmd = SIOCGIWESSID;
+       current_ev = iwe_stream_add_point(current_ev, end_buf,
diff --git a/packages/mamona/cx3110x-770he-0.8.1/series b/packages/mamona/cx3110x-770he-0.8.1/series
new file mode 100644 (file)
index 0000000..fa690cb
--- /dev/null
@@ -0,0 +1,7 @@
+fix_mem_corruption.patch
+fix_mem_allign.patch
+cx3110x.patch
+fix_cross_makefile.patch
+fix_ssid_data_length.patch
+770_performance_improvements.patch
+create_sysfs_link_for_wlan0.patch
diff --git a/packages/mamona/cx3110x-770he_0.8.1.bb b/packages/mamona/cx3110x-770he_0.8.1.bb
new file mode 100644 (file)
index 0000000..8e78ccf
--- /dev/null
@@ -0,0 +1,30 @@
+PR = "r2"\r
+\r
+KERVER = "2.6.16"\r
+\r
+COMPATIBLE_MACHINE = "(nokia770)"\r
+\r
+S = "${WORKDIR}/cx3110x-0.8.1"\r
+SKERNEL = "${WORKDIR}/kernel-source-${KERVER}"\r
+\r
+# The following require must be after S{S}, ${SKERNEL}, ${KERVER}\r
+require cx3110x.inc\r
+\r
+SRC_URI += "https://garage.maemo.org/frs/download.php/2443/cx3110x-0.8.1.tar.gz \\r
+ http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-2005q3-2-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 \\r
+ http://dev.openbossa.org/mamona/sources/kernel-source-${KERVER}.tar.gz \\r
+ file://defconfig \\r
+ file://fix_mem_corruption.patch;patch=1 \\r
+ file://fix_mem_allign.patch;patch=1 \\r
+ file://cx3110x.patch;patch=1 \\r
+ file://fix_cross_makefile.patch;patch=1 \\r
+ file://fix_ssid_data_length.patch;patch=1 \\r
+ file://770_performance_improvements.patch;patch=1 \\r
+ file://create_sysfs_link_for_wlan0.patch;patch=1 \\r
+ file://fix_opps_while_connecting_with_nm.patch;patch=1 \\r
+"\r
+\r
+do_compile() {\r
+    cp ${WORKDIR}/defconfig ${SKERNEL}/.config\r
+    KERNEL_SRC_DIR=${SKERNEL} PATH=${WORKDIR}/bin/:$PATH CROSS_COMPILE=arm-none-eabi- make modules\r
+}\r
diff --git a/packages/mamona/cx3110x-chinooke-2.0.15/create_sysfs_link_for_wlan0.patch b/packages/mamona/cx3110x-chinooke-2.0.15/create_sysfs_link_for_wlan0.patch
new file mode 100644 (file)
index 0000000..cf4fa1e
--- /dev/null
@@ -0,0 +1,11 @@
+--- cx3110x-0.8.1.new/src/sm_drv_spi.c 2008-05-13 10:27:19.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi.c     2008-05-12 19:02:16.000000000 -0300
+@@ -1067,6 +1067,8 @@
+               goto err_out_4;
+       }
++        SET_NETDEV_DEV(dev, &wlan_omap_device.dev);
++
+       register_netdev(dev);
+       
+       /* Let's fetch the firmware from userspace */
diff --git a/packages/mamona/cx3110x-chinooke-2.0.15/cx3110x b/packages/mamona/cx3110x-chinooke-2.0.15/cx3110x
new file mode 100755 (executable)
index 0000000..ce2ecdf
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+MODULE="/lib/modules/`uname -r`/cx3110x.ko"
+
+swap_module () {
+    if [ -e $MODULE ]; then
+        # Removing builtin driver
+        rmmod cx3110x
+        # Inserting the new one
+        insmod $MODULE
+        # Setting device options (MAC, default country, etc)
+        if [ -x /mnt/initfs/usr/bin/wlan-cal ]; then
+            chroot /mnt/initfs /usr/bin/wlan-cal
+        fi
+    else
+        echo "OOPS: $MODULE not found, the switch is not possible" 1>&2
+    fi
+}
+
+case "$1" in
+    start)
+       swap_module
+       ;;
+    stop)
+       rmmod cx3110x
+       ;;
+    force-reload | restart)
+       swap_module
+       ;;
+    *)
+       echo "Usage: /etc/init.d/cx3110x {start|stop|restart|force-reload}"
+       exit 1
+       ;;
+esac
+
+exit 0
+
diff --git a/packages/mamona/cx3110x-chinooke-2.0.15/cx3110x.patch b/packages/mamona/cx3110x-chinooke-2.0.15/cx3110x.patch
new file mode 100644 (file)
index 0000000..b280815
--- /dev/null
@@ -0,0 +1,492 @@
+diff -ru cx3110x-module-src-2.0.14.orig/src/sm_drv_ioctl_umac.c cx3110x-module-src-2.0.14/src/sm_drv_ioctl_umac.c
+--- cx3110x-module-src-2.0.14.orig/src/sm_drv_ioctl_umac.c     2007-09-25 13:02:17.000000000 -0300
++++ cx3110x-module-src-2.0.14/src/sm_drv_ioctl_umac.c  2007-10-09 15:32:30.000000000 -0300
+@@ -88,8 +88,8 @@
+       kfree(wrqu.data.pointer);
+ }
+-void send_wpa_ie_event(struct net_device *dev, char * bss_addr,
+-                     char * wpa_ie, size_t wpa_ie_len, uint32_t event)
++void send_wpa_ie_event(struct net_device *dev, char * wpa_ie,
++                     size_t wpa_ie_len, uint32_t event)
+ {
+       union iwreq_data wrqu;
+       uint32_t we_event;
+@@ -111,15 +111,12 @@
+               return;
+       }
+-      wrqu.data.pointer = kzalloc(ETH_ALEN + 1 + wpa_ie_len, GFP_ATOMIC);
++      wrqu.data.pointer = kzalloc(wpa_ie_len, GFP_ATOMIC);
+       if (!wrqu.data.pointer)
+               return;
+-      memcpy(wrqu.data.pointer, bss_addr, ETH_ALEN);
+-      *((char *)(wrqu.data.pointer + ETH_ALEN)) = ':';        
+-      memcpy(wrqu.data.pointer + ETH_ALEN + 1, wpa_ie, wpa_ie_len);
+-      
+-      wrqu.data.length = ETH_ALEN + 1 + wpa_ie_len;
++      memcpy(wrqu.data.pointer, wpa_ie, wpa_ie_len);
++      wrqu.data.length = wpa_ie_len;
+       wireless_send_event(dev, we_event, &wrqu, wrqu.data.pointer);
+       kfree(wrqu.data.pointer);
+@@ -478,7 +475,7 @@
+       if ((lp->link_state == DOT11_STATE_ASSOCING
+            || lp->link_state == DOT11_STATE_ASSOC)  
+           && event)
+-              send_wpa_ie_event(dev, bssid, wpa_ie, wpa_ie_len, event);
++              send_wpa_ie_event(dev, wpa_ie, wpa_ie_len, event);
+                       
+       /* try to use existing entry */
+       list_for_each_entry_safe(bss, safe, &lp->bss_wpa_list, list) {
+@@ -1928,6 +1925,435 @@
+                             (void *)&key, sizeof(struct obj_stakey));
+ }
++static int sm_drv_set_auth(struct net_device *dev,
++                         struct iw_request_info *info,
++                         union iwreq_data *wrqu, char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_param *param = &wrqu->param;
++      u32 authen = 0, dot1x = 0;
++      u32 exunencrypt = 0, privinvoked = 0, wpa = 0;
++      u32 old_wpa;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "SET AUTH\n");
++
++      /* first get the flags */
++      down(&priv->wpa_sem);
++      wpa = old_wpa = priv->wpa;
++      up(&priv->wpa_sem);
++      ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                           (void *)&authen, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                            (void *)&privinvoked, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                            (void *)&exunencrypt, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_DOT1XENABLE,
++                            (void *)&dot1x, sizeof(uint32_t));
++
++      if (ret < 0)
++              goto out;
++
++      switch (param->flags & IW_AUTH_INDEX) {
++      case IW_AUTH_CIPHER_PAIRWISE:
++      case IW_AUTH_CIPHER_GROUP:
++      case IW_AUTH_KEY_MGMT:
++              break;
++
++      case IW_AUTH_WPA_ENABLED:
++              /* Do the same thing as IW_AUTH_WPA_VERSION */
++              if (param->value) {
++                      wpa = DOT11_PRIV_INV_TKIP;
++                      privinvoked = 1; /* For privacy invoked */
++                      exunencrypt = 1; /* Filter out all unencrypted frames */
++                      dot1x = 0x01; /* To enable eap filter */
++                      authen = DOT11_AUTH_OS; /* Only WEP uses _SK and _BOTH */
++              } else {
++                      wpa = DOT11_PRIV_INV_NONE;
++                      privinvoked = 0;
++                      exunencrypt = 0; /* Do not filter un-encrypted data */
++                      dot1x = 0;
++              }
++              break;
++
++      case IW_AUTH_WPA_VERSION:
++              if (param->value & IW_AUTH_WPA_VERSION_DISABLED) {
++                      wpa = DOT11_PRIV_INV_NONE;
++                      privinvoked = 0;
++                      exunencrypt = 0; /* Do not filter un-encrypted data */
++                      dot1x = 0;
++              } else {
++                      if (param->value & IW_AUTH_WPA_VERSION_WPA)
++                              wpa = DOT11_PRIV_INV_TKIP;
++                      else if (param->value & IW_AUTH_WPA_VERSION_WPA2)
++                              wpa = DOT11_PRIV_INV_AES_CCMP;
++                      privinvoked = 1; /* For privacy invoked */
++                      exunencrypt = 1; /* Filter out all unencrypted frames */
++                      dot1x = 0x01; /* To enable eap filter */
++                      authen = DOT11_AUTH_OS; /* Only WEP uses _SK and _BOTH */
++              }
++              break;
++
++      case IW_AUTH_RX_UNENCRYPTED_EAPOL:
++              /* dot1x should be the opposite of RX_UNENCRYPTED_EAPOL;
++               * turn off dot1x when allowing receipt of unencrypted EAPOL
++               * frames, turn on dot1x when receipt should be disallowed
++               */
++              dot1x = param->value ? 0 : 0x01;
++              break;
++
++      case IW_AUTH_PRIVACY_INVOKED:
++              privinvoked = param->value ? 1 : 0;
++              break;
++
++      case IW_AUTH_DROP_UNENCRYPTED:
++              exunencrypt = param->value ? 1 : 0;
++              break;
++
++      case IW_AUTH_80211_AUTH_ALG:
++              if (param->value & IW_AUTH_ALG_SHARED_KEY) {
++                      /* Only WEP uses _SK and _BOTH */
++                      if (wpa > 0) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
++                      authen = DOT11_AUTH_SK;
++              } else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) {
++                      authen = DOT11_AUTH_OS;
++              } else {
++                      ret = -EINVAL;
++                      goto out;
++              }
++              break;
++
++      default:
++              return -EOPNOTSUPP;
++      }
++
++      /* Set all the values */
++      down(&priv->wpa_sem);
++      priv->wpa = wpa;
++      up(&priv->wpa_sem);
++
++      sm_drv_oid_set(dev, DOT11_OID_AUTHENABLE,
++                     (void *)&authen, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_PRIVACYINVOKED,
++                     (void *)&privinvoked, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_EXUNENCRYPTED,
++                     (void *)&exunencrypt, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_DOT1XENABLE,
++                     (void *)&dot1x, sizeof(uint32_t));
++
++ out:
++      return ret;
++}
++
++static int sm_drv_get_auth(struct net_device *dev,
++                         struct iw_request_info *info,
++                         union iwreq_data *wrqu, char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_param *param = &wrqu->param;
++      u32 authen = 0, dot1x = 0;
++      u32 exunencrypt = 0, privinvoked = 0, wpa = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "GET AUTH\n");
++
++      /* first get the flags */
++      down(&priv->wpa_sem);
++      wpa = priv->wpa;
++      up(&priv->wpa_sem);
++
++      switch (param->flags & IW_AUTH_INDEX) {
++      case IW_AUTH_CIPHER_PAIRWISE:
++      case IW_AUTH_CIPHER_GROUP:
++      case IW_AUTH_KEY_MGMT:
++              /*
++               * wpa_supplicant will control these internally
++               */
++              ret = -EOPNOTSUPP;
++              break;
++
++      case IW_AUTH_WPA_VERSION:
++              switch (wpa) {
++              case DOT11_PRIV_INV_TKIP:
++                      param->value = IW_AUTH_WPA_VERSION_WPA;
++                      break;
++              case DOT11_PRIV_INV_AES_CCMP:
++                      param->value = IW_AUTH_WPA_VERSION_WPA2;
++                      break;
++              default:
++                      param->value = IW_AUTH_WPA_VERSION_DISABLED;
++                      break;
++              }
++              break;
++
++      case IW_AUTH_DROP_UNENCRYPTED:
++              ret = sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                                   (void *)&exunencrypt, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = exunencrypt > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_80211_AUTH_ALG:
++              ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                                   (void *)&authen, sizeof(uint32_t));
++              if (ret >= 0) {
++                      switch (authen) {
++                      case DOT11_AUTH_OS:
++                              param->value = IW_AUTH_ALG_OPEN_SYSTEM;
++                              break;
++                      case DOT11_AUTH_BOTH:
++                      case DOT11_AUTH_SK:
++                              param->value = IW_AUTH_ALG_SHARED_KEY;
++                      case DOT11_AUTH_NONE:
++                      default:
++                              param->value = 0;
++                              break;
++                      }
++              }
++              break;
++
++      case IW_AUTH_WPA_ENABLED:
++              param->value = wpa > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_RX_UNENCRYPTED_EAPOL:
++              ret = sm_drv_oid_get(dev, DOT11_OID_DOT1XENABLE,
++                                   (void *)&dot1x, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = dot1x > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_PRIVACY_INVOKED:
++              ret = sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                                   (void *)&privinvoked, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = privinvoked > 0 ? 1 : 0;
++              break;
++
++      default:
++              return -EOPNOTSUPP;
++      }
++      return ret;
++}
++
++#define KEY_SIZE_WEP104 13    /* 104/128-bit WEP keys */
++#define KEY_SIZE_WEP40  5     /* 40/64-bit WEP keys */
++#define KEY_SIZE_TKIP   32    /* TKIP keys */
++
++static int sm_drv_set_encodeext(struct net_device *dev,
++                              struct iw_request_info *info,
++                              union iwreq_data *wrqu,
++                              char *extra)
++{
++      struct iw_point *encoding = &wrqu->encoding;
++      struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
++      int idx, alg = ext->alg, set_key = 1;
++      int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "SET ENCODEEXT\n");
++
++      /* Determine and validate the key index */
++      idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
++      if (idx) {
++              if (idx < 0 || idx > 3)
++                      return -EINVAL;
++      } else {
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              if (ret < 0)
++                      goto out;
++      }
++
++      if (encoding->flags & IW_ENCODE_DISABLED)
++              alg = IW_ENCODE_ALG_NONE;
++
++      if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
++              /* Only set transmit key index here, actual
++               * key is set below if needed.
++               */
++              ret = sm_drv_oid_set(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              set_key = ext->key_len > 0 ? 1 : 0;
++      }
++
++      if (set_key) {
++              switch (alg) {
++              case IW_ENCODE_ALG_NONE:
++                      break;
++              case IW_ENCODE_ALG_WEP: {
++                      struct obj_key key = { DOT11_PRIV_WEP, 0, "" };
++                      memset(key.key, 0, sizeof(key.key));
++                      if (ext->key_len > KEY_SIZE_WEP104) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
++                      if (ext->key_len > KEY_SIZE_WEP40)
++                              key.length = KEY_SIZE_WEP104;
++                      else
++                              key.length = KEY_SIZE_WEP40;
++                      memcpy(key.key, ext->key, ext->key_len);
++                      ret = sm_drv_oid_set(dev, DOT11_OID_DEFKEYID + idx + 1,
++                                           (void *)&key,
++                                           sizeof(struct obj_key));
++                      break;
++              }
++              case IW_ENCODE_ALG_TKIP:
++              case IW_ENCODE_ALG_CCMP: {
++                      struct obj_stakey key;
++                      memset(key.key, 0, sizeof(key.key));
++                      if (alg == IW_ENCODE_ALG_TKIP)
++                              key.type = DOT11_PRIV_TKIP;
++                      else
++                              key.type = DOT11_PRIV_AES_CCMP;
++                      memcpy(key.address, ext->addr.sa_data, ETH_ALEN);
++                      key.length = ext->key_len;
++                      key.keyid = idx;
++                      key.ext = 0;
++                      memcpy(key.key, ext->key, ext->key_len);
++                      ret = sm_drv_oid_set(dev, DOT11_OID_STAKEY,
++                                           (void *)&key,
++                                           sizeof(struct obj_stakey));
++                      break;
++              }
++              default:
++                      return -EINVAL;
++              }
++
++              if (ret < 0)
++                      goto out;
++
++      }
++
++      /* Read the flags */
++      if (encoding->flags & IW_ENCODE_DISABLED) {
++              /* Encoding disabled,
++               * authen = DOT11_AUTH_OS;
++               * invoke = 0;
++               * exunencrypt = 0; */
++      }
++      if (encoding->flags & IW_ENCODE_OPEN) {
++              /* Encode but accept non-encoded packets. No auth */
++              invoke = 1;
++      }
++      if (encoding->flags & IW_ENCODE_RESTRICTED) {
++              /* Refuse non-encoded packets. Auth */
++              authen = DOT11_AUTH_BOTH;
++              invoke = 1;
++              exunencrypt = 1;
++      }
++
++      /* do the change if requested  */
++      if (encoding->flags & IW_ENCODE_MODE) {
++              sm_drv_oid_set(dev, DOT11_OID_AUTHENABLE,
++                             (void *)&authen, sizeof(uint32_t));
++              sm_drv_oid_set(dev, DOT11_OID_PRIVACYINVOKED,
++                             (void *)&invoke, sizeof(uint32_t));
++              sm_drv_oid_set(dev, DOT11_OID_EXUNENCRYPTED,
++                             (void *)&exunencrypt, sizeof(uint32_t));
++      }
++
++ out:
++      return ret;
++}
++
++
++static int sm_drv_get_encodeext(struct net_device *dev,
++                              struct iw_request_info *info,
++                              union iwreq_data *wrqu,
++                              char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_point *encoding = &wrqu->encoding;
++      struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
++      int idx, max_key_len;
++      int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0, wpa = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "GET ENCODEEXT\n");
++
++      /* first get the flags */
++      ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                           (void *)&authen, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                            (void *)&invoke, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                            (void *)&exunencrypt, sizeof(uint32_t));
++      if (ret < 0)
++              goto out;
++
++      max_key_len = encoding->length - sizeof(*ext);
++      if (max_key_len < 0)
++              return -EINVAL;
++
++      idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
++      if (idx) {
++              if (idx < 0 || idx > 3)
++                      return -EINVAL;
++      } else {
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              if (ret < 0)
++                      goto out;
++      }
++
++      encoding->flags = idx + 1;
++      memset(ext, 0, sizeof(*ext));
++
++      switch (authen) {
++      case DOT11_AUTH_BOTH:
++      case DOT11_AUTH_SK:
++              wrqu->encoding.flags |= IW_ENCODE_RESTRICTED;
++      case DOT11_AUTH_OS:
++      default:
++              wrqu->encoding.flags |= IW_ENCODE_OPEN;
++              break;
++      }
++
++      down(&priv->wpa_sem);
++      wpa = priv->wpa;
++      up(&priv->wpa_sem);
++
++      if (authen == DOT11_AUTH_OS && !exunencrypt && !invoke && !wpa) {
++              /* No encryption */
++              ext->alg = IW_ENCODE_ALG_NONE;
++              ext->key_len = 0;
++              wrqu->encoding.flags |= IW_ENCODE_DISABLED;
++      } else {
++              struct obj_key *key;
++
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID + idx + 1,
++                                   (void *)&key, sizeof(struct obj_key));
++              if (ret < 0)
++                      goto out;
++              if (max_key_len < key->length) {
++                      ret = -E2BIG;
++                      goto out;
++              }
++              memcpy(ext->key, key->key, key->length);
++              ext->key_len = key->length;
++
++              switch (key->type) {
++              case DOT11_PRIV_TKIP:
++                      ext->alg = IW_ENCODE_ALG_TKIP;
++                      break;
++              case DOT11_PRIV_AES_CCMP:
++                      ext->alg = IW_ENCODE_ALG_CCMP;
++                      break;
++              default:
++              case DOT11_PRIV_WEP:
++                      ext->alg = IW_ENCODE_ALG_WEP;
++                      break;
++              }
++              wrqu->encoding.flags |= IW_ENCODE_ENABLED;
++      }
++
++ out:
++      return ret;
++}
+ /* Private handlers */
+@@ -2473,10 +2899,10 @@
+       (iw_handler) NULL,                      /* -- hole -- */
+       (iw_handler) sm_drv_set_genie,          /* SIOCSIWGENIE*/
+       (iw_handler) NULL,                      /* SIOCGIWGENIE */
+-      (iw_handler) NULL,                      /* SIOCSIWAUTH */
+-      (iw_handler) NULL,                      /* SIOCGIWAUTH */
+-      (iw_handler) NULL,                      /* SIOCSIWENCODEEXT */
+-      (iw_handler) NULL,                      /* SIOCGIWENCODEEXT */
++      (iw_handler) sm_drv_set_auth,           /* SIOCSIWAUTH */
++      (iw_handler) sm_drv_get_auth,           /* SIOCGIWAUTH */
++      (iw_handler) sm_drv_set_encodeext,      /* SIOCSIWENCODEEXT */
++      (iw_handler) sm_drv_get_encodeext,      /* SIOCGIWENCODEEXT */
+       (iw_handler) sm_drv_set_pmk,            /* SIOCSIWPMKSA */
+ };
diff --git a/packages/mamona/cx3110x-chinooke-2.0.15/fix_old_include.patch b/packages/mamona/cx3110x-chinooke-2.0.15/fix_old_include.patch
new file mode 100644 (file)
index 0000000..61549fd
--- /dev/null
@@ -0,0 +1,13 @@
+Index: cx3110x-module-src-2.0.15/src/sm_drv_spi.c
+===================================================================
+--- cx3110x-module-src-2.0.15.orig/src/sm_drv_spi.c    2008-08-06 19:55:37.000000000 -0300
++++ cx3110x-module-src-2.0.15/src/sm_drv_spi.c 2008-08-06 19:56:05.000000000 -0300
+@@ -36,7 +36,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/string.h>
+ #include <linux/firmware.h>
+-#include <linux/config.h>
++#include <linux/autoconf.h>
+ #if !defined(CONFIG_FW_LOADER) && !defined(CONFIG_FW_LOADER_MODULE)
+ #error No Firmware Loading configured in the kernel !
+ #endif
diff --git a/packages/mamona/cx3110x-chinooke_2.0.15.bb b/packages/mamona/cx3110x-chinooke_2.0.15.bb
new file mode 100644 (file)
index 0000000..50de746
--- /dev/null
@@ -0,0 +1,31 @@
+PR = "r1"\r
+\r
+KERVER = "2.6.21"\r
+\r
+COMPATIBLE_MACHINE = "(nokia800|nokia810)"\r
+\r
+S = "${WORKDIR}/cx3110x-module-src-2.0.15"\r
+SKERNEL = "${WORKDIR}/kernel-source-rx-34-2.6.21.0"\r
+\r
+# The following require must be after S{S}, ${SKERNEL}, ${KERVER}\r
+require cx3110x.inc\r
+\r
+SRC_URI += "\\r
+ http://repository.maemo.org/pool/maemo4.1/free/c/cx3110x-module-src/cx3110x-module-src_2.0.15-1.tar.gz \\r
+ http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-2005q3-2-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 \\r
+ http://repository.maemo.org/pool/chinook/free/k/kernel-source-rx-34/kernel-source-rx-34_2.6.21.0.orig.tar.gz \\r
+ http://repository.maemo.org/pool/chinook/free/k/kernel-source-rx-34/kernel-source-rx-34_2.6.21.0-osso71.diff.gz \\r
+ file://cx3110x.patch;patch=1 \\r
+ file://create_sysfs_link_for_wlan0.patch;patch=1 \\r
+ file://fix_old_include.patch;patch=1 \\r
+"\r
+\r
+do_compile() {\r
+    cd ${SKERNEL}\r
+    patch -p1 < ${WORKDIR}/kernel-source-rx-34_2.6.21.0-osso71.diff\r
+    cd ${S}\r
+    PATH=${WORKDIR}/bin/:$PATH make -C ${SKERNEL} CROSS_COMPILE=arm-none-eabi- nokia_2420_defconfig prepare scripts\r
+    KERNEL_SRC_DIR=${SKERNEL} PATH=${WORKDIR}/bin/:$PATH CROSS_COMPILE=arm-none-eabi- make modules\r
+}\r
+\r
+\r
diff --git a/packages/mamona/cx3110x-diablo-2.0.15/create_sysfs_link_for_wlan0.patch b/packages/mamona/cx3110x-diablo-2.0.15/create_sysfs_link_for_wlan0.patch
new file mode 100644 (file)
index 0000000..cf4fa1e
--- /dev/null
@@ -0,0 +1,11 @@
+--- cx3110x-0.8.1.new/src/sm_drv_spi.c 2008-05-13 10:27:19.000000000 -0300
++++ cx3110x-0.8.1/src/sm_drv_spi.c     2008-05-12 19:02:16.000000000 -0300
+@@ -1067,6 +1067,8 @@
+               goto err_out_4;
+       }
++        SET_NETDEV_DEV(dev, &wlan_omap_device.dev);
++
+       register_netdev(dev);
+       
+       /* Let's fetch the firmware from userspace */
diff --git a/packages/mamona/cx3110x-diablo-2.0.15/cx3110x b/packages/mamona/cx3110x-diablo-2.0.15/cx3110x
new file mode 100755 (executable)
index 0000000..592c703
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+MODULE="/lib/modules/`uname -r`/cx3110x.ko"
+
+swap_module () {
+    if [ -e $MODULE ]; then
+        # Removing builtin driver
+        rmmod cx3110x
+        # Inserting the new one
+        insmod $MODULE
+        # Setting device options (MAC, default country, etc)
+        if [ -x /mnt/initfs/usr/bin/wlan-cal ]; then
+            chroot /mnt/initfs /usr/bin/wlan-cal
+        fi
+        # Getting up the interface to make the firmware being loaded (stupid, i know)
+        ifconfig wlan0 up
+    else
+        echo "OOPS: $MODULE not found, the switch is not possible" 1>&2
+    fi
+}
+
+case "$1" in
+    start)
+       swap_module
+       ;;
+    stop)
+       ifconfig $IFACE down
+       rmmod cx3110x
+       ;;
+    force-reload | restart)
+       swap_module
+       ;;
+    *)
+       echo "Usage: /etc/init.d/cx3110x {start|stop|restart|force-reload}"
+       exit 1
+       ;;
+esac
+
+exit 0
+
diff --git a/packages/mamona/cx3110x-diablo-2.0.15/cx3110x.patch b/packages/mamona/cx3110x-diablo-2.0.15/cx3110x.patch
new file mode 100644 (file)
index 0000000..b280815
--- /dev/null
@@ -0,0 +1,492 @@
+diff -ru cx3110x-module-src-2.0.14.orig/src/sm_drv_ioctl_umac.c cx3110x-module-src-2.0.14/src/sm_drv_ioctl_umac.c
+--- cx3110x-module-src-2.0.14.orig/src/sm_drv_ioctl_umac.c     2007-09-25 13:02:17.000000000 -0300
++++ cx3110x-module-src-2.0.14/src/sm_drv_ioctl_umac.c  2007-10-09 15:32:30.000000000 -0300
+@@ -88,8 +88,8 @@
+       kfree(wrqu.data.pointer);
+ }
+-void send_wpa_ie_event(struct net_device *dev, char * bss_addr,
+-                     char * wpa_ie, size_t wpa_ie_len, uint32_t event)
++void send_wpa_ie_event(struct net_device *dev, char * wpa_ie,
++                     size_t wpa_ie_len, uint32_t event)
+ {
+       union iwreq_data wrqu;
+       uint32_t we_event;
+@@ -111,15 +111,12 @@
+               return;
+       }
+-      wrqu.data.pointer = kzalloc(ETH_ALEN + 1 + wpa_ie_len, GFP_ATOMIC);
++      wrqu.data.pointer = kzalloc(wpa_ie_len, GFP_ATOMIC);
+       if (!wrqu.data.pointer)
+               return;
+-      memcpy(wrqu.data.pointer, bss_addr, ETH_ALEN);
+-      *((char *)(wrqu.data.pointer + ETH_ALEN)) = ':';        
+-      memcpy(wrqu.data.pointer + ETH_ALEN + 1, wpa_ie, wpa_ie_len);
+-      
+-      wrqu.data.length = ETH_ALEN + 1 + wpa_ie_len;
++      memcpy(wrqu.data.pointer, wpa_ie, wpa_ie_len);
++      wrqu.data.length = wpa_ie_len;
+       wireless_send_event(dev, we_event, &wrqu, wrqu.data.pointer);
+       kfree(wrqu.data.pointer);
+@@ -478,7 +475,7 @@
+       if ((lp->link_state == DOT11_STATE_ASSOCING
+            || lp->link_state == DOT11_STATE_ASSOC)  
+           && event)
+-              send_wpa_ie_event(dev, bssid, wpa_ie, wpa_ie_len, event);
++              send_wpa_ie_event(dev, wpa_ie, wpa_ie_len, event);
+                       
+       /* try to use existing entry */
+       list_for_each_entry_safe(bss, safe, &lp->bss_wpa_list, list) {
+@@ -1928,6 +1925,435 @@
+                             (void *)&key, sizeof(struct obj_stakey));
+ }
++static int sm_drv_set_auth(struct net_device *dev,
++                         struct iw_request_info *info,
++                         union iwreq_data *wrqu, char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_param *param = &wrqu->param;
++      u32 authen = 0, dot1x = 0;
++      u32 exunencrypt = 0, privinvoked = 0, wpa = 0;
++      u32 old_wpa;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "SET AUTH\n");
++
++      /* first get the flags */
++      down(&priv->wpa_sem);
++      wpa = old_wpa = priv->wpa;
++      up(&priv->wpa_sem);
++      ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                           (void *)&authen, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                            (void *)&privinvoked, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                            (void *)&exunencrypt, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_DOT1XENABLE,
++                            (void *)&dot1x, sizeof(uint32_t));
++
++      if (ret < 0)
++              goto out;
++
++      switch (param->flags & IW_AUTH_INDEX) {
++      case IW_AUTH_CIPHER_PAIRWISE:
++      case IW_AUTH_CIPHER_GROUP:
++      case IW_AUTH_KEY_MGMT:
++              break;
++
++      case IW_AUTH_WPA_ENABLED:
++              /* Do the same thing as IW_AUTH_WPA_VERSION */
++              if (param->value) {
++                      wpa = DOT11_PRIV_INV_TKIP;
++                      privinvoked = 1; /* For privacy invoked */
++                      exunencrypt = 1; /* Filter out all unencrypted frames */
++                      dot1x = 0x01; /* To enable eap filter */
++                      authen = DOT11_AUTH_OS; /* Only WEP uses _SK and _BOTH */
++              } else {
++                      wpa = DOT11_PRIV_INV_NONE;
++                      privinvoked = 0;
++                      exunencrypt = 0; /* Do not filter un-encrypted data */
++                      dot1x = 0;
++              }
++              break;
++
++      case IW_AUTH_WPA_VERSION:
++              if (param->value & IW_AUTH_WPA_VERSION_DISABLED) {
++                      wpa = DOT11_PRIV_INV_NONE;
++                      privinvoked = 0;
++                      exunencrypt = 0; /* Do not filter un-encrypted data */
++                      dot1x = 0;
++              } else {
++                      if (param->value & IW_AUTH_WPA_VERSION_WPA)
++                              wpa = DOT11_PRIV_INV_TKIP;
++                      else if (param->value & IW_AUTH_WPA_VERSION_WPA2)
++                              wpa = DOT11_PRIV_INV_AES_CCMP;
++                      privinvoked = 1; /* For privacy invoked */
++                      exunencrypt = 1; /* Filter out all unencrypted frames */
++                      dot1x = 0x01; /* To enable eap filter */
++                      authen = DOT11_AUTH_OS; /* Only WEP uses _SK and _BOTH */
++              }
++              break;
++
++      case IW_AUTH_RX_UNENCRYPTED_EAPOL:
++              /* dot1x should be the opposite of RX_UNENCRYPTED_EAPOL;
++               * turn off dot1x when allowing receipt of unencrypted EAPOL
++               * frames, turn on dot1x when receipt should be disallowed
++               */
++              dot1x = param->value ? 0 : 0x01;
++              break;
++
++      case IW_AUTH_PRIVACY_INVOKED:
++              privinvoked = param->value ? 1 : 0;
++              break;
++
++      case IW_AUTH_DROP_UNENCRYPTED:
++              exunencrypt = param->value ? 1 : 0;
++              break;
++
++      case IW_AUTH_80211_AUTH_ALG:
++              if (param->value & IW_AUTH_ALG_SHARED_KEY) {
++                      /* Only WEP uses _SK and _BOTH */
++                      if (wpa > 0) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
++                      authen = DOT11_AUTH_SK;
++              } else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) {
++                      authen = DOT11_AUTH_OS;
++              } else {
++                      ret = -EINVAL;
++                      goto out;
++              }
++              break;
++
++      default:
++              return -EOPNOTSUPP;
++      }
++
++      /* Set all the values */
++      down(&priv->wpa_sem);
++      priv->wpa = wpa;
++      up(&priv->wpa_sem);
++
++      sm_drv_oid_set(dev, DOT11_OID_AUTHENABLE,
++                     (void *)&authen, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_PRIVACYINVOKED,
++                     (void *)&privinvoked, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_EXUNENCRYPTED,
++                     (void *)&exunencrypt, sizeof(uint32_t));
++      sm_drv_oid_set(dev, DOT11_OID_DOT1XENABLE,
++                     (void *)&dot1x, sizeof(uint32_t));
++
++ out:
++      return ret;
++}
++
++static int sm_drv_get_auth(struct net_device *dev,
++                         struct iw_request_info *info,
++                         union iwreq_data *wrqu, char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_param *param = &wrqu->param;
++      u32 authen = 0, dot1x = 0;
++      u32 exunencrypt = 0, privinvoked = 0, wpa = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "GET AUTH\n");
++
++      /* first get the flags */
++      down(&priv->wpa_sem);
++      wpa = priv->wpa;
++      up(&priv->wpa_sem);
++
++      switch (param->flags & IW_AUTH_INDEX) {
++      case IW_AUTH_CIPHER_PAIRWISE:
++      case IW_AUTH_CIPHER_GROUP:
++      case IW_AUTH_KEY_MGMT:
++              /*
++               * wpa_supplicant will control these internally
++               */
++              ret = -EOPNOTSUPP;
++              break;
++
++      case IW_AUTH_WPA_VERSION:
++              switch (wpa) {
++              case DOT11_PRIV_INV_TKIP:
++                      param->value = IW_AUTH_WPA_VERSION_WPA;
++                      break;
++              case DOT11_PRIV_INV_AES_CCMP:
++                      param->value = IW_AUTH_WPA_VERSION_WPA2;
++                      break;
++              default:
++                      param->value = IW_AUTH_WPA_VERSION_DISABLED;
++                      break;
++              }
++              break;
++
++      case IW_AUTH_DROP_UNENCRYPTED:
++              ret = sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                                   (void *)&exunencrypt, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = exunencrypt > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_80211_AUTH_ALG:
++              ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                                   (void *)&authen, sizeof(uint32_t));
++              if (ret >= 0) {
++                      switch (authen) {
++                      case DOT11_AUTH_OS:
++                              param->value = IW_AUTH_ALG_OPEN_SYSTEM;
++                              break;
++                      case DOT11_AUTH_BOTH:
++                      case DOT11_AUTH_SK:
++                              param->value = IW_AUTH_ALG_SHARED_KEY;
++                      case DOT11_AUTH_NONE:
++                      default:
++                              param->value = 0;
++                              break;
++                      }
++              }
++              break;
++
++      case IW_AUTH_WPA_ENABLED:
++              param->value = wpa > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_RX_UNENCRYPTED_EAPOL:
++              ret = sm_drv_oid_get(dev, DOT11_OID_DOT1XENABLE,
++                                   (void *)&dot1x, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = dot1x > 0 ? 1 : 0;
++              break;
++
++      case IW_AUTH_PRIVACY_INVOKED:
++              ret = sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                                   (void *)&privinvoked, sizeof(uint32_t));
++              if (ret >= 0)
++                      param->value = privinvoked > 0 ? 1 : 0;
++              break;
++
++      default:
++              return -EOPNOTSUPP;
++      }
++      return ret;
++}
++
++#define KEY_SIZE_WEP104 13    /* 104/128-bit WEP keys */
++#define KEY_SIZE_WEP40  5     /* 40/64-bit WEP keys */
++#define KEY_SIZE_TKIP   32    /* TKIP keys */
++
++static int sm_drv_set_encodeext(struct net_device *dev,
++                              struct iw_request_info *info,
++                              union iwreq_data *wrqu,
++                              char *extra)
++{
++      struct iw_point *encoding = &wrqu->encoding;
++      struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
++      int idx, alg = ext->alg, set_key = 1;
++      int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "SET ENCODEEXT\n");
++
++      /* Determine and validate the key index */
++      idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
++      if (idx) {
++              if (idx < 0 || idx > 3)
++                      return -EINVAL;
++      } else {
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              if (ret < 0)
++                      goto out;
++      }
++
++      if (encoding->flags & IW_ENCODE_DISABLED)
++              alg = IW_ENCODE_ALG_NONE;
++
++      if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
++              /* Only set transmit key index here, actual
++               * key is set below if needed.
++               */
++              ret = sm_drv_oid_set(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              set_key = ext->key_len > 0 ? 1 : 0;
++      }
++
++      if (set_key) {
++              switch (alg) {
++              case IW_ENCODE_ALG_NONE:
++                      break;
++              case IW_ENCODE_ALG_WEP: {
++                      struct obj_key key = { DOT11_PRIV_WEP, 0, "" };
++                      memset(key.key, 0, sizeof(key.key));
++                      if (ext->key_len > KEY_SIZE_WEP104) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
++                      if (ext->key_len > KEY_SIZE_WEP40)
++                              key.length = KEY_SIZE_WEP104;
++                      else
++                              key.length = KEY_SIZE_WEP40;
++                      memcpy(key.key, ext->key, ext->key_len);
++                      ret = sm_drv_oid_set(dev, DOT11_OID_DEFKEYID + idx + 1,
++                                           (void *)&key,
++                                           sizeof(struct obj_key));
++                      break;
++              }
++              case IW_ENCODE_ALG_TKIP:
++              case IW_ENCODE_ALG_CCMP: {
++                      struct obj_stakey key;
++                      memset(key.key, 0, sizeof(key.key));
++                      if (alg == IW_ENCODE_ALG_TKIP)
++                              key.type = DOT11_PRIV_TKIP;
++                      else
++                              key.type = DOT11_PRIV_AES_CCMP;
++                      memcpy(key.address, ext->addr.sa_data, ETH_ALEN);
++                      key.length = ext->key_len;
++                      key.keyid = idx;
++                      key.ext = 0;
++                      memcpy(key.key, ext->key, ext->key_len);
++                      ret = sm_drv_oid_set(dev, DOT11_OID_STAKEY,
++                                           (void *)&key,
++                                           sizeof(struct obj_stakey));
++                      break;
++              }
++              default:
++                      return -EINVAL;
++              }
++
++              if (ret < 0)
++                      goto out;
++
++      }
++
++      /* Read the flags */
++      if (encoding->flags & IW_ENCODE_DISABLED) {
++              /* Encoding disabled,
++               * authen = DOT11_AUTH_OS;
++               * invoke = 0;
++               * exunencrypt = 0; */
++      }
++      if (encoding->flags & IW_ENCODE_OPEN) {
++              /* Encode but accept non-encoded packets. No auth */
++              invoke = 1;
++      }
++      if (encoding->flags & IW_ENCODE_RESTRICTED) {
++              /* Refuse non-encoded packets. Auth */
++              authen = DOT11_AUTH_BOTH;
++              invoke = 1;
++              exunencrypt = 1;
++      }
++
++      /* do the change if requested  */
++      if (encoding->flags & IW_ENCODE_MODE) {
++              sm_drv_oid_set(dev, DOT11_OID_AUTHENABLE,
++                             (void *)&authen, sizeof(uint32_t));
++              sm_drv_oid_set(dev, DOT11_OID_PRIVACYINVOKED,
++                             (void *)&invoke, sizeof(uint32_t));
++              sm_drv_oid_set(dev, DOT11_OID_EXUNENCRYPTED,
++                             (void *)&exunencrypt, sizeof(uint32_t));
++      }
++
++ out:
++      return ret;
++}
++
++
++static int sm_drv_get_encodeext(struct net_device *dev,
++                              struct iw_request_info *info,
++                              union iwreq_data *wrqu,
++                              char *extra)
++{
++      struct net_local *priv = netdev_priv(dev);
++      struct iw_point *encoding = &wrqu->encoding;
++      struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
++      int idx, max_key_len;
++      int authen = DOT11_AUTH_OS, invoke = 0, exunencrypt = 0, wpa = 0;
++      int ret = 0;
++
++      DEBUG(DBG_IOCTL, "GET ENCODEEXT\n");
++
++      /* first get the flags */
++      ret = sm_drv_oid_get(dev, DOT11_OID_AUTHENABLE,
++                           (void *)&authen, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_PRIVACYINVOKED,
++                            (void *)&invoke, sizeof(uint32_t));
++      ret |= sm_drv_oid_get(dev, DOT11_OID_EXUNENCRYPTED,
++                            (void *)&exunencrypt, sizeof(uint32_t));
++      if (ret < 0)
++              goto out;
++
++      max_key_len = encoding->length - sizeof(*ext);
++      if (max_key_len < 0)
++              return -EINVAL;
++
++      idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
++      if (idx) {
++              if (idx < 0 || idx > 3)
++                      return -EINVAL;
++      } else {
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID,
++                                   (void *)&idx, sizeof(uint32_t));
++              if (ret < 0)
++                      goto out;
++      }
++
++      encoding->flags = idx + 1;
++      memset(ext, 0, sizeof(*ext));
++
++      switch (authen) {
++      case DOT11_AUTH_BOTH:
++      case DOT11_AUTH_SK:
++              wrqu->encoding.flags |= IW_ENCODE_RESTRICTED;
++      case DOT11_AUTH_OS:
++      default:
++              wrqu->encoding.flags |= IW_ENCODE_OPEN;
++              break;
++      }
++
++      down(&priv->wpa_sem);
++      wpa = priv->wpa;
++      up(&priv->wpa_sem);
++
++      if (authen == DOT11_AUTH_OS && !exunencrypt && !invoke && !wpa) {
++              /* No encryption */
++              ext->alg = IW_ENCODE_ALG_NONE;
++              ext->key_len = 0;
++              wrqu->encoding.flags |= IW_ENCODE_DISABLED;
++      } else {
++              struct obj_key *key;
++
++              ret = sm_drv_oid_get(dev, DOT11_OID_DEFKEYID + idx + 1,
++                                   (void *)&key, sizeof(struct obj_key));
++              if (ret < 0)
++                      goto out;
++              if (max_key_len < key->length) {
++                      ret = -E2BIG;
++                      goto out;
++              }
++              memcpy(ext->key, key->key, key->length);
++              ext->key_len = key->length;
++
++              switch (key->type) {
++              case DOT11_PRIV_TKIP:
++                      ext->alg = IW_ENCODE_ALG_TKIP;
++                      break;
++              case DOT11_PRIV_AES_CCMP:
++                      ext->alg = IW_ENCODE_ALG_CCMP;
++                      break;
++              default:
++              case DOT11_PRIV_WEP:
++                      ext->alg = IW_ENCODE_ALG_WEP;
++                      break;
++              }
++              wrqu->encoding.flags |= IW_ENCODE_ENABLED;
++      }
++
++ out:
++      return ret;
++}
+ /* Private handlers */
+@@ -2473,10 +2899,10 @@
+       (iw_handler) NULL,                      /* -- hole -- */
+       (iw_handler) sm_drv_set_genie,          /* SIOCSIWGENIE*/
+       (iw_handler) NULL,                      /* SIOCGIWGENIE */
+-      (iw_handler) NULL,                      /* SIOCSIWAUTH */
+-      (iw_handler) NULL,                      /* SIOCGIWAUTH */
+-      (iw_handler) NULL,                      /* SIOCSIWENCODEEXT */
+-      (iw_handler) NULL,                      /* SIOCGIWENCODEEXT */
++      (iw_handler) sm_drv_set_auth,           /* SIOCSIWAUTH */
++      (iw_handler) sm_drv_get_auth,           /* SIOCGIWAUTH */
++      (iw_handler) sm_drv_set_encodeext,      /* SIOCSIWENCODEEXT */
++      (iw_handler) sm_drv_get_encodeext,      /* SIOCGIWENCODEEXT */
+       (iw_handler) sm_drv_set_pmk,            /* SIOCSIWPMKSA */
+ };
diff --git a/packages/mamona/cx3110x-diablo-2.0.15/fix_old_include.patch b/packages/mamona/cx3110x-diablo-2.0.15/fix_old_include.patch
new file mode 100644 (file)
index 0000000..61549fd
--- /dev/null
@@ -0,0 +1,13 @@
+Index: cx3110x-module-src-2.0.15/src/sm_drv_spi.c
+===================================================================
+--- cx3110x-module-src-2.0.15.orig/src/sm_drv_spi.c    2008-08-06 19:55:37.000000000 -0300
++++ cx3110x-module-src-2.0.15/src/sm_drv_spi.c 2008-08-06 19:56:05.000000000 -0300
+@@ -36,7 +36,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/string.h>
+ #include <linux/firmware.h>
+-#include <linux/config.h>
++#include <linux/autoconf.h>
+ #if !defined(CONFIG_FW_LOADER) && !defined(CONFIG_FW_LOADER_MODULE)
+ #error No Firmware Loading configured in the kernel !
+ #endif
diff --git a/packages/mamona/cx3110x-diablo_2.0.15.bb b/packages/mamona/cx3110x-diablo_2.0.15.bb
new file mode 100644 (file)
index 0000000..17bb1f4
--- /dev/null
@@ -0,0 +1,25 @@
+PR = "r0"\r
+\r
+KERVER = "2.6.21"\r
+\r
+COMPATIBLE_MACHINE = "(nokia800|nokia810)"\r
+\r
+S = "${WORKDIR}/cx3110x-module-src-2.0.15"\r
+SKERNEL = "${WORKDIR}/kernel-source-diablo-${KERVER}/kernel-source"\r
+\r
+# The following require must be after S{S}, ${SKERNEL}, ${KERVER}\r
+require cx3110x.inc\r
+\r
+SRC_URI += "\\r
+ http://repository.maemo.org/pool/maemo4.1/free/c/cx3110x-module-src/cx3110x-module-src_2.0.15-1.tar.gz \\r
+ http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-2005q3-2-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 \\r
+ http://repository.maemo.org/pool/maemo4.1/free/k/kernel-source-diablo/kernel-source-diablo_2.6.21-200823maemo6.tar.gz \\r
+ file://cx3110x.patch;patch=1 \\r
+ file://create_sysfs_link_for_wlan0.patch;patch=1 \\r
+ file://fix_old_include.patch;patch=1 \\r
+"\r
+\r
+do_compile() {\r
+    PATH=${WORKDIR}/bin/:$PATH make -C ${SKERNEL} CROSS_COMPILE=arm-none-eabi- nokia_2420_defconfig prepare scripts\r
+    KERNEL_SRC_DIR=${SKERNEL} PATH=${WORKDIR}/bin/:$PATH CROSS_COMPILE=arm-none-eabi- make modules\r
+}\r
diff --git a/packages/mamona/cx3110x.inc b/packages/mamona/cx3110x.inc
new file mode 100644 (file)
index 0000000..0dea679
--- /dev/null
@@ -0,0 +1,29 @@
+DESCRIPTION = "cx3110x wifi support to Nokia IT"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+
+INITSCRIPT_NAME = "cx3110x"
+INITSCRIPT_PARAMS = "defaults 10"
+SRC_URI += "file://cx3110x"
+inherit update-rc.d
+
+PACKAGES = "${PN}"
+
+FILES_${PN} += "/lib/modules"
+
+LDFLAGS=""
+BUILD_LDFLAGS=""
+CFLAGS=""
+BUILD_CFLAGS=""
+TARGET_LDFLAGS=""
+
+do_configure() {
+}
+
+do_install() {
+    UNAME_R=`grep "Linux kernel version:" ${SKERNEL}/.config | sed 's/.*: //'`
+    install -d ${D}/lib/modules/${UNAME_R}
+    install -m 0644 ${S}/src/cx3110x.ko ${D}/lib/modules/${UNAME_R}
+    install -d ${D}/${sysconfdir}/init.d
+    install -m 755 ${WORKDIR}/${INITSCRIPT_NAME} ${D}/${sysconfdir}/init.d
+}
diff --git a/packages/mamona/gcc-noemu-4.1.2/.mtn2git_empty b/packages/mamona/gcc-noemu-4.1.2/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/mamona/gcc-noemu-4.1.2/100-uclibc-conf.patch b/packages/mamona/gcc-noemu-4.1.2/100-uclibc-conf.patch
new file mode 100644 (file)
index 0000000..49d576c
--- /dev/null
@@ -0,0 +1,544 @@
+--- gcc-4.1.0/gcc/config/t-linux-uclibc
++++ gcc-4.1.0/gcc/config/t-linux-uclibc
+@@ -0,0 +1,5 @@
++# Remove glibc specific files added in t-linux
++SHLIB_MAPFILES := $(filter-out $(srcdir)/config/libgcc-glibc.ver, $(SHLIB_MAPFILES))
++
++# Use unwind-dw2-fde instead of unwind-dw2-fde-glibc
++LIB2ADDEH := $(subst unwind-dw2-fde-glibc.c,unwind-dw2-fde.c,$(LIB2ADDEH))
+--- gcc-4.1.0/gcc/config.gcc
++++ gcc-4.1.0/gcc/config.gcc
+@@ -1887,7 +1887,7 @@ s390x-ibm-tpf*)
+       ;;
+ sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
+ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
+-  sh-*-linux* | sh[346lbe]*-*-linux* | \
++  sh*-*-linux* | sh[346lbe]*-*-linux* | \
+   sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
+    sh64-*-netbsd* | sh64l*-*-netbsd*)
+       tmake_file="${tmake_file} sh/t-sh sh/t-elf"
+@@ -2341,6 +2341,12 @@ m32c-*-elf*)
+       ;;
+ esac
++# Rather than hook into each target, just do it after all the linux
++# targets have been processed
++case ${target} in
++*-linux-uclibc*) tm_defines="${tm_defines} USE_UCLIBC" ; tmake_file="${tmake_file} t-linux-uclibc"
++esac
++
+ case ${target} in
+ i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1)
+       tmake_file="${tmake_file} i386/t-gmm_malloc"
+--- gcc-4.1.0/boehm-gc/configure
++++ gcc-4.1.0/boehm-gc/configure
+@@ -4320,6 +4320,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-4.1.0/configure
++++ gcc-4.1.0/configure
+@@ -1133,7 +1133,7 @@ no)
+     ;;
+ "")
+     case "${target}" in
+-    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+         # Enable libmudflap by default in GNU and friends.
+       ;;
+     *-*-freebsd*)
+--- gcc-4.1.0/configure.in
++++ gcc-4.1.0/configure.in
+@@ -341,7 +341,7 @@ no)
+     ;;
+ "")
+     case "${target}" in
+-    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
++    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
+         # Enable libmudflap by default in GNU and friends.
+       ;;
+     *-*-freebsd*)
+--- gcc-4.1.0/contrib/regression/objs-gcc.sh
++++ gcc-4.1.0/contrib/regression/objs-gcc.sh
+@@ -105,6 +105,10 @@ if [ $H_REAL_TARGET = $H_REAL_HOST -a $H
+  then
+   make all-gdb all-dejagnu all-ld || exit 1
+   make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++  make all-gdb all-dejagnu all-ld || exit 1
++  make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+   make bootstrap || exit 1
+   make install || exit 1
+--- gcc-4.1.0/gcc/config/alpha/linux-elf.h
++++ gcc-4.1.0/gcc/config/alpha/linux-elf.h
+@@ -27,7 +27,11 @@ Boston, MA 02110-1301, USA.  */
+ #define SUBTARGET_EXTRA_SPECS \
+ { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
++#if defined USE_UCLIBC
++#define ELF_DYNAMIC_LINKER    "/lib/ld-uClibc.so.0"
++#else
+ #define ELF_DYNAMIC_LINKER    "/lib/ld-linux.so.2"
++#endif
+ #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}                \
+   %{O*:-O3} %{!O*:-O1}                                                \
+--- gcc-4.1.0/gcc/config/arm/linux-elf.h
++++ gcc-4.1.0/gcc/config/arm/linux-elf.h
+@@ -51,7 +51,11 @@
+ #define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.2"
++#endif
+ #define LINUX_TARGET_LINK_SPEC  "%{h*} %{version:-v} \
+    %{b} \
+--- gcc-4.1.0/gcc/config/cris/linux.h
++++ gcc-4.1.0/gcc/config/cris/linux.h
+@@ -73,6 +73,25 @@ Boston, MA 02110-1301, USA.  */
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+@@ -87,6 +106,8 @@ Boston, MA 02110-1301, USA.  */
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
++#endif  /* USE_UCLIBC */
++
+ /* Node: Run-time Target */
+--- gcc-4.1.0/gcc/config/i386/linux.h
++++ gcc-4.1.0/gcc/config/i386/linux.h
+@@ -107,6 +107,11 @@ Boston, MA 02110-1301, USA.  */
+ #define LINK_EMULATION "elf_i386"
+ #define DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#if defined USE_UCLIBC
++#undef DYNAMIC_LINKER
++#define DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#endif
++
+ #undef  SUBTARGET_EXTRA_SPECS
+ #define SUBTARGET_EXTRA_SPECS \
+   { "link_emulation", LINK_EMULATION },\
+--- gcc-4.1.0/gcc/config/i386/linux64.h
++++ gcc-4.1.0/gcc/config/i386/linux64.h
+@@ -54,14 +54,21 @@ Boston, MA 02110-1301, USA.  */
+    When the -shared link option is used a final link is not being
+    done.  */
++#ifdef USE_UCLIBC
++#define ELF32_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF32_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define ELF64_DYNAMIC_LINKER "/lib64/ld-linux-x86-64.so.2"
++#endif
+ #undef        LINK_SPEC
+ #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+       %{rdynamic:-export-dynamic} \
+-      %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+-      %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
++      %{m32:%{!dynamic-linker:-dynamic-linker " ELF32_DYNAMIC_LINKER "}} \
++      %{!m32:%{!dynamic-linker:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}} \
+     %{static:-static}}"
+ /* Similar to standard Linux, but adding -ffast-math support.  */
+--- gcc-4.1.0/gcc/config/ia64/linux.h
++++ gcc-4.1.0/gcc/config/ia64/linux.h
+@@ -37,13 +37,18 @@ do {                                               \
+ /* Define this for shared library support because it isn't in the main
+    linux.h file.  */
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER    "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+       %{rdynamic:-export-dynamic} \
+-      %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \
++      %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+       %{static:-static}}"
+--- gcc-4.1.0/gcc/config/m68k/linux.h
++++ gcc-4.1.0/gcc/config/m68k/linux.h
+@@ -123,12 +123,17 @@ Boston, MA 02110-1301, USA.  */
+ /* If ELF is the default format, we should not use /lib/elf.  */
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef        LINK_SPEC
+ #define LINK_SPEC "-m m68kelf %{shared} \
+   %{!shared: \
+     %{!static: \
+       %{rdynamic:-export-dynamic} \
+-      %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
++      %{!dynamic-linker*:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+     %{static}}"
+ /* For compatibility with linux/a.out */
+--- gcc-4.1.0/gcc/config/mips/linux.h
++++ gcc-4.1.0/gcc/config/mips/linux.h
+@@ -105,6 +105,11 @@ Boston, MA 02110-1301, USA.  */
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -112,7 +117,7 @@ Boston, MA 02110-1301, USA.  */
+     %{!ibcs: \
+       %{!static: \
+         %{rdynamic:-export-dynamic} \
+-        %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++        %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+         %{static:-static}}}"
+ #undef SUBTARGET_ASM_SPEC
+--- gcc-4.1.0/gcc/config/pa/pa-linux.h
++++ gcc-4.1.0/gcc/config/pa/pa-linux.h
+@@ -49,13 +49,18 @@ Boston, MA 02110-1301, USA.  */
+ /* Define this for shared library support because it isn't in the main
+    linux.h file.  */
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld.so.1"
++#endif
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+   %{shared:-shared} \
+   %{!shared: \
+     %{!static: \
+       %{rdynamic:-export-dynamic} \
+-      %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
++      %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+       %{static:-static}}"
+ /* glibc's profiling functions don't need gcc to allocate counters.  */
+--- gcc-4.1.0/gcc/config/rs6000/linux.h
++++ gcc-4.1.0/gcc/config/rs6000/linux.h
+@@ -72,7 +72,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ #undef        LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ #define LINK_GCC_C_SEQUENCE_SPEC \
+   "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+--- gcc-4.1.0/gcc/config/rs6000/sysv4.h
++++ gcc-4.1.0/gcc/config/rs6000/sysv4.h
+@@ -866,6 +866,7 @@ extern int fixuplabelno;
+   mcall-linux  : %(link_os_linux)       ; \
+   mcall-gnu    : %(link_os_gnu)         ; \
+   mcall-netbsd : %(link_os_netbsd)      ; \
++  mcall-linux-uclibc : %(link_os_linux_uclibc); \
+   mcall-openbsd: %(link_os_openbsd)     ; \
+                : %(link_os_default)     }"
+@@ -1043,6 +1044,10 @@ extern int fixuplabelno;
+   %{rdynamic:-export-dynamic} \
+   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+ #endif
+@@ -1209,6 +1214,7 @@ ncrtn.o%s"
+   { "link_os_sim",            LINK_OS_SIM_SPEC },                     \
+   { "link_os_freebsd",                LINK_OS_FREEBSD_SPEC },                 \
+   { "link_os_linux",          LINK_OS_LINUX_SPEC },                   \
++  { "link_os_linux_uclibc",   LINK_OS_LINUX_UCLIBC_SPEC },            \
+   { "link_os_gnu",            LINK_OS_GNU_SPEC },                     \
+   { "link_os_netbsd",         LINK_OS_NETBSD_SPEC },                  \
+   { "link_os_openbsd",                LINK_OS_OPENBSD_SPEC },                 \
+--- gcc-4.1.0/gcc/config/s390/linux.h
++++ gcc-4.1.0/gcc/config/s390/linux.h
+@@ -77,6 +77,13 @@ Software Foundation, 51 Franklin Street,
+ #define MULTILIB_DEFAULTS { "m31" }
+ #endif
++#ifdef USE_UCLIBC
++#define ELF31_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64-uClibc.so.0"
++#else
++#define ELF31_DYNAMIC_LINKER "/lib/ld.so.1"
++#define ELF64_DYNAMIC_LINKER "/lib/ld64.so.1"
++#endif
+ #undef  LINK_SPEC
+ #define LINK_SPEC \
+   "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
+@@ -86,8 +93,8 @@ Software Foundation, 51 Franklin Street,
+       %{!static: \
+       %{rdynamic:-export-dynamic} \
+       %{!dynamic-linker: \
+-          %{m31:-dynamic-linker /lib/ld.so.1} \
+-          %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
++          %{m31:-dynamic-linker " ELF31_DYNAMIC_LINKER "} \
++          %{m64:-dynamic-linker " ELF64_DYNAMIC_LINKER "}}}}"
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+--- gcc-4.1.0/gcc/config/sh/linux.h
++++ gcc-4.1.0/gcc/config/sh/linux.h
+@@ -56,12 +56,21 @@ Boston, MA 02110-1301, USA.  */
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ /* Output assembler code to STREAM to call the profiler.  */
+--- gcc-4.1.0/gcc/config/sparc/linux.h
++++ gcc-4.1.0/gcc/config/sparc/linux.h
+@@ -125,6 +125,11 @@ Boston, MA 02110-1301, USA.  */
+ /* If ELF is the default format, we should not use /lib/elf.  */
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#endif
+ #undef  LINK_SPEC
+ #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+   %{!mno-relax:%{!r:-relax}} \
+@@ -132,7 +137,7 @@ Boston, MA 02110-1301, USA.  */
+     %{!ibcs: \
+       %{!static: \
+         %{rdynamic:-export-dynamic} \
+-        %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++        %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+         %{static:-static}}}"
+ /* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+--- gcc-4.1.0/gcc/config/sparc/linux64.h
++++ gcc-4.1.0/gcc/config/sparc/linux64.h
+@@ -162,12 +162,17 @@ Boston, MA 02110-1301, USA.  */
+   { "link_arch_default", LINK_ARCH_DEFAULT_SPEC },      \
+   { "link_arch",       LINK_ARCH_SPEC },
+     
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER    "/lib/ld-uClibc.so.0"
++#else
++#define ELF_DYNAMIC_LINKER  "/lib/ld-linux.so.2"
++#endif
+ #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+       %{!static: \
+         %{rdynamic:-export-dynamic} \
+-        %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
++        %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "}} \
+         %{static:-static}}} \
+ "
+--- gcc-4.1.0/libffi/configure
++++ gcc-4.1.0/libffi/configure
+@@ -3457,6 +3457,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-4.1.0/libgfortran/configure
++++ gcc-4.1.0/libgfortran/configure
+@@ -3699,6 +3699,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-4.1.0/libjava/configure
++++ gcc-4.1.0/libjava/configure
+@@ -5137,6 +5137,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-4.1.0/libmudflap/configure
++++ gcc-4.1.0/libmudflap/configure
+@@ -5382,6 +5382,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-4.1.0/libobjc/configure
++++ gcc-4.1.0/libobjc/configure
+@@ -3312,6 +3312,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- gcc-4.1.0/libtool.m4
++++ gcc-4.1.0/libtool.m4
+@@ -743,6 +743,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+--- gcc-4.1.0/ltconfig
++++ gcc-4.1.0/ltconfig
+@@ -603,6 +603,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1274,6 +1275,23 @@ linux-gnu*)
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
+--- gcc-4.1.0/zlib/configure
++++ gcc-4.1.0/zlib/configure
+@@ -3426,6 +3426,11 @@ linux-gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/packages/mamona/gcc-noemu-4.1.2/110-arm-eabi.patch b/packages/mamona/gcc-noemu-4.1.2/110-arm-eabi.patch
new file mode 100644 (file)
index 0000000..acebe53
--- /dev/null
@@ -0,0 +1,27 @@
+--- gcc-2005q3-1.orig/gcc/config.gcc   2005-10-31 19:02:54.000000000 +0300
++++ gcc-2005q3-1/gcc/config.gcc        2006-01-27 01:09:09.000000000 +0300
+@@ -674,7 +674,7 @@
+       tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" 
+       tmake_file="t-slibgcc-elf-ver t-linux arm/t-arm"
+       case ${target} in
+-      arm*-*-linux-gnueabi)
++      arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+           tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+           tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
+           # The BPABI long long divmod functions return a 128-bit value in 
+
+diff -urN gcc-2005q3-2/gcc/config/arm/linux-eabi.h gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h
+--- gcc-2005q3-2/gcc/config/arm/linux-eabi.h   2005-12-07 23:14:16.000000000 +0300
++++ gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h       2006-03-29 19:02:34.000000000 +0400
+@@ -53,7 +53,11 @@
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+    GNU/Linux binaries on an EABI system.  */
+ #undef LINUX_TARGET_INTERPRETER
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.3"
++#endif
+ /* At this point, bpabi.h will have clobbered LINK_SPEC.  We want to
+    use the GNU/Linux version, not the generic BPABI version.  */
diff --git a/packages/mamona/gcc-noemu-4.1.2/200-uclibc-locale.patch b/packages/mamona/gcc-noemu-4.1.2/200-uclibc-locale.patch
new file mode 100644 (file)
index 0000000..e5d712e
--- /dev/null
@@ -0,0 +1,3239 @@
+--- gcc-4.1.0-dist/libstdc++-v3/acinclude.m4
++++ gcc-4.1.0/libstdc++-v3/acinclude.m4
+@@ -1071,7 +1071,7 @@
+   AC_MSG_CHECKING([for C locale to use])
+   GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+     [use MODEL for target locale package],
+-    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++    [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+   
+   # If they didn't use this option switch, or if they specified --enable
+   # with no specific model, we'll have to look for one.  If they
+@@ -1087,6 +1087,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case ${target_os} in
++      *-uclibc*)
++        enable_clocale_flag=uclibc
++        ;;
+       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+         AC_EGREP_CPP([_GLIBCXX_ok], [
+         #include <features.h>
+@@ -1230,6 +1233,40 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcxx_MOFILES)
++      AC_SUBST(glibcxx_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+   # This is where the testsuite looks for locale catalogs, using the
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <bits/c++config.h>
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++#endif 
++
++#endif // GLIBC 2.3 and later
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
+@@ -0,0 +1,152 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno>  // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c)        NULL
++#define __freelocale(a)             ((void)0)
++#define __duplocale(a)              __c_locale()
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++                 const __c_locale& __cloc)
++    {
++      char* __sanity;
++      errno = 0;
++      float __f = __strtof_l(__s, &__sanity, __cloc);
++      if (__sanity != __s && errno != ERANGE)
++      __v = __f;
++      else
++      __err |= ios_base::failbit;
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++                 const __c_locale& __cloc)
++    {
++      char* __sanity;
++      errno = 0;
++      double __d = __strtod_l(__s, &__sanity, __cloc);
++      if (__sanity != __s && errno != ERANGE)
++      __v = __d;
++      else
++      __err |= ios_base::failbit;
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++                 const __c_locale& __cloc)
++    {
++      char* __sanity;
++      errno = 0;
++      long double __ld = __strtold_l(__s, &__sanity, __cloc);
++      if (__sanity != __s && errno != ERANGE)
++      __v = __ld;
++      else
++      __err |= ios_base::failbit;
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++                                  __c_locale __old)
++  {
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (!__cloc)
++      {
++      // This named locale is not supported by the underlying OS.
++      __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++                            "name not valid"));
++      }
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++    if (__cloc && _S_get_c_locale() != __cloc)
++      __freelocale(__cloc); 
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++  { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++  const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES", 
++#if _GLIBCXX_NUM_CATEGORIES != 0
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}
++
++namespace std
++{
++  const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++}  // namespace std
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h
+@@ -0,0 +1,117 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring>              // get std::strlen
++#include <cstdio>               // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h>         // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>            // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h>          // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++ 
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t          __c_locale;
++#else
++  typedef int*                        __c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, 
++                   const int __size __attribute__ ((__unused__)),
++                   const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++                   _Tv __v, const __c_locale& __cloc, int __prec)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++                   _Tv __v, const __c_locale&, int __prec)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = std::setlocale(LC_ALL, NULL);
++      char* __sav = new char[std::strlen(__old) + 1];
++      std::strcpy(__sav, __old);
++      std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      std::setlocale(LC_ALL, __sav);
++      delete [] __sav;
++#endif
++      return __ret;
++    }
++}
++
++#endif
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++       const intern_type* __from_end, const intern_type*& __from_next,
++       extern_type* __to, extern_type* __to_end,
++       extern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++    // in case we fall back to wcrtomb and then continue, in a loop.
++    // NB: wcsnrtombs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++       __from_next < __from_end && __to_next < __to_end
++       && __ret == ok;)
++      {
++      const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++                                                    __from_end - __from_next);
++      if (!__from_chunk_end)
++        __from_chunk_end = __from_end;
++
++      __from = __from_next;
++      const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++                                       __from_chunk_end - __from_next,
++                                       __to_end - __to_next, &__state);
++      if (__conv == static_cast<size_t>(-1))
++        {
++          // In case of error, in order to stop at the exact place we
++          // have to start again from the beginning with a series of
++          // wcrtomb.
++          for (; __from < __from_next; ++__from)
++            __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++          __state = __tmp_state;
++          __ret = error;
++        }
++      else if (__from_next && __from_next < __from_chunk_end)
++        {
++          __to_next += __conv;
++          __ret = partial;
++        }
++      else
++        {
++          __from_next = __from_chunk_end;
++          __to_next += __conv;
++        }
++
++      if (__from_next < __from_end && __ret == ok)
++        {
++          extern_type __buf[MB_LEN_MAX];
++          __tmp_state = __state;
++          const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++          if (__conv > static_cast<size_t>(__to_end - __to_next))
++            __ret = partial;
++          else
++            {
++              memcpy(__to_next, __buf, __conv);
++              __state = __tmp_state;
++              __to_next += __conv;
++              ++__from_next;
++            }
++        }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++      const extern_type* __from_end, const extern_type*& __from_next,
++      intern_type* __to, intern_type* __to_end,
++      intern_type*& __to_next) const
++  {
++    result __ret = ok;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we store a L'\0' and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++    for (__from_next = __from, __to_next = __to;
++       __from_next < __from_end && __to_next < __to_end
++       && __ret == ok;)
++      {
++      const extern_type* __from_chunk_end;
++      __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++                                                                __from_end
++                                                                - __from_next));
++      if (!__from_chunk_end)
++        __from_chunk_end = __from_end;
++
++      __from = __from_next;
++      size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++                                 __from_chunk_end - __from_next,
++                                 __to_end - __to_next, &__state);
++      if (__conv == static_cast<size_t>(-1))
++        {
++          // In case of error, in order to stop at the exact place we
++          // have to start again from the beginning with a series of
++          // mbrtowc.
++          for (;; ++__to_next, __from += __conv)
++            {
++              __conv = mbrtowc(__to_next, __from, __from_end - __from,
++                               &__tmp_state);
++              if (__conv == static_cast<size_t>(-1)
++                  || __conv == static_cast<size_t>(-2))
++                break;
++            }
++          __from_next = __from;
++          __state = __tmp_state;          
++          __ret = error;
++        }
++      else if (__from_next && __from_next < __from_chunk_end)
++        {
++          // It is unclear what to return in this case (see DR 382). 
++          __to_next += __conv;
++          __ret = partial;
++        }
++      else
++        {
++          __from_next = __from_chunk_end;
++          __to_next += __conv;
++        }
++
++      if (__from_next < __from_end && __ret == ok)
++        {
++          if (__to_next < __to_end)
++            {
++              // XXX Probably wrong for stateful encodings
++              __tmp_state = __state;          
++              ++__from_next;
++              *__to_next++ = L'\0';
++            }
++          else
++            __ret = partial;
++        }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_encoding() const throw()
++  {
++    // XXX This implementation assumes that the encoding is
++    // stateless and is either single-byte or variable-width.
++    int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    if (MB_CUR_MAX == 1)
++      __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }  
++
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_max_length() const throw()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++    // XXX Probably wrong for stateful encodings.
++    int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++  
++  int 
++  codecvt<wchar_t, char, mbstate_t>::
++  do_length(state_type& __state, const extern_type* __from,
++          const extern_type* __end, size_t __max) const
++  {
++    int __ret = 0;
++    state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++    // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++    // in case we advance past it and then continue, in a loop.
++    // NB: mbsnrtowcs is a GNU extension
++  
++    // A dummy internal buffer is needed in order for mbsnrtocws to consider
++    // its fourth parameter (it wouldn't with NULL as first parameter).
++    wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) 
++                                                         * __max));
++    while (__from < __end && __max)
++      {
++      const extern_type* __from_chunk_end;
++      __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++                                                                __end
++                                                                - __from));
++      if (!__from_chunk_end)
++        __from_chunk_end = __end;
++
++      const extern_type* __tmp_from = __from;
++      size_t __conv = mbsnrtowcs(__to, &__from,
++                                 __from_chunk_end - __from,
++                                 __max, &__state);
++      if (__conv == static_cast<size_t>(-1))
++        {
++          // In case of error, in order to stop at the exact place we
++          // have to start again from the beginning with a series of
++          // mbrtowc.
++          for (__from = __tmp_from;; __from += __conv)
++            {
++              __conv = mbrtowc(NULL, __from, __end - __from,
++                               &__tmp_state);
++              if (__conv == static_cast<size_t>(-1)
++                  || __conv == static_cast<size_t>(-2))
++                break;
++            }
++          __state = __tmp_state;
++          __ret += __from - __tmp_from;
++          break;
++        }
++      if (!__from)
++        __from = __from_chunk_end;
++      
++      __ret += __from - __tmp_from;
++      __max -= __conv;
++
++      if (__from < __end && __max)
++        {
++          // XXX Probably wrong for stateful encodings
++          __tmp_state = __state;
++          ++__from;
++          ++__ret;
++          --__max;
++        }
++      }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    return __ret; 
++  }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++                              size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++                               const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++                                 size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+@@ -0,0 +1,314 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    {                 
++      if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++      {
++        this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++        this->_S_create_c_locale(this->_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++        this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++        this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++        this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++      }
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++      __ret = __wctype_l("space", _M_c_locale_ctype);
++      break;
++      case print:
++      __ret = __wctype_l("print", _M_c_locale_ctype);
++      break;
++      case cntrl:
++      __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++      break;
++      case upper:
++      __ret = __wctype_l("upper", _M_c_locale_ctype);
++      break;
++      case lower:
++      __ret = __wctype_l("lower", _M_c_locale_ctype);
++      break;
++      case alpha:
++      __ret = __wctype_l("alpha", _M_c_locale_ctype);
++      break;
++      case digit:
++      __ret = __wctype_l("digit", _M_c_locale_ctype);
++      break;
++      case punct:
++      __ret = __wctype_l("punct", _M_c_locale_ctype);
++      break;
++      case xdigit:
++      __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++      break;
++      case alnum:
++      __ret = __wctype_l("alnum", _M_c_locale_ctype);
++      break;
++      case graph:
++      __ret = __wctype_l("graph", _M_c_locale_ctype);
++      break;
++      default:
++      __ret = __wmask_type();
++      }
++    return __ret;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // The case of __m == ctype_base::space is particularly important,
++    // due to its use in many istream functions.  Therefore we deal with
++    // it first, exploiting the knowledge that on GNU systems _M_bit[5]
++    // is the mask corresponding to ctype_base::space.  NB: an encoding
++    // change would not affect correctness!
++    bool __ret = false;
++    if (__m == _M_bit[5])
++      __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype);
++    else
++      {
++      // Highest bitmask in ctype_base == 10, but extra in "C"
++      // library for blank.
++      const size_t __bitmasksize = 11;
++      for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++        if (__m & _M_bit[__bitcur])
++          {
++            if (__iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++              {
++                __ret = true;
++                break;
++              }
++            else if (__m == _M_bit[__bitcur])
++              break;
++          }
++      }
++    return __ret;    
++  }
++
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (; __lo < __hi; ++__vec, ++__lo)
++      {
++      // Highest bitmask in ctype_base == 10, but extra in "C"
++      // library for blank.
++      const size_t __bitmasksize = 11; 
++      mask __m = 0;
++      for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++        if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++          __m |= _M_bit[__bitcur];
++      *__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++    while (__lo < __hi)
++      {
++      *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++      ++__lo;
++      ++__dest;
++      }
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  {
++    if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++      return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++          char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    if (_M_narrow_ok)
++      while (__lo < __hi)
++      {
++        if (*__lo >= 0 && *__lo < 128)
++          *__dest = _M_narrow[*__lo];
++        else
++          {
++            const int __c = wctob(*__lo);
++            *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++          }
++        ++__lo;
++        ++__dest;
++      }
++    else
++      while (__lo < __hi)
++      {
++        const int __c = wctob(*__lo);
++        *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++        ++__lo;
++        ++__dest;
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  void
++  ctype<wchar_t>::_M_initialize_ctype()
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wint_t __i;
++    for (__i = 0; __i < 128; ++__i)
++      {
++      const int __c = wctob(__i);
++      if (__c == EOF)
++        break;
++      else
++        _M_narrow[__i] = static_cast<char>(__c);
++      }
++    if (__i == 128)
++      _M_narrow_ok = true;
++    else
++      _M_narrow_ok = false;
++    for (size_t __j = 0;
++       __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++      _M_widen[__j] = btowc(__j);
++
++    for (size_t __k = 0; __k <= 11; ++__k)
++      { 
++      _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++      _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++  }
++#endif //  _GLIBCXX_USE_WCHAR_T
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++                           const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++# ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h
+@@ -0,0 +1,121 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++                                const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), 
++       _M_name_messages(_S_get_c_name())
++     { }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, const char* __s, 
++                              size_t __refs) 
++     : facet(__refs), _M_c_locale_messages(NULL), _M_name_messages(NULL)
++     {
++       const size_t __len = std::strlen(__s) + 1;
++       char* __tmp = new char[__len];
++       std::memcpy(__tmp, __s, __len);
++       _M_name_messages = __tmp;
++
++       // Last to avoid leaking memory if new throws.
++       _M_c_locale_messages = _S_clone_c_locale(__cloc);
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++                         const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++      if (_M_name_messages != _S_get_c_name())
++      delete [] _M_name_messages;
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++                            const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++       if (this->_M_name_messages != locale::facet::_S_get_c_name())
++       delete [] this->_M_name_messages;
++       char* __tmp = new char[std::strlen(__s) + 1];
++       std::strcpy(__tmp, __s);
++       this->_M_name_messages = __tmp;
++
++       if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++       {
++         this->_S_destroy_c_locale(this->_M_c_locale_messages);
++         this->_S_create_c_locale(this->_M_c_locale_messages, __s); 
++       }
++     }
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+@@ -0,0 +1,692 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++      // 1 The sign precedes the value and symbol.
++      __ret.field[0] = sign;
++      if (__space)
++        {
++          // Pattern starts with sign.
++          if (__precedes)
++            {
++              __ret.field[1] = symbol;
++              __ret.field[3] = value;
++            }
++          else
++            {
++              __ret.field[1] = value;
++              __ret.field[3] = symbol;
++            }
++          __ret.field[2] = space;
++        }
++      else
++        {
++          // Pattern starts with sign and ends with none.
++          if (__precedes)
++            {
++              __ret.field[1] = symbol;
++              __ret.field[2] = value;
++            }
++          else
++            {
++              __ret.field[1] = value;
++              __ret.field[2] = symbol;
++            }
++          __ret.field[3] = none;
++        }
++      break;
++      case 2:
++      // 2 The sign follows the value and symbol.
++      if (__space)
++        {
++          // Pattern either ends with sign.
++          if (__precedes)
++            {
++              __ret.field[0] = symbol;
++              __ret.field[2] = value;
++            }
++          else
++            {
++              __ret.field[0] = value;
++              __ret.field[2] = symbol;
++            }
++          __ret.field[1] = space;
++          __ret.field[3] = sign;
++        }
++      else
++        {
++          // Pattern ends with sign then none.
++          if (__precedes)
++            {
++              __ret.field[0] = symbol;
++              __ret.field[1] = value;
++            }
++          else
++            {
++              __ret.field[0] = value;
++              __ret.field[1] = symbol;
++            }
++          __ret.field[2] = sign;
++          __ret.field[3] = none;
++        }
++      break;
++      case 3:
++      // 3 The sign immediately precedes the symbol.
++      if (__precedes)
++        {
++          __ret.field[0] = sign;
++          __ret.field[1] = symbol;        
++          if (__space)
++            {
++              __ret.field[2] = space;
++              __ret.field[3] = value;
++            }
++          else
++            {
++              __ret.field[2] = value;         
++              __ret.field[3] = none;
++            }
++        }
++      else
++        {
++          __ret.field[0] = value;
++          if (__space)
++            {
++              __ret.field[1] = space;
++              __ret.field[2] = sign;
++              __ret.field[3] = symbol;
++            }
++          else
++            {
++              __ret.field[1] = sign;
++              __ret.field[2] = symbol;
++              __ret.field[3] = none;
++            }
++        }
++      break;
++      case 4:
++      // 4 The sign immediately follows the symbol.
++      if (__precedes)
++        {
++          __ret.field[0] = symbol;
++          __ret.field[1] = sign;
++          if (__space)
++            {
++              __ret.field[2] = space;
++              __ret.field[3] = value;
++            }
++          else
++            {
++              __ret.field[2] = value;
++              __ret.field[3] = none;
++            }
++        }
++      else
++        {
++          __ret.field[0] = value;
++          if (__space)
++            {
++              __ret.field[1] = space;
++              __ret.field[2] = symbol;
++              __ret.field[3] = sign;
++            }
++          else
++            {
++              __ret.field[1] = symbol;
++              __ret.field[2] = sign;
++              __ret.field[3] = none;
++            }
++        }
++      break;
++      default:
++      __ret = pattern();
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++                                                   const char*)
++    {
++      if (!_M_data)
++      _M_data = new __moneypunct_cache<char, true>;
++
++      if (!__cloc)
++      {
++        // "C" locale
++        _M_data->_M_decimal_point = '.';
++        _M_data->_M_thousands_sep = ',';
++        _M_data->_M_grouping = "";
++        _M_data->_M_grouping_size = 0;
++        _M_data->_M_curr_symbol = "";
++        _M_data->_M_curr_symbol_size = 0;
++        _M_data->_M_positive_sign = "";
++        _M_data->_M_positive_sign_size = 0;
++        _M_data->_M_negative_sign = "";
++        _M_data->_M_negative_sign_size = 0;
++        _M_data->_M_frac_digits = 0;
++        _M_data->_M_pos_format = money_base::_S_default_pattern;
++        _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++        for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++          _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++      }
++      else
++      {
++        // Named locale.
++        _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++                                                      __cloc));
++        _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++                                                      __cloc));
++        _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++        _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++        _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++        _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++        char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++        if (!__nposn)
++          _M_data->_M_negative_sign = "()";
++        else
++          _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, 
++                                                      __cloc);
++        _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++        // _Intl == true
++        _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++        _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++        _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++                                                    __cloc));
++        char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++        char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++        char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++        _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++                                                      __pposn);
++        char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++        char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++        _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++                                                      __nposn);
++      }
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++                                                    const char*)
++    {
++      if (!_M_data)
++      _M_data = new __moneypunct_cache<char, false>;
++
++      if (!__cloc)
++      {
++        // "C" locale
++        _M_data->_M_decimal_point = '.';
++        _M_data->_M_thousands_sep = ',';
++        _M_data->_M_grouping = "";
++        _M_data->_M_grouping_size = 0;
++        _M_data->_M_curr_symbol = "";
++        _M_data->_M_curr_symbol_size = 0;
++        _M_data->_M_positive_sign = "";
++        _M_data->_M_positive_sign_size = 0;
++        _M_data->_M_negative_sign = "";
++        _M_data->_M_negative_sign_size = 0;
++        _M_data->_M_frac_digits = 0;
++        _M_data->_M_pos_format = money_base::_S_default_pattern;
++        _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++        for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++          _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++      }
++      else
++      {
++        // Named locale.
++        _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, 
++                                                      __cloc));
++        _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, 
++                                                      __cloc));
++        _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++        _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++        _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++        _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++        char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++        if (!__nposn)
++          _M_data->_M_negative_sign = "()";
++        else
++          _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++                                                      __cloc);
++        _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++        // _Intl == false
++        _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++        _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++        _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++        char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++        char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++        char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++        _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++                                                      __pposn);
++        char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++        char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++        _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++                                                      __nposn);
++      }
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { delete _M_data; }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                      const char*)
++#else
++                                                      const char* __name)
++#endif
++    {
++      if (!_M_data)
++      _M_data = new __moneypunct_cache<wchar_t, true>;
++
++      if (!__cloc)
++      {
++        // "C" locale
++        _M_data->_M_decimal_point = L'.';
++        _M_data->_M_thousands_sep = L',';
++        _M_data->_M_grouping = "";
++        _M_data->_M_grouping_size = 0;
++        _M_data->_M_curr_symbol = L"";
++        _M_data->_M_curr_symbol_size = 0;
++        _M_data->_M_positive_sign = L"";
++        _M_data->_M_positive_sign_size = 0;
++        _M_data->_M_negative_sign = L"";
++        _M_data->_M_negative_sign_size = 0;
++        _M_data->_M_frac_digits = 0;
++        _M_data->_M_pos_format = money_base::_S_default_pattern;
++        _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++        // Use ctype::widen code without the facet...
++        for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++          _M_data->_M_atoms[__i] =
++            static_cast<wchar_t>(money_base::_S_atoms[__i]);
++      }
++      else
++      {
++        // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++        __c_locale __old = __uselocale(__cloc);
++#else
++        // Switch to named locale so that mbsrtowcs will work.
++        char* __old = strdup(setlocale(LC_ALL, NULL));
++        setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++        _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++        _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# elif defined __UCLIBC_HAS_LOCALE__
++        _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++        _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++        union { char *__s; wchar_t __w; } __u;
++        __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++        _M_data->_M_decimal_point = __u.__w;
++
++        __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++        _M_data->_M_thousands_sep = __u.__w;
++#endif
++        _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++        _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++        const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++        const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++        const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++        wchar_t* __wcs_ps = 0;
++        wchar_t* __wcs_ns = 0;
++        const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++        try
++          {
++            mbstate_t __state;
++            size_t __len = strlen(__cpossign);
++            if (__len)
++              {
++                ++__len;
++                memset(&__state, 0, sizeof(mbstate_t));
++                __wcs_ps = new wchar_t[__len];
++                mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++                _M_data->_M_positive_sign = __wcs_ps;
++              }
++            else
++              _M_data->_M_positive_sign = L"";
++            _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++            
++            __len = strlen(__cnegsign);
++            if (!__nposn)
++              _M_data->_M_negative_sign = L"()";
++            else if (__len)
++              { 
++                ++__len;
++                memset(&__state, 0, sizeof(mbstate_t));
++                __wcs_ns = new wchar_t[__len];
++                mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++                _M_data->_M_negative_sign = __wcs_ns;
++              }
++            else
++              _M_data->_M_negative_sign = L"";
++            _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++            
++            // _Intl == true.
++            __len = strlen(__ccurr);
++            if (__len)
++              {
++                ++__len;
++                memset(&__state, 0, sizeof(mbstate_t));
++                wchar_t* __wcs = new wchar_t[__len];
++                mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++                _M_data->_M_curr_symbol = __wcs;
++              }
++            else
++              _M_data->_M_curr_symbol = L"";
++            _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++          }
++        catch (...)
++          {
++            delete _M_data;
++            _M_data = 0;
++            delete __wcs_ps;
++            delete __wcs_ns;        
++#ifdef __UCLIBC_HAS_XLOCALE__
++            __uselocale(__old);
++#else
++            setlocale(LC_ALL, __old);
++            free(__old);
++#endif
++            __throw_exception_again;
++          } 
++        
++        _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, 
++                                                    __cloc));
++        char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++        char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++        char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++        _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++                                                      __pposn);
++        char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++        char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++        _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++                                                      __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++        __uselocale(__old);
++#else
++        setlocale(LC_ALL, __old);
++        free(__old);
++#endif
++      }
++    }
++
++  template<> 
++  void
++  moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                     const char*)
++#else
++                                                       const char* __name)
++#endif
++  {
++    if (!_M_data)
++      _M_data = new __moneypunct_cache<wchar_t, false>;
++
++    if (!__cloc)
++      {
++        // "C" locale
++        _M_data->_M_decimal_point = L'.';
++        _M_data->_M_thousands_sep = L',';
++        _M_data->_M_grouping = "";
++          _M_data->_M_grouping_size = 0;
++        _M_data->_M_curr_symbol = L"";
++        _M_data->_M_curr_symbol_size = 0;
++        _M_data->_M_positive_sign = L"";
++        _M_data->_M_positive_sign_size = 0;
++        _M_data->_M_negative_sign = L"";
++        _M_data->_M_negative_sign_size = 0;
++        _M_data->_M_frac_digits = 0;
++        _M_data->_M_pos_format = money_base::_S_default_pattern;
++        _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++        // Use ctype::widen code without the facet...
++        for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++          _M_data->_M_atoms[__i] =
++            static_cast<wchar_t>(money_base::_S_atoms[__i]);
++      }
++      else
++      {
++        // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++        __c_locale __old = __uselocale(__cloc);
++#else
++        // Switch to named locale so that mbsrtowcs will work.
++        char* __old = strdup(setlocale(LC_ALL, NULL));
++        setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++        _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++        _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# elif defined __UCLIBC_HAS_LOCALE__
++        _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++        _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++          union { char *__s; wchar_t __w; } __u;
++        __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++        _M_data->_M_decimal_point = __u.__w;
++
++        __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++        _M_data->_M_thousands_sep = __u.__w;
++#endif
++        _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++          _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++        const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++        const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++        const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++        wchar_t* __wcs_ps = 0;
++        wchar_t* __wcs_ns = 0;
++        const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++        try
++            {
++              mbstate_t __state;
++              size_t __len;
++              __len = strlen(__cpossign);
++              if (__len)
++                {
++                ++__len;
++                memset(&__state, 0, sizeof(mbstate_t));
++                __wcs_ps = new wchar_t[__len];
++                mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++                _M_data->_M_positive_sign = __wcs_ps;
++              }
++            else
++              _M_data->_M_positive_sign = L"";
++              _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++            
++            __len = strlen(__cnegsign);
++            if (!__nposn)
++              _M_data->_M_negative_sign = L"()";
++            else if (__len)
++              { 
++                ++__len;
++                memset(&__state, 0, sizeof(mbstate_t));
++                __wcs_ns = new wchar_t[__len];
++                mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++                _M_data->_M_negative_sign = __wcs_ns;
++              }
++            else
++              _M_data->_M_negative_sign = L"";
++              _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++            // _Intl == true.
++            __len = strlen(__ccurr);
++            if (__len)
++              {
++                ++__len;
++                memset(&__state, 0, sizeof(mbstate_t));
++                wchar_t* __wcs = new wchar_t[__len];
++                mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++                _M_data->_M_curr_symbol = __wcs;
++              }
++            else
++              _M_data->_M_curr_symbol = L"";
++              _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++          }
++          catch (...)
++          {
++            delete _M_data;
++              _M_data = 0;
++            delete __wcs_ps;
++            delete __wcs_ns;        
++#ifdef __UCLIBC_HAS_XLOCALE__
++            __uselocale(__old);
++#else
++            setlocale(LC_ALL, __old);
++            free(__old);
++#endif
++              __throw_exception_again;
++          }
++
++        _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++        char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++        char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++        char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++        _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace, 
++                                                      __pposn);
++        char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++        char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++        _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace, 
++                                                      __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++        __uselocale(__old);
++#else
++        setlocale(LC_ALL, __old);
++        free(__old);
++#endif
++      }
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++      delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++      delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++      delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (_M_data->_M_positive_sign_size)
++      delete [] _M_data->_M_positive_sign;
++      if (_M_data->_M_negative_sign_size
++          && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++      delete [] _M_data->_M_negative_sign;
++      if (_M_data->_M_curr_symbol_size)
++      delete [] _M_data->_M_curr_symbol;
++      delete _M_data;
++    }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+@@ -0,0 +1,173 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++      _M_data = new __numpunct_cache<char>;
++
++      if (!__cloc)
++      {
++        // "C" locale
++        _M_data->_M_grouping = "";
++        _M_data->_M_grouping_size = 0;
++        _M_data->_M_use_grouping = false;
++
++        _M_data->_M_decimal_point = '.';
++        _M_data->_M_thousands_sep = ',';
++
++        for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++          _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++        for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++          _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++      }
++      else
++      {
++        // Named locale.
++        _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT, 
++                                                      __cloc));
++        _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP, 
++                                                      __cloc));
++
++        // Check for NULL, which implies no grouping.
++        if (_M_data->_M_thousands_sep == '\0')
++          _M_data->_M_grouping = "";
++        else
++          _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++        _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++      }
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = "true";
++      _M_data->_M_truename_size = 4;
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = "false";
++      _M_data->_M_falsename_size = 5;
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { delete _M_data; }
++   
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++      _M_data = new __numpunct_cache<wchar_t>;
++
++      if (!__cloc)
++      {
++        // "C" locale
++        _M_data->_M_grouping = "";
++        _M_data->_M_grouping_size = 0;
++        _M_data->_M_use_grouping = false;
++
++        _M_data->_M_decimal_point = L'.';
++        _M_data->_M_thousands_sep = L',';
++
++        // Use ctype::widen code without the facet...
++        for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++          _M_data->_M_atoms_out[__i] =
++            static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
++
++        for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++          _M_data->_M_atoms_in[__j] =
++            static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
++      }
++      else
++      {
++        // Named locale.
++        // NB: In the GNU model wchar_t is always 32 bit wide.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++        _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++        _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# elif defined __UCLIBC_HAS_LOCALE__
++        _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++        _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++        union { char *__s; wchar_t __w; } __u;
++        __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++        _M_data->_M_decimal_point = __u.__w;
++
++        __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++        _M_data->_M_thousands_sep = __u.__w;
++#endif
++
++        if (_M_data->_M_thousands_sep == L'\0')
++          _M_data->_M_grouping = "";
++        else
++          _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++        _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++      }
++
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_data->_M_truename = L"true";
++      _M_data->_M_truename_size = 4;
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_data->_M_falsename = L"false";
++      _M_data->_M_falsename_size = 5;
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { delete _M_data; }
++ #endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc
+@@ -0,0 +1,406 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++         const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++                                      _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      const size_t __len = strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++      // Make sure __s is null terminated.
++      if (__len == 0)
++      __s[0] = '\0';
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++      _M_data = new __timepunct_cache<char>;
++
++      if (!__cloc)
++      {
++        // "C" locale
++        _M_c_locale_timepunct = _S_get_c_locale();
++
++        _M_data->_M_date_format = "%m/%d/%y";
++        _M_data->_M_date_era_format = "%m/%d/%y";
++        _M_data->_M_time_format = "%H:%M:%S";
++        _M_data->_M_time_era_format = "%H:%M:%S";
++        _M_data->_M_date_time_format = "";
++        _M_data->_M_date_time_era_format = "";
++        _M_data->_M_am = "AM";
++        _M_data->_M_pm = "PM";
++        _M_data->_M_am_pm_format = "";
++
++        // Day names, starting with "C"'s Sunday.
++        _M_data->_M_day1 = "Sunday";
++        _M_data->_M_day2 = "Monday";
++        _M_data->_M_day3 = "Tuesday";
++        _M_data->_M_day4 = "Wednesday";
++        _M_data->_M_day5 = "Thursday";
++        _M_data->_M_day6 = "Friday";
++        _M_data->_M_day7 = "Saturday";
++
++        // Abbreviated day names, starting with "C"'s Sun.
++        _M_data->_M_aday1 = "Sun";
++        _M_data->_M_aday2 = "Mon";
++        _M_data->_M_aday3 = "Tue";
++        _M_data->_M_aday4 = "Wed";
++        _M_data->_M_aday5 = "Thu";
++        _M_data->_M_aday6 = "Fri";
++        _M_data->_M_aday7 = "Sat";
++
++        // Month names, starting with "C"'s January.
++        _M_data->_M_month01 = "January";
++        _M_data->_M_month02 = "February";
++        _M_data->_M_month03 = "March";
++        _M_data->_M_month04 = "April";
++        _M_data->_M_month05 = "May";
++        _M_data->_M_month06 = "June";
++        _M_data->_M_month07 = "July";
++        _M_data->_M_month08 = "August";
++        _M_data->_M_month09 = "September";
++        _M_data->_M_month10 = "October";
++        _M_data->_M_month11 = "November";
++        _M_data->_M_month12 = "December";
++
++        // Abbreviated month names, starting with "C"'s Jan.
++        _M_data->_M_amonth01 = "Jan";
++        _M_data->_M_amonth02 = "Feb";
++        _M_data->_M_amonth03 = "Mar";
++        _M_data->_M_amonth04 = "Apr";
++        _M_data->_M_amonth05 = "May";
++        _M_data->_M_amonth06 = "Jun";
++        _M_data->_M_amonth07 = "Jul";
++        _M_data->_M_amonth08 = "Aug";
++        _M_data->_M_amonth09 = "Sep";
++        _M_data->_M_amonth10 = "Oct";
++        _M_data->_M_amonth11 = "Nov";
++        _M_data->_M_amonth12 = "Dec";
++      }
++      else
++      {
++        _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++        _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++        _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++        _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++        _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++        _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++        _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
++                                                           __cloc);
++        _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++        _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++        _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++        // Day names, starting with "C"'s Sunday.
++        _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++        _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++        _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++        _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++        _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++        _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++        _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++        // Abbreviated day names, starting with "C"'s Sun.
++        _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++        _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++        _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++        _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++        _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++        _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++        _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++        // Month names, starting with "C"'s January.
++        _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++        _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++        _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++        _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++        _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++        _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++        _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++        _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++        _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++        _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++        _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++        _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++        // Abbreviated month names, starting with "C"'s Jan.
++        _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++        _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++        _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++        _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++        _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++        _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++        _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++        _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++        _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++        _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++        _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++        _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++      }
++    }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++         const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++      const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++                                      _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++      // Make sure __s is null terminated.
++      if (__len == 0)
++      __s[0] = L'\0';
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!_M_data)
++      _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++//       if (!__cloc)
++      {
++        // "C" locale
++        _M_c_locale_timepunct = _S_get_c_locale();
++
++        _M_data->_M_date_format = L"%m/%d/%y";
++        _M_data->_M_date_era_format = L"%m/%d/%y";
++        _M_data->_M_time_format = L"%H:%M:%S";
++        _M_data->_M_time_era_format = L"%H:%M:%S";
++        _M_data->_M_date_time_format = L"";
++        _M_data->_M_date_time_era_format = L"";
++        _M_data->_M_am = L"AM";
++        _M_data->_M_pm = L"PM";
++        _M_data->_M_am_pm_format = L"";
++
++        // Day names, starting with "C"'s Sunday.
++        _M_data->_M_day1 = L"Sunday";
++        _M_data->_M_day2 = L"Monday";
++        _M_data->_M_day3 = L"Tuesday";
++        _M_data->_M_day4 = L"Wednesday";
++        _M_data->_M_day5 = L"Thursday";
++        _M_data->_M_day6 = L"Friday";
++        _M_data->_M_day7 = L"Saturday";
++
++        // Abbreviated day names, starting with "C"'s Sun.
++        _M_data->_M_aday1 = L"Sun";
++        _M_data->_M_aday2 = L"Mon";
++        _M_data->_M_aday3 = L"Tue";
++        _M_data->_M_aday4 = L"Wed";
++        _M_data->_M_aday5 = L"Thu";
++        _M_data->_M_aday6 = L"Fri";
++        _M_data->_M_aday7 = L"Sat";
++
++        // Month names, starting with "C"'s January.
++        _M_data->_M_month01 = L"January";
++        _M_data->_M_month02 = L"February";
++        _M_data->_M_month03 = L"March";
++        _M_data->_M_month04 = L"April";
++        _M_data->_M_month05 = L"May";
++        _M_data->_M_month06 = L"June";
++        _M_data->_M_month07 = L"July";
++        _M_data->_M_month08 = L"August";
++        _M_data->_M_month09 = L"September";
++        _M_data->_M_month10 = L"October";
++        _M_data->_M_month11 = L"November";
++        _M_data->_M_month12 = L"December";
++
++        // Abbreviated month names, starting with "C"'s Jan.
++        _M_data->_M_amonth01 = L"Jan";
++        _M_data->_M_amonth02 = L"Feb";
++        _M_data->_M_amonth03 = L"Mar";
++        _M_data->_M_amonth04 = L"Apr";
++        _M_data->_M_amonth05 = L"May";
++        _M_data->_M_amonth06 = L"Jun";
++        _M_data->_M_amonth07 = L"Jul";
++        _M_data->_M_amonth08 = L"Aug";
++        _M_data->_M_amonth09 = L"Sep";
++        _M_data->_M_amonth10 = L"Oct";
++        _M_data->_M_amonth11 = L"Nov";
++        _M_data->_M_amonth12 = L"Dec";
++      }
++#if 0
++      else
++      {
++        _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++        union { char *__s; wchar_t *__w; } __u;
++
++        __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
++        _M_data->_M_date_format = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
++        _M_data->_M_date_era_format = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
++        _M_data->_M_time_format = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
++        _M_data->_M_time_era_format = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
++        _M_data->_M_date_time_format = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
++        _M_data->_M_date_time_era_format = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
++        _M_data->_M_am = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
++        _M_data->_M_pm = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
++        _M_data->_M_am_pm_format = __u.__w;
++
++        // Day names, starting with "C"'s Sunday.
++        __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
++        _M_data->_M_day1 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
++        _M_data->_M_day2 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
++        _M_data->_M_day3 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
++        _M_data->_M_day4 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
++        _M_data->_M_day5 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
++        _M_data->_M_day6 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
++        _M_data->_M_day7 = __u.__w;
++
++        // Abbreviated day names, starting with "C"'s Sun.
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
++        _M_data->_M_aday1 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
++        _M_data->_M_aday2 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
++        _M_data->_M_aday3 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
++        _M_data->_M_aday4 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
++        _M_data->_M_aday5 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
++        _M_data->_M_aday6 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
++        _M_data->_M_aday7 = __u.__w;
++
++        // Month names, starting with "C"'s January.
++        __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
++        _M_data->_M_month01 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
++        _M_data->_M_month02 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
++        _M_data->_M_month03 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
++        _M_data->_M_month04 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
++        _M_data->_M_month05 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
++        _M_data->_M_month06 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
++        _M_data->_M_month07 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
++        _M_data->_M_month08 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
++        _M_data->_M_month09 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
++        _M_data->_M_month10 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
++        _M_data->_M_month11 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
++        _M_data->_M_month12 = __u.__w;
++
++        // Abbreviated month names, starting with "C"'s Jan.
++        __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
++        _M_data->_M_amonth01 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
++        _M_data->_M_amonth02 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
++        _M_data->_M_amonth03 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
++        _M_data->_M_amonth04 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
++        _M_data->_M_amonth05 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
++        _M_data->_M_amonth06 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
++        _M_data->_M_amonth07 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
++        _M_data->_M_amonth08 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
++        _M_data->_M_amonth09 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
++        _M_data->_M_amonth10 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
++        _M_data->_M_amonth11 = __u.__w;
++        __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
++        _M_data->_M_amonth12 = __u.__w;
++      }
++#endif // 0
++    }
++#endif
++}
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h
+@@ -0,0 +1,76 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++      _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) 
++    : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL), 
++      _M_name_timepunct(_S_get_c_name())
++    { _M_initialize_timepunct(); }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++                                   size_t __refs) 
++    : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL), 
++      _M_name_timepunct(NULL)
++    { 
++      const size_t __len = std::strlen(__s) + 1;
++      char* __tmp = new char[__len];
++      std::memcpy(__tmp, __s, __len);
++      _M_name_timepunct = __tmp;
++
++      try
++      { _M_initialize_timepunct(__cloc); }
++      catch(...)
++      {
++        delete [] _M_name_timepunct;
++        __throw_exception_again;
++      }
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++      if (_M_name_timepunct != _S_get_c_name())
++      delete [] _M_name_timepunct;
++      delete _M_data; 
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h
+@@ -0,0 +1,64 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++/** @file ctype_base.h
++ *  This is an internal header file, included by other library headers.
++ *  You should not attempt to use it directly.
++ */
++
++// Information as gleaned from /usr/include/ctype.h
++  
++  /// @brief  Base class for ctype.
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++ 
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t    mask;   
++    static const mask upper           = _ISupper;
++    static const mask lower   = _ISlower;
++    static const mask alpha   = _ISalpha;
++    static const mask digit   = _ISdigit;
++    static const mask xdigit  = _ISxdigit;
++    static const mask space   = _ISspace;
++    static const mask print   = _ISprint;
++    static const mask graph   = _ISalpha | _ISdigit | _ISpunct;
++    static const mask cntrl   = _IScntrl;
++    static const mask punct   = _ISpunct;
++    static const mask alnum   = _ISalpha | _ISdigit;
++  };
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++         && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++         && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+@@ -0,0 +1,92 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { return __C_ctype_b; }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++                   size_t __refs) 
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++  : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()), 
++  _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    memset(_M_widen, 0, sizeof(_M_widen));
++    memset(_M_narrow, 0, sizeof(_M_narrow));
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++      *__low = _M_toupper[static_cast<unsigned char>(*__low)];
++      ++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++      *__low = _M_tolower[static_cast<unsigned char>(*__low)];
++      ++__low;
++      }
++    return __high;
++  }
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h
+@@ -0,0 +1,44 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
+--- gcc-4.1.0-dist/libstdc++-v3/configure
++++ gcc-4.1.0/libstdc++-v3/configure
+@@ -4005,6 +4005,11 @@
+   lt_cv_deplibs_check_method=pass_all
+   ;;
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd* | knetbsd*-gnu)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5740,7 +5745,7 @@
+   enableval="$enable_clocale"
+       case "$enableval" in
+-       generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
++       generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
+        *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
+ echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
+    { (exit 1); exit 1; }; } ;;
+@@ -5765,6 +5770,9 @@
+   # Default to "generic".
+   if test $enable_clocale_flag = auto; then
+     case ${target_os} in
++      linux-uclibc*)
++        enable_clocale_flag=uclibc
++      ;;
+       linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+         cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+@@ -5995,6 +6003,76 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    uclibc)
++      echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++    ac_cv_prog_check_msgfmt="yes"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++  echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++  echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++        USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++      done
++
++
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+   esac
+   # This is where the testsuite looks for locale catalogs, using the
+--- gcc-4.1.0-dist/libstdc++-v3/configure.host
++++ gcc-4.1.0/libstdc++-v3/configure.host
+@@ -261,6 +261,12 @@
+     ;;
+ esac
++# Override for uClibc since linux-uclibc gets mishandled above.
++case "${host_os}" in
++  *-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
++esac
+ # Set any OS-dependent and CPU-dependent bits.
+ # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+--- gcc-4.1.0-dist/libstdc++-v3/crossconfig.m4
++++ gcc-4.1.0/libstdc++-v3/crossconfig.m4
+@@ -143,6 +143,99 @@
+       ;;
+     esac
+     ;;
++  *-uclibc*)
++# Temporary hack until we implement the float versions of the libm funcs
++    AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++      machine/endian.h machine/param.h sys/machine.h sys/types.h \
++      fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    AC_SUBST(SECTION_FLAGS)
++    GLIBCXX_CHECK_LINKER_FEATURES
++    GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
++    GLIBCXX_CHECK_WCHAR_T_SUPPORT
++
++    # For LFS.
++    AC_DEFINE(HAVE_INT64_T)
++    case "$target" in
++      *-uclinux*)
++        # Don't enable LFS with uClinux
++        ;;
++      *)
++        AC_DEFINE(_GLIBCXX_USE_LFS)
++    esac
++
++    # For showmanyc_helper().
++    AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
++    GLIBCXX_CHECK_POLL
++    GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
++
++    # For xsputn_2().
++    AC_CHECK_HEADERS(sys/uio.h)
++    GLIBCXX_CHECK_WRITEV
++
++#     AC_DEFINE(HAVE_ACOSF)
++#     AC_DEFINE(HAVE_ASINF)
++#     AC_DEFINE(HAVE_ATANF)
++#     AC_DEFINE(HAVE_ATAN2F)
++    AC_DEFINE(HAVE_CEILF)
++    AC_DEFINE(HAVE_COPYSIGN)
++#     AC_DEFINE(HAVE_COPYSIGNF)
++#     AC_DEFINE(HAVE_COSF)
++#     AC_DEFINE(HAVE_COSHF)
++#     AC_DEFINE(HAVE_EXPF)
++#     AC_DEFINE(HAVE_FABSF)
++    AC_DEFINE(HAVE_FINITE)
++    AC_DEFINE(HAVE_FINITEF)
++    AC_DEFINE(HAVE_FLOORF)
++#     AC_DEFINE(HAVE_FMODF)
++#     AC_DEFINE(HAVE_FREXPF)
++    AC_DEFINE(HAVE_HYPOT)
++#     AC_DEFINE(HAVE_HYPOTF)
++    AC_DEFINE(HAVE_ISINF)
++    AC_DEFINE(HAVE_ISINFF)
++    AC_DEFINE(HAVE_ISNAN)
++    AC_DEFINE(HAVE_ISNANF)
++#     AC_DEFINE(HAVE_LOGF)
++#     AC_DEFINE(HAVE_LOG10F)
++#     AC_DEFINE(HAVE_MODFF)
++#     AC_DEFINE(HAVE_SINF)
++#     AC_DEFINE(HAVE_SINHF)
++#     AC_DEFINE(HAVE_SINCOS)
++#     AC_DEFINE(HAVE_SINCOSF)
++    AC_DEFINE(HAVE_SQRTF)
++#     AC_DEFINE(HAVE_TANF)
++#     AC_DEFINE(HAVE_TANHF)
++    if test x"long_double_math_on_this_cpu" = x"yes"; then
++      AC_MSG_ERROR([long_double_math_on_this_cpu is yes!])
++#       AC_DEFINE(HAVE_ACOSL)
++#       AC_DEFINE(HAVE_ASINL)
++#       AC_DEFINE(HAVE_ATANL)
++#       AC_DEFINE(HAVE_ATAN2L)
++#       AC_DEFINE(HAVE_CEILL)
++#       AC_DEFINE(HAVE_COPYSIGNL)
++#       AC_DEFINE(HAVE_COSL)
++#       AC_DEFINE(HAVE_COSHL)
++#       AC_DEFINE(HAVE_EXPL)
++#       AC_DEFINE(HAVE_FABSL)
++#       AC_DEFINE(HAVE_FINITEL)
++#       AC_DEFINE(HAVE_FLOORL)
++#       AC_DEFINE(HAVE_FMODL)
++#       AC_DEFINE(HAVE_FREXPL)
++#       AC_DEFINE(HAVE_HYPOTL)
++#       AC_DEFINE(HAVE_ISINFL)
++#       AC_DEFINE(HAVE_ISNANL)
++#       AC_DEFINE(HAVE_LOGL)
++#       AC_DEFINE(HAVE_LOG10L)
++#       AC_DEFINE(HAVE_MODFL)
++#       AC_DEFINE(HAVE_POWL)
++#       AC_DEFINE(HAVE_SINL)
++#       AC_DEFINE(HAVE_SINHL)
++#       AC_DEFINE(HAVE_SINCOSL)
++#       AC_DEFINE(HAVE_SQRTL)
++#       AC_DEFINE(HAVE_TANL)
++#       AC_DEFINE(HAVE_TANHL)
++    fi
++    ;;
+   *-linux* | *-uclinux* | *-gnu* | *-kfreebsd*-gnu | *-knetbsd*-gnu)
+     AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+       machine/endian.h machine/param.h sys/machine.h sys/types.h \
+@@ -157,7 +250,7 @@
+     AC_DEFINE(HAVE_INT64_T)
+     case "$target" in
+       *-uclinux*)
+-        # Don't enable LFS with uClibc
++        # Don't enable LFS with uClinux
+         ;;
+       *)
+         AC_DEFINE(_GLIBCXX_USE_LFS)
+--- gcc-4.1.0-dist/libstdc++-v3/include/c_compatibility/wchar.h
++++ gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+--- gcc-4.1.0-dist/libstdc++-v3/include/c_std/std_cwchar.h
++++ gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h
+@@ -180,7 +180,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
diff --git a/packages/mamona/gcc-noemu-4.1.2/300-libstdc++-pic.patch b/packages/mamona/gcc-noemu-4.1.2/300-libstdc++-pic.patch
new file mode 100644 (file)
index 0000000..89d03a8
--- /dev/null
@@ -0,0 +1,46 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc-4.1.0/libstdc++-v3/src/Makefile.am     2004-11-15 17:33:05.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.am     2005-04-25 20:05:59.186930896 -0500
+@@ -214,6 +214,10 @@
+         $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
++install-exec-local:
++      $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++      $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+--- gcc-4.1.0/libstdc++-v3/src/Makefile.in     2005-04-11 19:13:08.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.in     2005-04-25 20:12:33.284316275 -0500
+@@ -627,7 +627,7 @@
+ install-data-am: install-data-local
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+ install-info: install-info-am
+@@ -660,6 +660,7 @@
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-data-local install-exec \
++      install-exec-local \
+       install-exec-am install-info install-info-am install-man \
+       install-strip install-toolexeclibLTLIBRARIES installcheck \
+       installcheck-am installdirs maintainer-clean \
+@@ -745,6 +746,11 @@
+ install_debug:
+       (cd ${debugdir} && $(MAKE) \
+       toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++      $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++      $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/packages/mamona/gcc-noemu-4.1.2/301-missing-execinfo_h.patch b/packages/mamona/gcc-noemu-4.1.2/301-missing-execinfo_h.patch
new file mode 100644 (file)
index 0000000..0e2092f
--- /dev/null
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/boehm-gc/include/gc.h-orig       2005-04-28 22:28:57.000000000 -0500
++++ gcc-4.0.0/boehm-gc/include/gc.h    2005-04-28 22:30:38.000000000 -0500
+@@ -500,7 +500,7 @@
+ #ifdef __linux__
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+-     && !defined(__ia64__)
++     && !defined(__ia64__) && !defined(__UCLIBC__)
+ #   ifndef GC_HAVE_BUILTIN_BACKTRACE
+ #     define GC_HAVE_BUILTIN_BACKTRACE
+ #   endif
diff --git a/packages/mamona/gcc-noemu-4.1.2/302-c99-snprintf.patch b/packages/mamona/gcc-noemu-4.1.2/302-c99-snprintf.patch
new file mode 100644 (file)
index 0000000..dfb22d6
--- /dev/null
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig     2005-04-29 00:08:41.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h  2005-04-29 00:08:45.000000000 -0500
+@@ -142,7 +142,7 @@
+   using ::vsprintf;
+ }
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
+ #undef snprintf
+ #undef vfscanf
diff --git a/packages/mamona/gcc-noemu-4.1.2/303-c99-complex-ugly-hack.patch b/packages/mamona/gcc-noemu-4.1.2/303-c99-complex-ugly-hack.patch
new file mode 100644 (file)
index 0000000..2ccc80d
--- /dev/null
@@ -0,0 +1,12 @@
+--- gcc-4.0.0/libstdc++-v3/configure-old       2005-04-30 22:04:48.061603912 -0500
++++ gcc-4.0.0/libstdc++-v3/configure   2005-04-30 22:06:13.678588152 -0500
+@@ -7194,6 +7194,9 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <complex.h>
++#ifdef __UCLIBC__
++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs
++#endif
+ int
+ main ()
+ {
diff --git a/packages/mamona/gcc-noemu-4.1.2/304-index_macro.patch b/packages/mamona/gcc-noemu-4.1.2/304-index_macro.patch
new file mode 100644 (file)
index 0000000..1fac112
--- /dev/null
@@ -0,0 +1,24 @@
+--- gcc-4.1.0/libstdc++-v3/include/ext/rope.mps        2006-03-24 01:49:51 +0100
++++ gcc-4.1.0/libstdc++-v3/include/ext/rope    2006-03-24 01:49:37 +0100
+@@ -59,6 +59,9 @@
+ #include <bits/allocator.h>
+ #include <ext/hash_fun.h>
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ # ifdef __GC
+ #   define __GC_CONST const
+ # else
+--- gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h.mps  2006-03-24 01:50:04 +0100
++++ gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h      2006-03-24 01:50:28 +0100
+@@ -53,6 +53,9 @@
+ #include <ext/memory> // For uninitialized_copy_n
+ #include <ext/numeric> // For power
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ namespace __gnu_cxx
+ {
+   using std::size_t;
diff --git a/packages/mamona/gcc-noemu-4.1.2/602-sdk-libstdc++-includes.patch b/packages/mamona/gcc-noemu-4.1.2/602-sdk-libstdc++-includes.patch
new file mode 100644 (file)
index 0000000..23fce75
--- /dev/null
@@ -0,0 +1,20 @@
+--- gcc-4.1.0/libstdc++-v3/fragment.am 2005-03-21 11:40:14.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/fragment.am 2005-04-25 20:14:39.856251785 -0500
+@@ -21,5 +21,5 @@
+       $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+--- gcc-4.1.0/libstdc++-v3/libmath/Makefile.am 2005-03-21 11:40:18.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/libmath/Makefile.am 2005-04-25 20:14:39.682280735 -0500
+@@ -35,7 +35,7 @@
+ libmath_la_SOURCES = stubs.c
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
diff --git a/packages/mamona/gcc-noemu-4.1.2/740-sh-pr24836.patch b/packages/mamona/gcc-noemu-4.1.2/740-sh-pr24836.patch
new file mode 100644 (file)
index 0000000..7992282
--- /dev/null
@@ -0,0 +1,25 @@
+http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348
+http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
+
+--- gcc/gcc/configure.ac       (revision 106699)
++++ gcc/gcc/configure.ac       (working copy)
+@@ -2446,7 +2446,7 @@
+       tls_first_minor=14
+       tls_as_opt="-m64 -Aesame --fatal-warnings"
+       ;;
+-  sh-*-* | sh[34]-*-*)
++  sh-*-* | sh[34]*-*-*)
+     conftest_s='
+       .section ".tdata","awT",@progbits
+ foo:  .long   25
+--- gcc/gcc/configure
++++ gcc/gcc/configure
+@@ -14846,7 +14846,7 @@
+       tls_first_minor=14
+       tls_as_opt="-m64 -Aesame --fatal-warnings"
+       ;;
+-  sh-*-* | sh[34]-*-*)
++  sh-*-* | sh[34]*-*-*)
+     conftest_s='
+       .section ".tdata","awT",@progbits
+ foo:  .long   25
diff --git a/packages/mamona/gcc-noemu-4.1.2/800-arm-bigendian.patch b/packages/mamona/gcc-noemu-4.1.2/800-arm-bigendian.patch
new file mode 100644 (file)
index 0000000..0a94174
--- /dev/null
@@ -0,0 +1,127 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+Index: gcc-4.1.1/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/linux-elf.h
++++ gcc-4.1.1/gcc/config/arm/linux-elf.h
+@@ -28,19 +28,33 @@
+ #undef  TARGET_VERSION
+ #define TARGET_VERSION  fputs (" (ARM GNU/Linux with ELF)", stderr);
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ #undef  TARGET_DEFAULT_FLOAT_ABI
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
+ #undef  TARGET_DEFAULT
+-#define TARGET_DEFAULT (0)
++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+ #undef  MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+-      { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++      { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+ /* Now we define the strings used to build the spec file.  */
+ #undef  LIB_SPEC
+@@ -61,7 +75,7 @@
+    %{rdynamic:-export-dynamic} \
+    %{!dynamic-linker:-dynamic-linker " LINUX_TARGET_INTERPRETER "} \
+    -X \
+-   %{mbig-endian:-EB}" \
++   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+    SUBTARGET_EXTRA_LINK_SPEC
+ #undef  LINK_SPEC
+Index: gcc-4.1.1/gcc/config.gcc
+===================================================================
+--- gcc-4.1.1.orig/gcc/config.gcc
++++ gcc-4.1.1/gcc/config.gcc
+@@ -672,6 +672,11 @@ arm*-*-netbsd*)
+       ;;
+ arm*-*-linux*)                        # ARM GNU/Linux with ELF
+       tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" 
++      case $target in
++      arm*b-*)
++              tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++              ;;
++      esac
+       tmake_file="${tmake_file} t-linux arm/t-arm"
+       case ${target} in
+       arm*-*-linux-gnueabi)
+Index: gcc-4.1.1/gcc/config/arm/linux-eabi.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/linux-eabi.h
++++ gcc-4.1.1/gcc/config/arm/linux-eabi.h
+@@ -20,6 +20,17 @@
+    the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.  */
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#undef TARGET_LINKER_EMULATION
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_LINKER_EMULATION "armelfb_linux_eabi"
++#else
++#define TARGET_LINKER_EMULATION "armelf_linux_eabi"
++#endif
++
+ /* On EABI GNU/Linux, we want both the BPABI builtins and the
+    GNU/Linux builtins.  */
+ #undef TARGET_OS_CPP_BUILTINS
+@@ -48,7 +59,7 @@
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+    GNU/Linux binaries on an EABI system.  */
+Index: gcc-4.1.1/gcc/config/arm/bpabi.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/bpabi.h
++++ gcc-4.1.1/gcc/config/arm/bpabi.h
+@@ -33,9 +33,19 @@
+ #undef FPUTYPE_DEFAULT
+ #define FPUTYPE_DEFAULT FPUTYPE_VFP
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#endif
++
+ /* EABI targets should enable interworking by default.  */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT MASK_INTERWORK
++#define TARGET_DEFAULT (MASK_INTERWORK | TARGET_ENDIAN_DEFAULT)
+ /* The ARM BPABI functions return a boolean; they use no special
+    calling convention.  */
diff --git a/packages/mamona/gcc-noemu-4.1.2/801-arm-bigendian-eabi.patch b/packages/mamona/gcc-noemu-4.1.2/801-arm-bigendian-eabi.patch
new file mode 100644 (file)
index 0000000..54490fc
--- /dev/null
@@ -0,0 +1,14 @@
+Index: gcc-4.1.1/gcc/config/arm/linux-eabi.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/linux-eabi.h 2007-02-20 14:51:33.416193250 +0100
++++ gcc-4.1.1/gcc/config/arm/linux-eabi.h      2007-02-20 14:52:11.622581000 +0100
+@@ -48,7 +48,8 @@
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
++#define SUBTARGET_EXTRA_LINK_SPEC \
++    " %{mbig-endian:-m armelfb_linux_eabi} %{mlittle-endian:-m armelf_linux_eabi} "
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+    GNU/Linux binaries on an EABI system.  */
diff --git a/packages/mamona/gcc-noemu-4.1.2/README b/packages/mamona/gcc-noemu-4.1.2/README
new file mode 100644 (file)
index 0000000..b85840d
--- /dev/null
@@ -0,0 +1,4 @@
+The numbered patches come from
+http://www.uclibc.org/cgi-bin/viewcvs.cgi/trunk/buildroot/toolchain/gcc/4.1.1/
+Other patches are locally added to fix things (mostly inherited and reapplied
+from gcc 3.4.4 where applicable)
diff --git a/packages/mamona/gcc-noemu-4.1.2/arm-nolibfloat.patch b/packages/mamona/gcc-noemu-4.1.2/arm-nolibfloat.patch
new file mode 100644 (file)
index 0000000..c4897c0
--- /dev/null
@@ -0,0 +1,24 @@
+# Dimitry Andric <dimitry@andric.com>, 2004-05-01
+#
+# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
+#   anymore.  (The required functions are now in libgcc.)
+# 
+# Fixes errors like
+# arm-softfloat-linux-gnu/3.4.0/../../../../arm-softfloat-linux-gnu/bin/ld: cannot find -lfloat
+# collect2: ld returned 1 exit status
+# make[2]: *** [arm-softfloat-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/iconvdata/ISO8859-1.so] Error 1
+# when building glibc-2.3.3 with gcc-3.4.0 for arm-softfloat
+
+Index: gcc-4.0.2/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.0.2.orig/gcc/config/arm/linux-elf.h  2005-03-04 16:14:01.000000000 +0000
++++ gcc-4.0.2/gcc/config/arm/linux-elf.h       2005-11-11 18:02:54.000000000 +0000
+@@ -56,7 +56,7 @@
+    %{shared:-lc} \
+    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
diff --git a/packages/mamona/gcc-noemu-4.1.2/arm-softfloat.patch b/packages/mamona/gcc-noemu-4.1.2/arm-softfloat.patch
new file mode 100644 (file)
index 0000000..c86c83e
--- /dev/null
@@ -0,0 +1,16 @@
+Index: gcc-4.0.2/gcc/config/arm/t-linux
+===================================================================
+--- gcc-4.0.2.orig/gcc/config/arm/t-linux      2004-05-15 12:41:35.000000000 +0000
++++ gcc-4.0.2/gcc/config/arm/t-linux   2005-11-11 16:07:53.000000000 +0000
+@@ -4,7 +4,10 @@
+ LIBGCC2_DEBUG_CFLAGS = -g0
+ LIB1ASMSRC = arm/lib1funcs.asm
+-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
++LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
++    _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
++    _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++    _fixsfsi _fixunssfsi _floatdidf _floatdisf
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
+ # MULTILIB_DIRNAMES = hard-float soft-float
diff --git a/packages/mamona/gcc-noemu-4.1.2/arm-thumb-cache.patch b/packages/mamona/gcc-noemu-4.1.2/arm-thumb-cache.patch
new file mode 100644 (file)
index 0000000..fa63846
--- /dev/null
@@ -0,0 +1,29 @@
+--- gcc-4.1.1/gcc/config/arm/linux-gas.h-      2005-06-25 03:22:41.000000000 +0200
++++ gcc-4.1.1/gcc/config/arm/linux-gas.h       2006-06-18 10:23:46.000000000 +0200
+@@ -44,6 +44,7 @@
+ /* Clear the instruction cache from `beg' to `end'.  This makes an
+    inline system call to SYS_cacheflush.  */
++#if !defined(__thumb__)
+ #define CLEAR_INSN_CACHE(BEG, END)                                    \
+ {                                                                     \
+   register unsigned long _beg __asm ("a1") = (unsigned long) (BEG);   \
+@@ -53,3 +54,18 @@
+                   : "=r" (_beg)                                       \
+                   : "0" (_beg), "r" (_end), "r" (_flg));              \
+ }
++#else
++#define CLEAR_INSN_CACHE(BEG, END)                                    \
++{                                                                     \
++  register unsigned long _beg __asm ("a1") = (unsigned long) (BEG);   \
++  register unsigned long _end __asm ("a2") = (unsigned long) (END);   \
++  register unsigned long _flg __asm ("a3") = 0;                               \
++  register unsigned long _swi __asm ("a4") = 0xf0002;                 \
++  __asm __volatile ("push      {r7}\n"                                 \
++               "       mov     r7,a4\n"                                \
++               "       swi     0       @ sys_cacheflush\n"             \
++               "       pop     {r7}\n"                                 \
++                   : "=r" (_beg)                                       \
++                   : "0" (_beg), "r" (_end), "r" (_flg), "r" (_swi));  \
++}
++#endif
diff --git a/packages/mamona/gcc-noemu-4.1.2/arm-thumb.patch b/packages/mamona/gcc-noemu-4.1.2/arm-thumb.patch
new file mode 100644 (file)
index 0000000..69e2f68
--- /dev/null
@@ -0,0 +1,64 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- gcc-4.1.1/gcc/config/arm/lib1funcs.asm~gcc
++++ gcc-4.1.1/gcc/config/arm/lib1funcs.asm
+@@ -995,10 +995,24 @@
+       .code   32
+       FUNC_START div0
++#if ! defined __thumb__
+       stmfd   sp!, {r1, lr}
+       mov     r0, #SIGFPE
+       bl      SYM(raise) __PLT__
+       RETLDM  r1
++#else
++       push    {r1, lr}
++      mov     r0, #SIGFPE
++      bl      SYM(raise) __PLT__
++#if __ARM_ARCH__ > 4
++       pop     {r1, pc}
++#else
++       @ on 4T that won't work
++       pop     {r1}
++       pop     {r3}
++       bx      r3
++#endif
++#endif
+       FUNC_END div0
+       
+@@ -1141,11 +1155,12 @@
+    code here switches to the correct mode before executing the function.  */
+       
+       .text
+-      .align 0
++      .align 1
+         .force_thumb
+ .macro call_via register
+       THUMB_FUNC_START _call_via_\register
++       .hidden SYM (_call_via_\register)
+       bx      \register
+       nop
+@@ -1242,6 +1257,7 @@
+       .code   16
+       THUMB_FUNC_START _interwork_call_via_\register
++       .hidden SYM (_interwork_call_via_\register)
+       bx      pc
+       nop
+--- gcc-4.1.1/gcc/config/arm/t-linux~gcc
++++ gcc-4.1.1/gcc/config/arm/t-linux
+@@ -7,6 +7,7 @@
+ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
+     _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
+     _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++    _call_via_rX \
+     _fixsfsi _fixunssfsi _floatdidf _floatdisf
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
diff --git a/packages/mamona/gcc-noemu-4.1.2/cache-amnesia.patch b/packages/mamona/gcc-noemu-4.1.2/cache-amnesia.patch
new file mode 100644 (file)
index 0000000..ef7cd11
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/gcc/configure b/gcc/configure
+index 44620ab..6e1830c 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -12272,7 +12272,7 @@ else
+       esac
+       saved_CFLAGS="${CFLAGS}"
+       CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
+-      ${realsrcdir}/configure \
++      CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
+               --enable-languages=${enable_languages-all} \
+               --target=$target_alias --host=$build_alias --build=$build_alias
+       CFLAGS="${saved_CFLAGS}"
diff --git a/packages/mamona/gcc-noemu-4.1.2/fix-ICE-in-arm_unwind_emit_set.diff b/packages/mamona/gcc-noemu-4.1.2/fix-ICE-in-arm_unwind_emit_set.diff
new file mode 100644 (file)
index 0000000..568e15a
--- /dev/null
@@ -0,0 +1,18 @@
+--- trunk/gcc/config/arm/arm.c 2006/09/19 13:18:27     117055
++++ trunk/gcc/config/arm/arm.c 2006/09/19 13:19:24     117056
+@@ -15415,6 +15415,15 @@
+         /* Move from sp to reg.  */
+         asm_fprintf (asm_out_file, "\t.movsp %r\n", REGNO (e0));
+       }
++     else if (GET_CODE (e1) == PLUS
++            && GET_CODE (XEXP (e1, 0)) == REG
++            && REGNO (XEXP (e1, 0)) == SP_REGNUM
++            && GET_CODE (XEXP (e1, 1)) == CONST_INT)
++      {
++        /* Set reg to offset from sp.  */
++        asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n",
++                     REGNO (e0), (int)INTVAL(XEXP (e1, 1)));
++      }
+       else
+       abort ();
+       break;
diff --git a/packages/mamona/gcc-noemu-4.1.2/gcc-4.0.2-e300c2c3.patch b/packages/mamona/gcc-noemu-4.1.2/gcc-4.0.2-e300c2c3.patch
new file mode 100644 (file)
index 0000000..736ac4b
--- /dev/null
@@ -0,0 +1,311 @@
+Adds support for Freescale Power architecture e300c2 and e300c3 cores.
+http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
+
+Leon Woestenberg <leonw@mailcan.com>
+
+Index: gcc-4.1.2/gcc/config/rs6000/e300c2c3.md
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.1.2/gcc/config/rs6000/e300c2c3.md    2007-10-18 15:32:51.000000000 +0200
+@@ -0,0 +1,189 @@
++;; Pipeline description for Motorola PowerPC e300c3 core.
++;;   Copyright (C) 2003 Free Software Foundation, Inc.
++;;
++;; This file is part of GCC.
++
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published
++;; by the Free Software Foundation; either version 2, or (at your
++;; option) any later version.
++
++;; GCC is distributed in the hope that it will be useful, but WITHOUT
++;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
++;; License for more details.
++
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING.  If not, write to the
++;; Free Software Foundation, 59 Temple Place - Suite 330, Boston,
++;; MA 02111-1307, USA.
++
++(define_automaton "ppce300c3_most,ppce300c3_long,ppce300c3_retire")
++(define_cpu_unit "ppce300c3_decode_0,ppce300c3_decode_1" "ppce300c3_most")
++
++;; We don't simulate general issue queue (GIC).  If we have SU insn
++;; and then SU1 insn, they can not be issued on the same cycle
++;; (although SU1 insn and then SU insn can be issued) because the SU
++;; insn will go to SU1 from GIC0 entry.  Fortunately, the first cycle
++;; multipass insn scheduling will find the situation and issue the SU1
++;; insn and then the SU insn.
++(define_cpu_unit "ppce300c3_issue_0,ppce300c3_issue_1"   "ppce300c3_most")
++
++;; We could describe completion buffers slots in combination with the
++;; retirement units and the order of completion but the result
++;; automaton would behave in the same way because we can not describe
++;; real latency time with taking in order completion into account.
++;; Actually we could define the real latency time by querying reserved
++;; automaton units but the current scheduler uses latency time before
++;; issuing insns and making any reservations.
++;;
++;; So our description is aimed to achieve a insn schedule in which the
++;; insns would not wait in the completion buffer.
++(define_cpu_unit "ppce300c3_retire_0,ppce300c3_retire_1" "ppce300c3_retire")
++
++;; Branch unit:
++(define_cpu_unit "ppce300c3_bu" "ppce300c3_most")
++
++;; IU:
++(define_cpu_unit "ppce300c3_iu0_stage0,ppce300c3_iu1_stage0" "ppce300c3_most")
++
++;; IU: This used to describe non-pipelined division.
++(define_cpu_unit "ppce300c3_mu_div" "ppce300c3_long")
++
++;; SRU:
++(define_cpu_unit "ppce300c3_sru_stage0" "ppce300c3_most")
++
++;; Here we simplified LSU unit description not describing the stages.
++(define_cpu_unit "ppce300c3_lsu" "ppce300c3_most")
++
++;; FPU:
++(define_cpu_unit "ppce300c3_fpu" "ppce300c3_most")
++
++;; The following units are used to make automata deterministic
++(define_cpu_unit "present_ppce300c3_decode_0" "ppce300c3_most")
++(define_cpu_unit "present_ppce300c3_issue_0" "ppce300c3_most")
++(define_cpu_unit "present_ppce300c3_retire_0" "ppce300c3_retire")
++(define_cpu_unit "present_ppce300c3_iu0_stage0" "ppce300c3_most")
++
++;; The following sets to make automata deterministic when option ndfa is used.
++(presence_set "present_ppce300c3_decode_0" "ppce300c3_decode_0")
++(presence_set "present_ppce300c3_issue_0" "ppce300c3_issue_0")
++(presence_set "present_ppce300c3_retire_0" "ppce300c3_retire_0")
++(presence_set "present_ppce300c3_iu0_stage0" "ppce300c3_iu0_stage0")
++
++;; Some useful abbreviations.
++(define_reservation "ppce300c3_decode"
++    "ppce300c3_decode_0|ppce300c3_decode_1+present_ppce300c3_decode_0")
++(define_reservation "ppce300c3_issue"
++    "ppce300c3_issue_0|ppce300c3_issue_1+present_ppce300c3_issue_0")
++(define_reservation "ppce300c3_retire"
++   "ppce300c3_retire_0|ppce300c3_retire_1+present_ppce300c3_retire_0")
++(define_reservation "ppce300c3_iu_stage0"
++   "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0")
++
++;; Compares can be executed either one of the IU or SRU
++(define_insn_reservation "ppce300c3_cmp" 1
++  (and (eq_attr "type" "cmp,compare,delayed_compare,fast_compare")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_stage0) \
++        +ppce300c3_retire")
++
++;; Other one cycle IU insns
++(define_insn_reservation "ppce300c3_iu" 1
++  (and (eq_attr "type" "integer,insert_word")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire")
++
++;; Branch.  Actually this latency time is not used by the scheduler.
++(define_insn_reservation "ppce300c3_branch" 1
++  (and (eq_attr "type" "jmpreg,branch")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire")
++
++;; Multiply is non-pipelined but can be executed in any IU
++(define_insn_reservation "ppce300c3_multiply" 2
++  (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \
++   ppce300c3_iu_stage0+ppce300c3_retire")
++
++;; Divide.  We use the average latency time here.  We omit reserving a
++;; retire unit because of the result automata will be huge.
++(define_insn_reservation "ppce300c3_divide" 20
++  (and (eq_attr "type" "idiv")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,\
++   ppce300c3_mu_div*19")
++
++;; CR logical
++(define_insn_reservation "ppce300c3_cr_logical" 1
++  (and (eq_attr "type" "cr_logical,delayed_cr")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Mfcr
++(define_insn_reservation "ppce300c3_mfcr" 1
++  (and (eq_attr "type" "mfcr")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Mtcrf
++(define_insn_reservation "ppce300c3_mtcrf" 1
++  (and (eq_attr "type" "mtcr")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Mtjmpr
++(define_insn_reservation "ppce300c3_mtjmpr" 1
++  (and (eq_attr "type" "mtjmpr,mfjmpr")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Float point instructions
++(define_insn_reservation "ppce300c3_fpcompare" 3
++  (and (eq_attr "type" "fpcompare")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_fp" 3
++  (and (eq_attr "type" "fp")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_dmul" 4
++  (and (eq_attr "type" "dmul")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu,nothing,ppce300c3_retire")
++
++; Divides are not pipelined
++(define_insn_reservation "ppce300c3_sdiv" 18
++  (and (eq_attr "type" "sdiv")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*17")
++
++(define_insn_reservation "ppce300c3_ddiv" 33
++  (and (eq_attr "type" "ddiv")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32")
++
++;; Loads
++(define_insn_reservation "ppce300c3_load" 2
++  (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_fpload" 2
++  (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
++
++;; Stores.
++(define_insn_reservation "ppce300c3_store" 2
++  (and (eq_attr "type" "store,store_ux,store_u")
++       (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_fpstore" 2
++  (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
++       (eq_attr "cpu" "ppce300c3"))
++  "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
+Index: gcc-4.1.2/gcc/config/rs6000/rs6000.c
+===================================================================
+--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.c  2006-12-16 20:24:56.000000000 +0100
++++ gcc-4.1.2/gcc/config/rs6000/rs6000.c       2007-10-18 15:34:26.000000000 +0200
+@@ -557,6 +557,21 @@
+   COSTS_N_INSNS (29),   /* ddiv */
+ };
++/* Instruction costs on E300C2 and E300C3 cores.  */
++static const
++struct processor_costs ppce300c2c3_cost = {
++  COSTS_N_INSNS (4),    /* mulsi */
++  COSTS_N_INSNS (4),    /* mulsi_const */
++  COSTS_N_INSNS (4),    /* mulsi_const9 */
++  COSTS_N_INSNS (4),    /* muldi */
++  COSTS_N_INSNS (19),   /* divsi */
++  COSTS_N_INSNS (19),   /* divdi */
++  COSTS_N_INSNS (3),    /* fp */
++  COSTS_N_INSNS (4),    /* dmul */
++  COSTS_N_INSNS (18),   /* sdiv */
++  COSTS_N_INSNS (33),   /* ddiv */
++};
++
+ /* Instruction costs on POWER4 and POWER5 processors.  */
+ static const
+ struct processor_costs power4_cost = {
+@@ -1140,6 +1155,8 @@
+        /* 8548 has a dummy entry for now.  */
+        {"8548", PROCESSOR_PPC8540,
+         POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_STRICT_ALIGN},
++       {"e300c2", PROCESSOR_PPCE300C2, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
++       {"e300c3", PROCESSOR_PPCE300C3, POWERPC_BASE_MASK},
+        {"860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
+        {"970", PROCESSOR_POWER4,
+         POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64},
+@@ -1529,6 +1546,11 @@
+       rs6000_cost = &ppc8540_cost;
+       break;
++      case PROCESSOR_PPCE300C2:
++      case PROCESSOR_PPCE300C3:
++      rs6000_cost = &ppce300c2c3_cost;
++      break;
++
+       case PROCESSOR_POWER4:
+       case PROCESSOR_POWER5:
+       rs6000_cost = &power4_cost;
+@@ -16647,6 +16669,8 @@
+   case CPU_PPC750:
+   case CPU_PPC7400:
+   case CPU_PPC8540:
++  case CPU_PPCE300C2:
++  case CPU_PPCE300C3:
+     return 2;
+   case CPU_RIOS2:
+   case CPU_PPC604:
+Index: gcc-4.1.2/gcc/config/rs6000/rs6000.h
+===================================================================
+--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.h  2006-11-18 01:25:49.000000000 +0100
++++ gcc-4.1.2/gcc/config/rs6000/rs6000.h       2007-10-18 15:32:51.000000000 +0200
+@@ -111,6 +111,8 @@
+ %{mcpu=970: -mpower4 -maltivec} \
+ %{mcpu=G5: -mpower4 -maltivec} \
+ %{mcpu=8540: -me500} \
++%{mcpu=e300c2: -mppc} \
++%{mcpu=e300c3: -mppc -mpmr} \
+ %{maltivec: -maltivec} \
+ -many"
+@@ -211,6 +213,8 @@
+    PROCESSOR_PPC7400,
+    PROCESSOR_PPC7450,
+    PROCESSOR_PPC8540,
++   PROCESSOR_PPCE300C2,
++   PROCESSOR_PPCE300C3,
+    PROCESSOR_POWER4,
+    PROCESSOR_POWER5
+ };
+Index: gcc-4.1.2/gcc/config/rs6000/rs6000.md
+===================================================================
+--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.md 2006-12-16 20:24:56.000000000 +0100
++++ gcc-4.1.2/gcc/config/rs6000/rs6000.md      2007-10-18 15:32:51.000000000 +0200
+@@ -103,7 +103,7 @@
+ ;; Processor type -- this attribute must exactly match the processor_type
+ ;; enumeration in rs6000.h.
+-(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5"
++(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppce300c2,ppce300c3,power4,power5"
+   (const (symbol_ref "rs6000_cpu_attr")))
+ (automata_option "ndfa")
+@@ -119,6 +119,7 @@
+ (include "7xx.md")
+ (include "7450.md")
+ (include "8540.md")
++(include "e300c2c3.md")
+ (include "power4.md")
+ (include "power5.md")
+Index: gcc-4.1.2/gcc/config.gcc
+===================================================================
+--- gcc-4.1.2.orig/gcc/config.gcc      2007-10-18 15:26:23.000000000 +0200
++++ gcc-4.1.2/gcc/config.gcc   2007-10-18 15:32:51.000000000 +0200
+@@ -2710,7 +2710,7 @@
+                       | rios | rios1 | rios2 | rsc | rsc1 | rs64a \
+                       | 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \
+                       | 601 | 602 | 603 | 603e | ec603e | 604 \
+-                      | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
++                      | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 | e300c[23] \
+                       | 854[08] | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5)
+                               # OK
+                               ;;
diff --git a/packages/mamona/gcc-noemu-4.1.2/gcc41-configure.in.patch b/packages/mamona/gcc-noemu-4.1.2/gcc41-configure.in.patch
new file mode 100644 (file)
index 0000000..3d33bcb
--- /dev/null
@@ -0,0 +1,22 @@
+--- gcc-3.4.4/configure.in.orig        2005-08-09 19:57:51.504323183 -0700
++++ gcc-3.4.4/configure.in     2005-08-09 20:00:12.073168623 -0700
+@@ -1907,7 +1907,7 @@
+   *) gxx_include_dir=${with_gxx_include_dir} ;;
+ esac
+-FLAGS_FOR_TARGET=
++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
+ case " $target_configdirs " in
+  *" newlib "*)
+   case " $target_configargs " in
+--- gcc-3.4.4/configure.orig   2005-08-09 21:02:29.668360660 -0700
++++ gcc-3.4.4/configure        2005-08-09 21:02:50.157649970 -0700
+@@ -2669,7 +2669,7 @@
+   *) gxx_include_dir=${with_gxx_include_dir} ;;
+ esac
+-FLAGS_FOR_TARGET=
++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
+ case " $target_configdirs " in
+  *" newlib "*)
+   case " $target_configargs " in
diff --git a/packages/mamona/gcc-noemu-4.1.2/gfortran.patch b/packages/mamona/gcc-noemu-4.1.2/gfortran.patch
new file mode 100644 (file)
index 0000000..96905e5
--- /dev/null
@@ -0,0 +1,40 @@
+The patch below fixes a crash building libgfortran on arm-linux-gnueabi.
+
+This target doesn't really have a 128-bit integer type, however it does use 
+TImode to represent the return value of certain special ABI defined library 
+functions. This results in type_for_size(TImode) being called.
+
+Because TImode deosn't correspond to any gfortran integer kind 
+gfc_type_for_size returns NULL and we segfault shortly after.
+
+The patch below fixes this by making gfc_type_for_size handle TImode in the 
+same way as the C frontend.
+
+Tested on x86_64-linux and arm-linux-gnueabi.
+Applied to trunk.
+
+Paul
+
+2007-05-15  Paul Brook  <paul@codesourcery.com>
+
+       gcc/fortran/
+       * trans-types.c (gfc_type_for_size): Handle signed TImode.
+
+Index: gcc-4.2.1/gcc/fortran/trans-types.c
+===================================================================
+--- gcc-4.2.1/gcc/fortran/trans-types.c        (revision 170435)
++++ gcc-4.2.1/gcc/fortran/trans-types.c        (working copy)
+@@ -1800,6 +1800,13 @@ gfc_type_for_size (unsigned bits, int un
+         if (type && bits == TYPE_PRECISION (type))
+           return type;
+       }
++
++      /* Handle TImode as a special case because it is used by some backends
++         (eg. ARM) even though it is not available for normal use.  */
++#if HOST_BITS_PER_WIDE_INT >= 64
++      if (bits == TYPE_PRECISION (intTI_type_node))
++      return intTI_type_node;
++#endif
+     }
+   else
+     {
diff --git a/packages/mamona/gcc-noemu-4.1.2/ldflags.patch b/packages/mamona/gcc-noemu-4.1.2/ldflags.patch
new file mode 100644 (file)
index 0000000..9576f60
--- /dev/null
@@ -0,0 +1,22 @@
+--- /tmp/Makefile.in   2006-02-23 20:56:01.399758728 +0100
++++ gcc-4.1-20060217/Makefile.in       2006-02-23 20:56:16.874406224 +0100
+@@ -334,7 +334,7 @@
+ CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
+ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
+ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+-LDFLAGS_FOR_TARGET = 
++LDFLAGS_FOR_TARGET = @LDFLAGS@ 
+ PICFLAG_FOR_TARGET = 
+ # ------------------------------------
+--- /tmp/Makefile.tpl  2006-02-23 20:50:34.077519272 +0100
++++ gcc-4.1-20060217/Makefile.tpl      2006-02-23 21:04:31.092273688 +0100
+@@ -337,7 +337,7 @@
+ CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
+ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
+ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+-LDFLAGS_FOR_TARGET = 
++LDFLAGS_FOR_TARGET = @LDFLAGS@ 
+ PICFLAG_FOR_TARGET = 
+ # ------------------------------------
diff --git a/packages/mamona/gcc-noemu-4.1.2/pr34130.patch b/packages/mamona/gcc-noemu-4.1.2/pr34130.patch
new file mode 100644 (file)
index 0000000..415335f
--- /dev/null
@@ -0,0 +1,16 @@
+Index: gcc-4.1.2/gcc/fold-const.c
+===================================================================
+--- gcc-4.1.2.orig/gcc/fold-const.c    2007-11-21 18:53:42.000000000 +0100
++++ gcc-4.1.2/gcc/fold-const.c 2007-11-21 18:56:26.000000000 +0100
+@@ -5339,7 +5339,10 @@
+             }
+           break;
+         }
+-      /* FALLTHROUGH */
++   /* If the constant is negative, we cannot simplify this.  */
++   if (tree_int_cst_sgn (c) == -1)
++     break;
++   /* FALLTHROUGH */
+     case NEGATE_EXPR:
+       if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0)
+       return fold_build1 (tcode, ctype, fold_convert (ctype, t1));
diff --git a/packages/mamona/gcc-noemu-4.1.2/sdk-libstdc++-includes.patch b/packages/mamona/gcc-noemu-4.1.2/sdk-libstdc++-includes.patch
new file mode 100644 (file)
index 0000000..4377c21
--- /dev/null
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~        2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+ libmath_la_SOURCES = stubs.c
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old     2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+       $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
diff --git a/packages/mamona/gcc-noemu-4.1.2/sh3-installfix-fixheaders.patch b/packages/mamona/gcc-noemu-4.1.2/sh3-installfix-fixheaders.patch
new file mode 100644 (file)
index 0000000..a06cd2e
--- /dev/null
@@ -0,0 +1,11 @@
+--- gcc-4.1.1/gcc/Makefile.in_orig     2007-01-31 21:24:23.000000000 +0000
++++ gcc-4.1.1/gcc/Makefile.in  2007-01-31 21:24:43.000000000 +0000
+@@ -3772,8 +3772,6 @@
+         $(INSTALL_SCRIPT) $(mkinstalldirs) \
+               $(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
+         $(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \
+-        $(INSTALL_PROGRAM) build/fix-header$(build_exeext) \
+-              $(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \
+       else :; fi
+       echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
+               > $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
diff --git a/packages/mamona/gcc-noemu-4.1.2/unbreak-armv4t.patch b/packages/mamona/gcc-noemu-4.1.2/unbreak-armv4t.patch
new file mode 100644 (file)
index 0000000..b3399ab
--- /dev/null
@@ -0,0 +1,12 @@
+diff -urN gcc-4.1.1/gcc/config/arm/linux-eabi.h gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h
+--- gcc-4.1.1/gcc/config/arm/linux-eabi.h      2006-10-22 11:11:49.000000000 -0700
++++ gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h     2006-10-24 21:34:01.000000000 -0700
+@@ -45,7 +45,7 @@
+    The ARM10TDMI core is the default for armv5t, so set
+    SUBTARGET_CPU_DEFAULT to achieve this.  */
+ #undef SUBTARGET_CPU_DEFAULT
+-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+ #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
diff --git a/packages/mamona/gcc-noemu-4.1.2/zecke-no-host-includes.patch b/packages/mamona/gcc-noemu-4.1.2/zecke-no-host-includes.patch
new file mode 100644 (file)
index 0000000..6afb10d
--- /dev/null
@@ -0,0 +1,31 @@
+Index: gcc-4.0.2/gcc/c-incpath.c
+===================================================================
+--- gcc-4.0.2.orig/gcc/c-incpath.c     2005-01-23 16:05:27.000000000 +0100
++++ gcc-4.0.2/gcc/c-incpath.c  2006-05-15 21:23:02.000000000 +0200
+@@ -350,6 +350,26 @@
+   p->construct = 0;
+   p->user_supplied_p = user_supplied_p;
++#ifdef CROSS_COMPILE
++    /* A common error when cross compiling is including
++    host headers. This code below will try to fail fast
++    for cross compiling. Currently we consider /usr/include,
++    /opt/include and /sw/include as harmful.  */
++      {
++              /* printf("Adding Path: %s\n", p->name ); */
++              if( strstr(p->name, "/usr/include" ) == p->name ) {
++                      fprintf(stderr, _("CROSS COMPILE Badness: /usr/include in INCLUDEPATH: %s\n"), p->name);
++                      abort();
++              } else if( strstr(p->name, "/sw/include") == p->name ) {
++                      fprintf(stderr, _("CROSS COMPILE Badness: /sw/include in INCLUDEPATH: %s\n"), p->name);
++                      abort();
++              } else if( strstr(p->name, "/opt/include") == p->name ) {
++                      fprintf(stderr, _("CROSS COMPILE Badness: /opt/include in INCLUDEPATH: %s\n"), p->name);
++                      abort();
++               }
++      }
++#endif
++
+   add_cpp_dir_path (p, chain);
+ }
diff --git a/packages/mamona/gcc-noemu-4.1.2/zecke-xgcc-cpp.patch b/packages/mamona/gcc-noemu-4.1.2/zecke-xgcc-cpp.patch
new file mode 100644 (file)
index 0000000..921cab6
--- /dev/null
@@ -0,0 +1,16 @@
+upstream: n/a
+comment: Use the preprocessor we have just compiled instead the one of
+the system. There might be incompabilities between us and them.
+
+Index: gcc-4.1.1/Makefile.in
+===================================================================
+--- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200
++++ gcc-4.1.1/Makefile.in      2006-08-06 13:32:46.000000000 +0200
+@@ -194,6 +194,7 @@
+       AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
+       CC="$(CC_FOR_TARGET)"; export CC; \
+       CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
++      CPP="$(CC_FOR_TARGET) -E"; export CCP; \
+       CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+       CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+       CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
index fbf1b0d..1582598 100644 (file)
@@ -4,6 +4,9 @@ HOMEPAGE = "http://www.gnu.org/software/gcc/"
 SECTION = "devel"
 LICENSE = "GPL"
 
+RCONFLICTS = "gcc"
+RREPLACES = "gcc"
+
 inherit autotools gettext
 
 require gcc-package-noemu.inc
diff --git a/packages/mamona/gcc-noemu_4.1.2.bb b/packages/mamona/gcc-noemu_4.1.2.bb
new file mode 100644 (file)
index 0000000..ae11b16
--- /dev/null
@@ -0,0 +1,104 @@
+DESCRIPTION = "The GNU cc and gcc C compilers."
+HOMEPAGE = "http://www.gnu.org/software/gcc/"
+SECTION = "devel"
+LICENSE = "GPL"
+# NOTE: split PR.  If the main .bb changes something that affects its *build*
+# remember to increment the -cross .bb PR too.
+PR = "r0"
+
+RCONFLICTS = "gcc"
+RREPLACES = "gcc"
+RCONFLICTS_g++-noemu = "g++"
+RREPLACES_g++-noemu = "g++"
+RCONFLICTS_cpp-noemu = "cpp"
+RREPLACES_cpp-noemu = "cpp"
+
+inherit autotools gettext
+
+require gcc-package-noemu.inc
+
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \
+       file://100-uclibc-conf.patch;patch=1 \
+       file://110-arm-eabi.patch;patch=1 \
+       file://200-uclibc-locale.patch;patch=1 \
+       file://300-libstdc++-pic.patch;patch=1 \
+       file://301-missing-execinfo_h.patch;patch=1 \
+       file://302-c99-snprintf.patch;patch=1 \
+       file://303-c99-complex-ugly-hack.patch;patch=1 \
+       file://304-index_macro.patch;patch=1 \
+       file://602-sdk-libstdc++-includes.patch;patch=1 \
+       file://740-sh-pr24836.patch;patch=1 \
+       file://800-arm-bigendian.patch;patch=1 \
+       file://arm-nolibfloat.patch;patch=1 \
+       file://arm-softfloat.patch;patch=1 \
+       file://gcc41-configure.in.patch;patch=1 \
+       file://arm-thumb.patch;patch=1 \
+       file://arm-thumb-cache.patch;patch=1 \
+       file://ldflags.patch;patch=1 \
+       file://zecke-xgcc-cpp.patch;patch=1 \
+       file://unbreak-armv4t.patch;patch=1 \
+        file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \
+       file://cache-amnesia.patch;patch=1 \
+       file://gfortran.patch;patch=1 \
+        file://gcc-4.0.2-e300c2c3.patch;patch=1 \
+        file://pr34130.patch;patch=1 \
+       "
+
+SRC_URI_append_sh3  = " file://sh3-installfix-fixheaders.patch;patch=1 "
+
+SRC_URI_avr32 = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \
+#           file://100-uclibc-conf.patch;patch=1 \
+#           file://200-uclibc-locale.patch;patch=1 \
+#           file://300-libstdc++-pic.patch;patch=1 \
+           file://301-missing-execinfo_h.patch;patch=1 \
+           file://302-c99-snprintf.patch;patch=1 \
+           file://303-c99-complex-ugly-hack.patch;patch=1 \
+           file://304-index_macro.patch;patch=1 \
+           file://602-sdk-libstdc++-includes.patch;patch=1 \
+           file://gcc41-configure.in.patch;patch=1 \
+           file://ldflags.patch;patch=1 \
+           file://zecke-xgcc-cpp.patch;patch=1 \
+           file://cache-amnesia.patch;patch=1 \
+           "
+
+do_compile_prepend_avr32() {
+       ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux
+}
+
+#Set the fortran bits
+# ',fortran' or '', not 'f77' like gcc3 had
+FORTRAN = ""
+HAS_GFORTRAN = "no"
+HAS_G2C = "no"
+
+#Set the java bits
+JAVA = ""
+JAVA_arm = ""
+
+
+LANGUAGES = "c,c++${FORTRAN}${JAVA}"
+require ../gcc/gcc3-build.inc
+
+
+EXTRA_OECONF += " --disable-libssp --with-slibdir=\"/lib\" "
+
+EXTRA_OEMAKE += "LDFLAGS=\"-static\" build_tooldir=\"${STAGING_DIR}/${TARGET_SYS}\""
+
+CONFIG_SITE=""
+
+do_configure () {
+    export CPP="gcc -E"
+    export CC=gcc
+    export AS=as
+    export LD=ld
+    export CXX=g++ 
+    export AR=ar
+    export OBJCOPY=objcopy 
+    export OBJDUMP=objdump 
+    export RANLIB=ranlib 
+    export NM=nm 
+    export STRIP=strip
+    export CFLAGS="-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"
+    export CXXFLAGS="-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os -fpermissive -fvisibility-inlines-hidden"
+    oe_runconf
+}
index 548c3d4..3288e60 100644 (file)
@@ -1,15 +1,9 @@
 gcclibdir ?= "${libdir}/gcc"
 BINV ?= "${PV}"
 
-PACKAGES = "libgcc ${PN} ${PN}-symlinks \
+PACKAGES = "${PN} ${PN}-symlinks \
             g++-noemu g++-noemu-symlinks \
-           cpp-noemu cpp-noemu-symlinks \
-            g77-noemu g77-noemu-symlinks \
-           gcov-noemu gcov-noemu-symlinks \
-            libmudflap-noemu libmudflap-noemu-dev \
-           libstdc++-noemu libg2c-noemu \
-           libstdc++-noemu-dev libg2c-noemu-dev \
-            ${PN}-doc"
+           cpp-noemu cpp-noemu-symlinks"
 
 FILES_${PN} = "${bindir}/${TARGET_PREFIX}gcc \
               ${bindir}/${TARGET_PREFIX}gccbug \
@@ -18,62 +12,21 @@ FILES_${PN} = "${bindir}/${TARGET_PREFIX}gcc \
               ${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \
               ${gcclibdir}/${TARGET_SYS}/${BINV}/specs \
               ${gcclibdir}/${TARGET_SYS}/${BINV}/lib* \
-              ${gcclibdir}/${TARGET_SYS}/${BINV}/include"
+              ${gcclibdir}/${TARGET_SYS}/${BINV}/include \
+              ${libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so"
 FILES_${PN}-symlinks = "${bindir}/cc \
                        ${bindir}/gcc \
                        ${bindir}/gccbug"
 
-FILES_g77-noemu = "${bindir}/${TARGET_PREFIX}g77 \
-                  ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f771"
-FILES_g77-noemu-symlinks = "${bindir}/g77 \
-                           ${bindir}/f77"
-
 FILES_cpp-noemu = "${bindir}/${TARGET_PREFIX}cpp \
             ${base_libdir}/cpp"
 FILES_cpp-noemu-symlinks = "${bindir}/cpp"
 
-FILES_gcov-noemu = "${bindir}/${TARGET_PREFIX}gcov"
-FILES_gcov-noemu-symlinks = "${bindir}/gcov"
-
-FILES_libgcc-noemu = "${base_libdir}/libgcc*.so.*"
-FILES_libgcc-noemu-dev = "${base_libdir}/libgcc*.so"
-
-# Called from within gcc-cross, so libdir is set wrong
-FILES_libg2c-noemu = "${target_libdir}/libg2c.so.*"
-FILES_libg2c-noemu-dev = "${libdir}/libg2c.so \
-                   ${libdir}/libg2c.a \
-                   ${libdir}/libfrtbegin.a"
-
 FILES_g++-noemu = "${bindir}/${TARGET_PREFIX}g++ \
                   ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus"
 FILES_g++-noemu-symlinks = "${bindir}/c++ \
                            ${bindir}/g++"
 
-FILES_libstdc++-noemu = "${libdir}/libstdc++.so.*"
-FILES_libstdc++-noemu-dev = "${includedir}/c++/${BINV} \
-                      ${libdir}/libstdc++.so \
-                      ${libdir}/libstdc++.la \
-                      ${libdir}/libstdc++.a \
-                      ${libdir}/libsupc++.la \
-                      ${libdir}/libsupc++.a"
-
-FILES_libmudflap-noemu = "${libdir}/libmudflap*.so.*"
-FILES_libmudflap-noemu-dev = "${libdir}/libmudflap*.so \
-                        ${libdir}/libmudflap*.a \
-                        ${libdir}/libmudflap*.a"
-
-
-FILES_${PN}-doc = "${infodir} \
-                  ${mandir} \
-                  ${gcclibdir}/${TARGET_SYS}/${BINV}/include/README"
-
-python do_package() {
-        if bb.data.getVar('DEBIAN_NAMES', d, 1):
-                bb.data.setVar('PKG_libgcc', 'libgcc1', d)
-        bb.build.exec_func('package_do_package', d)
-}
-
-
 do_install () {
        autotools_do_install
 
@@ -85,14 +38,14 @@ do_install () {
        test -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs && sed -i -e '/^*cross_compile:$/ { n; s/1/0/; }' ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs
 
        # Using --with-slibdir instead of this hack below..
-       ## Move libgcc_s into /lib
+       # Move libgcc_s into /lib
        #mkdir -p ${D}${base_libdir}
        #mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir}
-       #rm -f ${D}${libdir}/libgcc_s.so
-       #ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \
-       #       | tr -s / \
-       #       | sed -e 's,^/,,' -e 's,[^/]*,..,g'`/lib/libgcc_s.so.1 \
-       #             ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so
+       rm -f ${D}${libdir}/libgcc_s.so
+       ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \
+               | tr -s / \
+               | sed -e 's,^/,,' -e 's,[^/]*,..,g'`/lib/libgcc_s.so.1 \
+                     ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so
 
        # We don't need libtool libraries
        rm -f ${D}${libdir}/libg2c.la &>/dev/null || true
@@ -115,10 +68,10 @@ do_install () {
        rm -f ${TARGET_ARCH}-*${TARGET_ARCH}-*
 
        # Symlinks so we can use these trivially on the target
-       ln -sf ${TARGET_SYS}-g77 g77
+#      ln -sf ${TARGET_SYS}-g77 g77
        ln -sf ${TARGET_SYS}-g++ g++
        ln -sf ${TARGET_SYS}-gcc gcc
-       ln -sf g77 f77
+#      ln -sf g77 f77
        ln -sf g++ c++
        ln -sf gcc cc
        ln -sf ${bindir}/${TARGET_SYS}-cpp ${D}${base_libdir}/cpp
diff --git a/packages/mamona/mamona-input-methods_git.bb b/packages/mamona/mamona-input-methods_git.bb
new file mode 100644 (file)
index 0000000..ca89453
--- /dev/null
@@ -0,0 +1,78 @@
+# Copyright (C) 2008 Instituto Nokia de Tecnologia
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Mamona input methods"
+HOMEPAGE = "http://dev.openbossa.org/trac/mamona/wiki"
+LICENSE = "GPL"
+SECTION = "libs/inputmethods"
+DEPENDS = "ecore gtk+"
+PR = "r4"
+
+PV = "0.1+git"
+
+inherit autotools pkgconfig lib_package
+
+SRC_URI = "git://dev.openbossa.org/mamona/projects/mamona_input_methods.git;protocol=http"
+
+S = "${WORKDIR}/git"
+
+# Mamona IM
+RPROVIDES_${PN} = "libmamona-im0"
+
+# Ecore
+PACKAGES += "\
+            ${PN}-ecore \
+            ${PN}-ecore-dev \
+            ${PN}-ecore-dbg \
+        "
+RPROVIDES_${PN}-ecore = "libmamona-im-ecore"
+EXTRA_OECONF = "\
+            --enable-ecore-im \
+        "
+FILES_${PN}-ecore = "\
+            ${libdir}/ecore/immodules/mamona-im-ecore-module.so \
+        "
+FILES_${PN}-ecore-dev = "\
+            ${libdir}/ecore/immodules/mamona-im-ecore-module.la \
+            ${libdir}/ecore/immodules/mamona-im-ecore-module.a \
+        "
+FILES_${PN}-ecore-dbg = "\
+            ${libdir}/ecore/immodules/.debug \
+        "
+
+# GTK
+PACKAGES += "\
+            ${PN}-gtk \
+            ${PN}-gtk-dev \
+            ${PN}-gtk-dbg \
+        "
+RPROVIDES_${PN}-gtk = "libmamona-im-gtk"
+EXTRA_OECONF += "\
+            --enable-gtk-im \
+        "
+FILES_${PN}-gtk = "\
+            ${libdir}/gtk-2.0/*/immodules/mamona-im-gtk-module.so \
+        "
+FILES_${PN}-gtk-dev = "\
+            ${libdir}/gtk-2.0/*/immodules/mamona-im-gtk-module.la \
+            ${libdir}/gtk-2.0/*/immodules/mamona-im-gtk-module.a \
+        "
+FILES_${PN}-gtk-dbg = "\
+            ${libdir}/gtk-2.0/*/immodules/.debug \
+        "
+
+do_configure_prepend() {
+    ./autogen.sh
+}
+
+do_stage() {
+    autotools_stage_all
+}
+
+pkg_postinst_${PN}-gtk() {
+    gtk-query-immodules-2.0 > ${sysconfdir}/gtk-2.0/gtk.immodules
+}
+
+pkg_postrm_${PN}-gtk() {
+    gtk-query-immodules-2.0 > ${sysconfdir}/gtk-2.0/gtk.immodules
+}
diff --git a/packages/mamona/mamona-sound-n770/asound.conf b/packages/mamona/mamona-sound-n770/asound.conf
new file mode 100644 (file)
index 0000000..e7f73ce
--- /dev/null
@@ -0,0 +1,22 @@
+# PCM
+pcm.!default {
+        type alsa_dsp
+        playback_device_file ["/dev/dsptask/pcm1"]
+        recording_device_file ["/dev/dsptask/pcm_rec"]
+}
+
+# Mixer
+ctl.!master {
+       type hw
+       card 0
+}
+
+ctl.!default {
+       type dsp_ctl
+       playback_devices ["/dev/dsptask/pcm1"]
+       recording_devices ["/dev/dsptask/pcm_rec"]
+}
+
+# OSS emulation
+pcm.dsp0 pcm.default
+ctl.mixer0 mixer.default
diff --git a/packages/mamona/mamona-sound-n770/dsp-n800.rules b/packages/mamona/mamona-sound-n770/dsp-n800.rules
new file mode 100644 (file)
index 0000000..ae01361
--- /dev/null
@@ -0,0 +1,6 @@
+# dsp dev
+KERNEL=="dspctl",    NAME="dspctl/ctl"
+KERNEL=="dspmem",    NAME="dspctl/mem", MODE="0640", GROUP="kmem"
+KERNEL=="dsptwch",   NAME="dspctl/twch", MODE="0640"
+KERNEL=="dsperr",    NAME="dspctl/err", MODE="0440"
+KERNEL=="dsptask[0-9]*", MODE="0666"
diff --git a/packages/mamona/mamona-sound-n770_0.1.0.bb b/packages/mamona/mamona-sound-n770_0.1.0.bb
new file mode 100644 (file)
index 0000000..c0bea6a
--- /dev/null
@@ -0,0 +1,32 @@
+DESCRIPTION = "Mamona's sound configuration for Nokia N770"
+HOMEPAGE = "http://dev.openbossa.org/trac/mamona/"
+#SECTION = "console/utils"
+LICENSE = "GPL"
+RDEPENDS = "dspgw-utils udev alsa-lib alsa-utils-alsactl"
+PR = "r1"
+
+PACKAGES = "${PN}"
+
+SRC_URI =      "file://dsp-n800.rules \
+             file://asound.conf \
+             "
+
+# Skipping...
+do_configure () {
+}
+
+# Skipping...
+do_stage () {
+}
+
+# Skipping...
+do_compile () {
+}
+
+do_install () {
+    install -d ${D}${sysconfdir}/udev/rules.d
+    install -m 0755 ${WORKDIR}/dsp-n800.rules ${D}${sysconfdir}/udev/rules.d/
+
+    install -d ${D}${sysconfdir}
+    install -m 0644 ${WORKDIR}/asound.conf ${D}${sysconfdir}/
+}
diff --git a/packages/mamona/mamona-sound-n800/asound.state b/packages/mamona/mamona-sound-n800/asound.state
deleted file mode 100644 (file)
index 6ae874c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-state.EAC {
-       control.1 {
-               comment.access 'read write'
-               comment.type BOOLEAN
-               comment.count 2
-               iface MIXER
-               name 'Capture Switch'
-               value.0 false
-               value.1 false
-       }
-       control.2 {
-               comment.access 'read write'
-               comment.type INTEGER
-               comment.count 2
-               comment.range '6 - 127'
-               iface MIXER
-               name 'Capture Volume'
-               value.0 87
-               value.1 87
-       }
-       control.3 {
-               comment.access 'read write'
-               comment.type BOOLEAN
-               comment.count 2
-               iface MIXER
-               name 'PCM Playback Switch'
-               value.0 true
-               value.1 true
-       }
-       control.4 {
-               comment.access 'read write'
-               comment.type INTEGER
-               comment.count 2
-               comment.range '0 - 127'
-               iface MIXER
-               name 'PCM Playback Volume'
-               value.0 103
-               value.1 103
-       }
-       control.5 {
-               comment.access 'read write'
-               comment.type BOOLEAN
-               comment.count 2
-               iface MIXER
-               name 'Line Playback Switch'
-               value.0 false
-               value.1 false
-       }
-       control.6 {
-               comment.access 'read write'
-               comment.type INTEGER
-               comment.count 2
-               comment.range '31 - 127'
-               iface MIXER
-               name 'Line Playback Volume'
-               value.0 103
-               value.1 103
-       }
-       control.7 {
-               comment.access 'read write'
-               comment.type INTEGER
-               comment.count 1
-               comment.range '1 - 3'
-               iface MIXER
-               name 'Mic Boost'
-               value 0
-       }
-       control.8 {
-               comment.access 'read write'
-               comment.type ENUMERATED
-               comment.count 2
-               comment.item.0 Mic
-               comment.item.1 Line
-               comment.item.2 'Line swapped'
-               comment.item.3 'Line mono'
-               iface MIXER
-               name 'Capture Source'
-               value.0 Mic
-               value.1 Mic
-       }
-       control.9 {
-               comment.access 'read write'
-               comment.type BOOLEAN
-               comment.count 1
-               iface MIXER
-               name 'Headset Amplifier'
-               value false
-       }
-       control.10 {
-               comment.access 'read write'
-               comment.type BOOLEAN
-               comment.count 1
-               iface MIXER
-               name 'Speaker Amplifier'
-               value true
-       }
-       control.11 {
-               comment.access 'read write'
-               comment.type BOOLEAN
-               comment.count 1
-               iface MIXER
-               name 'Headset Mic Select'
-               value false
-       }
-}
index c1c6672..0050734 100644 (file)
@@ -1,15 +1,13 @@
 DESCRIPTION = "Mamona's sound configuration for Nokia N800"
 HOMEPAGE = "http://dev.openbossa.org/trac/mamona/"
-#SECTION = "console/utils"
 LICENSE = "GPL"
-RDEPENDS = "dspgw-utils udev alsa-lib alsa-utils-alsactl alsa-state"
+RDEPENDS = "dspgw-utils udev alsa-lib alsa-utils-alsactl"
 PR = "r1"
 
 PACKAGES = "${PN}"
 
 SRC_URI =      "file://dsp-n800.rules \
              file://asound.conf \
-             file://asound.state \
              "
 
 # Skipping...
@@ -30,7 +28,4 @@ do_install () {
 
     install -d ${D}${sysconfdir}
     install -m 0644 ${WORKDIR}/asound.conf ${D}${sysconfdir}/
-
-    install -d ${D}${sysconfdir}
-    install -m 0644 ${WORKDIR}/asound.state ${D}${sysconfdir}/
 }
diff --git a/packages/mamona/mamonaim-e-applet_git.bb b/packages/mamona/mamonaim-e-applet_git.bb
new file mode 100644 (file)
index 0000000..6f45a45
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 Instituto Nokia de Tecnologia
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Mamona-IM Enlightenment Applet"
+HOMEPAGE = "http://dev.openbossa.org/trac/mamona/wiki"
+LICENSE = "MIT BSD"
+DEPENDS = "mamona-input-methods e-wm"
+PR = "r0"
+
+PV = "0.1+git"
+
+inherit autotools pkgconfig
+
+SRC_URI = "git://dev.openbossa.org/mamona/projects/mamonaim_e_applet.git;protocol=http"
+
+S = "${WORKDIR}/git"
+
+# E Applet
+FILES_${PN} = "\
+            ${libdir}/enlightenment/modules/mamonaim/module.desktop \
+            ${libdir}/enlightenment/modules/mamonaim/mamonaim.edj \
+            ${libdir}/enlightenment/modules/mamonaim/e-module-mamonaim.edj \
+            ${libdir}/enlightenment/modules/mamonaim/*.png \
+            ${libdir}/enlightenment/modules/mamonaim/*/module.so \
+        "
+FILES_${PN}-dev = "\
+            ${libdir}/enlightenment/modules/mamonaim/*/module.la \
+            ${libdir}/enlightenment/modules/mamonaim/*/module.a \
+        "
+FILES_${PN}-dbg = "\
+            ${libdir}/enlightenment/modules/mamonaim/*/.debug \
+        "
+
+do_configure_prepend() {
+    ./autogen.sh
+}
diff --git a/packages/mamona/udev-usbserial/80-usbconsole.rules b/packages/mamona/udev-usbserial/80-usbconsole.rules
new file mode 100644 (file)
index 0000000..aa479b2
--- /dev/null
@@ -0,0 +1 @@
+BUS=="usb", KERNEL=="ttyUSB0", SUBSYSTEM=="tty", ACTION=="add", RUN+="/bin/sh -c 'while [ -e /dev/ttyUSB0 ]; do /sbin/getty 115200 ttyUSB0; done'"
diff --git a/packages/mamona/udev-usbserial_0.1.bb b/packages/mamona/udev-usbserial_0.1.bb
new file mode 100644 (file)
index 0000000..32e967d
--- /dev/null
@@ -0,0 +1,30 @@
+DESCRIPTION = "Udev rules file to spawn getty in ttyUSB"
+SECTION = "utils"
+LICENSE = "GPL"
+RDEPENDS = "udev"
+PR = "r1"
+
+PACKAGES = "${PN}"
+
+SRC_URI = "file://80-usbconsole.rules"
+
+inherit autotools
+
+# Skipping...
+do_configure () {
+}
+# Skipping...
+do_stage () {
+}
+# Skipping...
+do_compile () {
+}
+
+do_install () {
+    install -d ${D}${sysconfdir}/udev/rules.d
+    install -m 0644 ${WORKDIR}/80-usbconsole.rules ${D}${sysconfdir}/udev/rules.d
+}
+
+pkg_postinst_${PN}() {
+    udevcontrol reload_rules || true
+}
diff --git a/packages/mamona/uinput-2.6.21/nokia800/defconfig b/packages/mamona/uinput-2.6.21/nokia800/defconfig
new file mode 100644 (file)
index 0000000..188b185
--- /dev/null
@@ -0,0 +1,1556 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-omap1
+# Mon Jun  2 20:06:59 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_OMAP=y
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+CONFIG_ARCH_OMAP2=y
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_MACH_OMAP2420_DVFS is not set
+# CONFIG_ARCH_OMAP2420_DEBUG is not set
+# CONFIG_ARCH_OMAP2420_DMA_DRAIN is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+CONFIG_OMAP_COMPONENT_VERSION=y
+CONFIG_OMAP_GPIO_SWITCH=y
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_STI=y
+CONFIG_OMAP_STI_CONSOLE=y
+# CONFIG_OMAP_MCBSP is not set
+CONFIG_OMAP_MMU_FWK=y
+CONFIG_OMAP_MBOX_FWK=y
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+CONFIG_OMAP_DSP=y
+# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set
+CONFIG_OMAP_DSP_TASK_MULTIOPEN=y
+CONFIG_OMAP_DSP_FBEXPORT=y
+# CONFIG_OMAP_DSP_PAUSING is not set
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP Core Type
+#
+CONFIG_ARCH_OMAP24XX=y
+CONFIG_ARCH_OMAP2420=y
+# CONFIG_ARCH_OMAP2430 is not set
+
+#
+# OMAP Board Type
+#
+CONFIG_MACH_NOKIA_N800=y
+# CONFIG_MACH_NOKIA_RX44 is not set
+CONFIG_MACH_OMAP2_TUSB6010=y
+# CONFIG_MACH_OMAP_H4 is not set
+# CONFIG_MACH_OMAP_APOLLON is not set
+# CONFIG_MACH_OMAP_2430SDP is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_V6=y
+# CONFIG_CPU_32v6K is not set
+CONFIG_CPU_32v6=y
+CONFIG_CPU_ABRT_EV6=y
+CONFIG_CPU_CACHE_V6=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V6=y
+CONFIG_CPU_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_BPREDICT_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=128
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_LEDS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x10C08000
+CONFIG_ZBOOT_ROM_BSS=0x10200000
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_CMDLINE="root=1f03 rootfstype=jffs2"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_APM_EMULATION is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETLABEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=y
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=y
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_IPRANGE is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_RECENT is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+CONFIG_IP_NF_FILTER=y
+# CONFIG_IP_NF_TARGET_REJECT is not set
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_IP_NF_TARGET_IDLETIMER=y
+# CONFIG_IP_NF_MANGLE is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIBRF6150 is not set
+# CONFIG_BT_HCIH4P is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# 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_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+CONFIG_MTD_ONENAND=y
+# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+# CONFIG_MTD_ONENAND_GENERIC is not set
+CONFIG_MTD_ONENAND_OMAP2=y
+CONFIG_MTD_ONENAND_OTP=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_OMAP is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_KEYBOARD_TSC2301=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_TSC2301=y
+# CONFIG_TOUCHSCREEN_TSC2046 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_OMAP=y
+CONFIG_SERIAL_OMAP_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_SENSORS_TLV320AIC23 is not set
+# CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_GPIOEXPANDER_OMAP is not set
+# CONFIG_LM8323 is not set
+# CONFIG_LP5521 is not set
+CONFIG_MENELAUS=y
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_OMAP24XX is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC2005 is not set
+# CONFIG_SPI_TSC2101 is not set
+# CONFIG_SPI_TSC2102 is not set
+CONFIG_SPI_TSC2301=y
+CONFIG_SPI_TSC2301_AUDIO=y
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_TMP105 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+# CONFIG_LEDS_OMAP is not set
+CONFIG_LEDS_OMAP_PWM=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=y
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_VIDEO_OMAP_CAMERA is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_TEA5761 is not set
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_OMAP=y
+CONFIG_FB_OMAP_LCDC_EXTERNAL=y
+# CONFIG_FB_OMAP_LCDC_HWA742 is not set
+CONFIG_FB_OMAP_LCDC_BLIZZARD=y
+# CONFIG_FB_OMAP_MANUAL_UPDATE is not set
+CONFIG_FB_OMAP_LCD_MIPID=y
+CONFIG_FB_OMAP_BOOTLOADER_INIT=y
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=4
+# CONFIG_FB_OMAP_PAUSING is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_OMAP_AIC23 is not set
+CONFIG_SND_AIC33=y
+# CONFIG_SND_OMAP_TSC2101 is not set
+# CONFIG_SND_SX1 is not set
+# CONFIG_SND_OMAP_TSC2102 is not set
+CONFIG_SND_OMAP24XX_EAC=y
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DYNAMIC_MINORS=y
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+CONFIG_USB_OTG_WHITELIST=y
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_TUSB6010=y
+# CONFIG_USB_TUSB6010_TEST is not set
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+CONFIG_USB_MUSB_HSET=y
+CONFIG_MUSB_PIO_ONLY=y
+CONFIG_USB_MUSB_LOGLEVEL=0
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+CONFIG_USB_RTL8150=y
+# CONFIG_USB_USBNET_MII is not set
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+CONFIG_USB_NET_PLUSB=y
+# CONFIG_USB_NET_MCS7830 is not set
+CONFIG_USB_NET_RNDIS_HOST=y
+CONFIG_USB_NET_CDC_SUBSET=y
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+CONFIG_USB_NET_ZAURUS=y
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_OMAP=y
+# CONFIG_MMC_PAUSING is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# CBUS support
+#
+CONFIG_CBUS=y
+CONFIG_CBUS_TAHVO=y
+CONFIG_CBUS_TAHVO_USER=y
+# CONFIG_CBUS_TAHVO_USB is not set
+CONFIG_CBUS_RETU=y
+CONFIG_CBUS_RETU_USER=y
+CONFIG_CBUS_RETU_POWERBUTTON=y
+CONFIG_CBUS_RETU_RTC=y
+CONFIG_CBUS_RETU_WDT=y
+CONFIG_CBUS_RETU_HEADSET=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_CAPABILITIES is not set
+# CONFIG_SECURITY_ROOTPLUG is not set
+# CONFIG_SECURITY_LOWMEM is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/mamona/uinput-2.6.21/uinput b/packages/mamona/uinput-2.6.21/uinput
new file mode 100755 (executable)
index 0000000..c929a93
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+insmod /lib/modules/uinput.ko
+
+exit 0
diff --git a/packages/mamona/uinput_2.6.21.bb b/packages/mamona/uinput_2.6.21.bb
new file mode 100644 (file)
index 0000000..c2ec71d
--- /dev/null
@@ -0,0 +1,43 @@
+DESCRIPTION = "uinput support to Nokia 770/8*0 using Nokia kernel"\r
+SECTION = "kernel/modules"\r
+LICENSE = "GPL"\r
+PR = "r0"\r
+\r
+PACKAGES = "${PN}"\r
+\r
+FILES_${PN} += "/lib/modules/uinput.ko /etc/init.d/uinput"\r
+\r
+COMPATIBLE_MACHINE = "(nokia770|nokia800)"\r
+\r
+SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-2005q3-2-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 \\r
+ http://dev.openbossa.org/mamona/sources/kernel-source-rx-34_2.6.21.0.tar.gz \\r
+ file://defconfig \\r
+ file://uinput \\r
+"\r
+\r
+LDFLAGS=""\r
+BUILD_LDFLAGS=""\r
+CFLAGS=""\r
+BUILD_CFLAGS=""\r
+TARGET_LDFLAGS=""\r
+\r
+S = "${WORKDIR}/kernel-source-rx-34-2.6.21.0"\r
+\r
+do_configure() {\r
+}\r
+\r
+do_compile() {\r
+    cp ${WORKDIR}/defconfig ${S}/.config\r
+    PATH=${WORKDIR}/bin/:$PATH CROSS_COMPILE=arm-none-eabi- make modules\r
+}\r
+\r
+do_install() {\r
+    install -d ${D}/lib/modules/\r
+    install -m 0644 ${S}/drivers/input/misc/uinput.ko ${D}/lib/modules/\r
+    install -d ${D}/etc/init.d/\r
+    install -m 0755 ${WORKDIR}/uinput ${D}/etc/init.d/\r
+}\r
+\r
+pkg_postinst () {\r
+    update-rc.d uinput defaults 10\r
+}
\ No newline at end of file
diff --git a/packages/meta/mamona-buildall.inc b/packages/meta/mamona-buildall.inc
deleted file mode 100644 (file)
index 735243a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# Forcing build all rdepends
-do_mamona[nostamp] = "1"
-do_mamona[recrdeptask] = "do_package_write"
-addtask mamona before do_build after do_install
index e4fb4bd..a7e3d9f 100644 (file)
 DESCRIPTION = "Meta package for Mamona"
 LICENSE = "MIT"
-PR = "r1"
+PR = "r2"
 
 inherit meta
 EXCLUDE_FROM_WORLD = "1"
 
 RDEPENDS = " \
 task-mamona-base \
+task-mamona \
 task-mamona-devel \
-task-mamona-extras \
-task-mamona-nokia-it \
-task-mamona-noemu \
-task-mamona-e \
+task-mamona-sdk \
+task-mamona-sdk-noemu \
+task-mamona-wm \
+task-mamona-python \
+task-mamona-systemtap \
+coreutils \
+cpio \
+dbus \
+diffstat \
+dnsmasq \
+dosfstools \
+e2fsprogs \
+expat \
+findutils \
+firefox \
+fontconfig \
+gconf \
+glib-2.0 \
+gnome-common \
+gnome-vfs \
+groff \
+gstreamer \
+gtk+ \
+gtk+-doc \
+gtk-engines-dev \
+ifupdown \
+initscripts \
+intltool \
+libart-lgpl \
+libdbi \
+libelf \
+libfontenc \
+libmatchbox \
+liboil \
+libpng \
+libtelepathy \
+libtool \
+libusb \
+libxau \
+libxcursor \
+libxdmcp \
+libxext \
+libxfixes \
+libxfont \
+libxi \
+libxkbfile \
+libxml2 \
+libxpm \
+libxrandr \
+libxrender \
+libxslt \
+libxt \
+libxtst \
+libxv \
+lsof \
+makedev \
+matchbox-wm \
+midori \
+mime-support \
+module-init-tools \
+mplayer-maemo \
+ncurses \
+net-tools \
+netbase \
+openobex \
+portmap \
+ppp \
+procps \
+qt4-x11-free \
+quilt \
+renderproto-dev \
+samba \
+sgml-common \
+shared-mime-info \
+slang \
+sqlite \
+sqlite3 \
+sudo \
+sysvinit \
+telepathy-gabble \
+telepathy-glib \
+telepathy-mission-control \
+tslib \
+ttf-bitstream-vera \
+udev \
+util-linux \
+vim \
+wget \
+xkbd \
+xtrans-dev \
 "
-
-include mamona-buildall.inc
index d53fb11..24547d6 100644 (file)
@@ -17,8 +17,9 @@ if [ "x$D" != "x" ]; then
        # this happens at S98 where our good 'ole packages script used to run
        echo "#!/bin/sh
 opkg-cl configure
+rm -f /${sysconfdir}/rcS.d/S${OPKG_INIT_POSITION}configure
 " > ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${OPKG_INIT_POSITION}configure
-       chmod 0755 ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${OPKG_INIT_POSITION}configure
+       chmod 0755 ${IMAGE_ROOTFS}${sysconfdir}/rcS.d/S${OPKG_INIT_POSITION}configure
 fi
 
 update-alternatives --install ${bindir}/opkg opkg ${bindir}/opkg-cl 100
index db66d13..7e99ba7 100644 (file)
@@ -44,7 +44,7 @@ FILES_finch-dbg     = "${bindir}/.debug/finch \
 
 FILES_${PN} = "${bindir} ${datadir}/${PN} ${libdir}/${PN}/*.so \
               ${datadir}/applications"
-RRECOMMENDS_${PN{ += "${PN}-data "
+RRECOMMENDS_${PN} += "${PN}-data "
 FILES_${PN}-data = "${datadir}/pixmaps ${datadir}/sounds ${datadir}/icons"
 FILES_${PN}-dev += "${libdir}/${PN}/*.la"
 
index ec626b4..2739018 100644 (file)
@@ -1,6 +1,6 @@
 # OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
 # GPLv2 or later
-# Version: 20082201
+# Version: 20081123
 # Features:
 # * set proper default encoding
 # * enable readline completion in the interactive interpreter
@@ -20,7 +20,8 @@ def __registerExitHandler():
     atexit.register( __exithandler )
 
 def __enableReadlineSupport():
-    readline.parse_and_bind("tab: complete")
+    readline.set_history_length( 1000 )
+    readline.parse_and_bind( "tab: complete" )
     try:
         readline.read_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
     except IOError:
@@ -29,7 +30,7 @@ def __enableReadlineSupport():
 def __enableDefaultEncoding():
     import sys
     try:
-        sys.setdefaultencoding('utf8')
+        sys.setdefaultencoding( "utf8" )
     except LookupError:
         pass
 
diff --git a/packages/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.1+svn/05_non-fatal_if_linux_hd_missing.patch
new file mode 100644 (file)
index 0000000..a66737d
--- /dev/null
@@ -0,0 +1,17 @@
+#DPATCHLEVEL=1
+---
+# hw/pc.c |    1 -
+# 1 file changed, 1 deletion(-)
+#
+Index: trunk/hw/pc.c
+===================================================================
+--- trunk.orig/hw/pc.c 2008-04-24 20:15:46.000000000 +0100
++++ trunk/hw/pc.c      2008-04-24 20:15:49.000000000 +0100
+@@ -399,7 +399,6 @@
+     if (hda == -1) {
+       fprintf(stderr, "A disk image must be given for 'hda' when booting "
+               "a Linux kernel\n");
+-      exit(1);
+     }
+     memset(bootsect, 0, sizeof(bootsect));
diff --git a/packages/qemu/qemu-0.9.1+svn/06_exit_segfault.patch b/packages/qemu/qemu-0.9.1+svn/06_exit_segfault.patch
new file mode 100644 (file)
index 0000000..bc02d31
--- /dev/null
@@ -0,0 +1,45 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c |    8 ++++----
+# 1 file changed, 4 insertions(+), 4 deletions(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig     2008-04-24 20:15:46.000000000 +0100
++++ linux-user/main.c  2008-04-24 20:15:53.000000000 +0100
+@@ -765,7 +765,7 @@
+         default:
+             printf ("Unhandled trap: 0x%x\n", trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+-            exit (1);
++            _exit (1);
+         }
+         process_pending_signals (env);
+     }
+@@ -1697,7 +1697,7 @@
+         default:
+             printf ("Unhandled trap: 0x%x\n", trapnr);
+             cpu_dump_state(env, stderr, fprintf, 0);
+-            exit (1);
++            _exit (1);
+         }
+         process_pending_signals (env);
+     }
+@@ -2026,7 +2026,7 @@
+                 for(item = cpu_log_items; item->mask != 0; item++) {
+                     printf("%-10s %s\n", item->name, item->help);
+                 }
+-                exit(1);
++                _exit(1);
+             }
+             cpu_set_log(mask);
+         } else if (!strcmp(r, "s")) {
+@@ -2045,7 +2045,7 @@
+             if (qemu_host_page_size == 0 ||
+                 (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
+                 fprintf(stderr, "page size must be a power of two\n");
+-                exit(1);
++                _exit(1);
+             }
+         } else if (!strcmp(r, "g")) {
+             gdbstub_port = atoi(argv[optind++]);
diff --git a/packages/qemu/qemu-0.9.1+svn/10_signal_jobs.patch b/packages/qemu/qemu-0.9.1+svn/10_signal_jobs.patch
new file mode 100644 (file)
index 0000000..d79482d
--- /dev/null
@@ -0,0 +1,26 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c |    7 ++++++-
+# 1 file changed, 6 insertions(+), 1 deletion(-)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig   2008-04-24 20:15:46.000000000 +0100
++++ linux-user/signal.c        2008-04-24 20:15:55.000000000 +0100
+@@ -364,10 +364,15 @@
+     k = &sigact_table[sig - 1];
+     handler = k->sa._sa_handler;
+     if (handler == TARGET_SIG_DFL) {
++        if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
++            kill(getpid(),SIGSTOP);
++            return 0;
++        } else
+         /* default handler : ignore some signal. The other are fatal */
+         if (sig != TARGET_SIGCHLD &&
+             sig != TARGET_SIGURG &&
+-            sig != TARGET_SIGWINCH) {
++            sig != TARGET_SIGWINCH &&
++            sig != TARGET_SIGCONT) {
+             force_sig(sig);
+         } else {
+             return 0; /* indicate ignored */
diff --git a/packages/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.1+svn/11_signal_sigaction.patch
new file mode 100644 (file)
index 0000000..cd56541
--- /dev/null
@@ -0,0 +1,21 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c |    5 +++++
+# 1 file changed, 5 insertions(+)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig   2008-04-24 20:15:55.000000000 +0100
++++ linux-user/signal.c        2008-04-24 20:15:57.000000000 +0100
+@@ -512,6 +512,11 @@
+     if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
+         return -EINVAL;
++
++    /* no point doing the stuff as those are not allowed for sigaction */
++    if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
++        return -EINVAL;
++
+     k = &sigact_table[sig - 1];
+ #if defined(DEBUG_SIGNAL)
+     fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/packages/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.1+svn/22_net_tuntap_stall.patch
new file mode 100644 (file)
index 0000000..0e10389
--- /dev/null
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# vl.c |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: vl.c
+===================================================================
+--- vl.c.orig  2008-04-24 20:15:46.000000000 +0100
++++ vl.c       2008-04-24 20:15:58.000000000 +0100
+@@ -4155,7 +4155,7 @@
+         return -1;
+     }
+     memset(&ifr, 0, sizeof(ifr));
+-    ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
++    ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
+     if (ifname[0] != '\0')
+         pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
+     else
diff --git a/packages/qemu/qemu-0.9.1+svn/31_syscalls.patch b/packages/qemu/qemu-0.9.1+svn/31_syscalls.patch
new file mode 100644 (file)
index 0000000..15565ae
--- /dev/null
@@ -0,0 +1,48 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |   11 ++++++++---
+# 1 file changed, 8 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig  2008-04-24 20:15:46.000000000 +0100
++++ linux-user/syscall.c       2008-04-24 20:15:59.000000000 +0100
+@@ -250,6 +250,7 @@
+ extern int setresgid(gid_t, gid_t, gid_t);
+ extern int getresgid(gid_t *, gid_t *, gid_t *);
+ extern int setgroups(int, gid_t *);
++extern int uselib(const char*);
+ #define ERRNO_TABLE_SIZE 1200
+@@ -4041,7 +4042,8 @@
+ #endif
+ #ifdef TARGET_NR_uselib
+     case TARGET_NR_uselib:
+-        goto unimplemented;
++        ret = get_errno(uselib(path((const char*)arg1)));
++        break;
+ #endif
+ #ifdef TARGET_NR_swapon
+     case TARGET_NR_swapon:
+@@ -5322,7 +5324,9 @@
+         goto unimplemented;
+ #ifdef TARGET_NR_mincore
+     case TARGET_NR_mincore:
+-        goto unimplemented;
++        /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/
++        ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
++        break;
+ #endif
+ #ifdef TARGET_NR_madvise
+     case TARGET_NR_madvise:
+@@ -5462,7 +5466,8 @@
+         break;
+ #ifdef TARGET_NR_readahead
+     case TARGET_NR_readahead:
+-        goto unimplemented;
++        ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
++        break;
+ #endif
+ #ifdef TARGET_NR_setxattr
+     case TARGET_NR_setxattr:
diff --git a/packages/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.1+svn/32_syscall_sysctl.patch
new file mode 100644 (file)
index 0000000..d42c44c
--- /dev/null
@@ -0,0 +1,55 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |   32 +++++++++++++++++++++++++++++---
+# 1 file changed, 29 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig  2008-04-24 20:15:59.000000000 +0100
++++ linux-user/syscall.c       2008-04-24 20:16:01.000000000 +0100
+@@ -52,6 +52,7 @@
+ //#include <sys/user.h>
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
++#include <sys/sysctl.h>
+ #define termios host_termios
+ #define winsize host_winsize
+@@ -4758,9 +4759,34 @@
+         break;
+ #endif
+     case TARGET_NR__sysctl:
+-        /* We don't implement this, but ENOTDIR is always a safe
+-           return value. */
+-        ret = -TARGET_ENOTDIR;
++        {
++            struct __sysctl_args *args = (struct __sysctl_args *) arg1;
++            int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
++            void *oldval, *newval;
++
++            name_target = (int *) tswapl((long) args->name);
++            nlen = tswapl(args->nlen);
++            oldval = (void *) tswapl((long) args->oldval);
++            oldlenp = (int *) tswapl((long) args->oldlenp);
++            oldlen = tswapl(*oldlenp);
++            newval = (void *) tswapl((long) args->newval);
++            newlen = tswapl(args->newlen);
++
++            name = alloca(nlen * sizeof (int));
++            for (i = 0; i < nlen; i++)
++                name[i] = tswapl(name_target[i]);
++
++            if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
++                ret = get_errno(
++                        sysctl(name, nlen, oldval, &oldlen, newval, newlen));
++                if (!is_error(ret)) {
++                    *oldlenp = tswapl(oldlen);
++                }
++            } else {
++                gemu_log("qemu: Unsupported sysctl name\n");
++                ret = -ENOSYS;
++            }
++        }
+         break;
+     case TARGET_NR_sched_setparam:
+         {
diff --git a/packages/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.1+svn/33_syscall_ppc_clone.patch
new file mode 100644 (file)
index 0000000..962f821
--- /dev/null
@@ -0,0 +1,22 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c |    6 +-----
+# 1 file changed, 1 insertion(+), 5 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig  2008-04-24 20:16:01.000000000 +0100
++++ linux-user/syscall.c       2008-04-24 20:16:02.000000000 +0100
+@@ -2760,11 +2760,7 @@
+         if (!newsp)
+             newsp = env->gpr[1];
+         new_env->gpr[1] = newsp;
+-        {
+-            int i;
+-            for (i = 7; i < 32; i++)
+-                new_env->gpr[i] = 0;
+-        }
++        new_env->gpr[3] = 0;
+ #elif defined(TARGET_SH4)
+       if (!newsp)
+         newsp = env->gregs[15];
diff --git a/packages/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.1+svn/39_syscall_fadvise64.patch
new file mode 100644 (file)
index 0000000..845232c
--- /dev/null
@@ -0,0 +1,21 @@
+---
+ linux-user/syscall.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig  2008-04-24 20:16:02.000000000 +0100
++++ linux-user/syscall.c       2008-04-24 20:16:03.000000000 +0100
+@@ -5350,6 +5350,12 @@
+         ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
+         break;
+ #endif
++#ifdef TARGET_NR_fadvise64_64
++     case TARGET_NR_fadvise64_64:
++        /* Just return success */
++        ret = get_errno(0);
++        break;
++#endif
+ #ifdef TARGET_NR_madvise
+     case TARGET_NR_madvise:
+         /* A straight passthrough may not be safe because qemu sometimes
diff --git a/packages/qemu/qemu-0.9.1+svn/52_ne2000_return.patch b/packages/qemu/qemu-0.9.1+svn/52_ne2000_return.patch
new file mode 100644 (file)
index 0000000..e364bff
--- /dev/null
@@ -0,0 +1,17 @@
+---
+ hw/ne2000.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: trunk/hw/ne2000.c
+===================================================================
+--- trunk.orig/hw/ne2000.c     2008-04-24 20:15:46.000000000 +0100
++++ trunk/hw/ne2000.c  2008-04-24 20:16:05.000000000 +0100
+@@ -217,7 +217,7 @@
+     NE2000State *s = opaque;
+     if (s->cmd & E8390_STOP)
+-        return 1;
++        return 0;
+     return !ne2000_buffer_full(s);
+ }
diff --git a/packages/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.1+svn/61_safe_64bit_int.patch
new file mode 100644 (file)
index 0000000..9a67fea
--- /dev/null
@@ -0,0 +1,27 @@
+#DPATCHLEVEL=0
+---
+# dyngen-exec.h |    4 ++--
+# 1 file changed, 2 insertions(+), 2 deletions(-)
+#
+Index: dyngen-exec.h
+===================================================================
+--- dyngen-exec.h.orig 2008-04-24 20:15:46.000000000 +0100
++++ dyngen-exec.h      2008-04-24 20:16:06.000000000 +0100
+@@ -38,7 +38,7 @@
+ // Linux/Sparc64 defines uint64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+ /* XXX may be done for all 64 bits targets ? */
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) 
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
+ typedef unsigned long uint64_t;
+ #else
+ typedef unsigned long long uint64_t;
+@@ -55,7 +55,7 @@
+ typedef signed int int32_t;
+ // Linux/Sparc64 defines int64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
+ typedef signed long int64_t;
+ #else
+ typedef signed long long int64_t;
diff --git a/packages/qemu/qemu-0.9.1+svn/63_sparc_build.patch b/packages/qemu/qemu-0.9.1+svn/63_sparc_build.patch
new file mode 100644 (file)
index 0000000..097f55a
--- /dev/null
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# sparc.ld |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: sparc.ld
+===================================================================
+--- sparc.ld.orig      2008-04-24 20:15:46.000000000 +0100
++++ sparc.ld   2008-04-24 20:16:07.000000000 +0100
+@@ -6,7 +6,7 @@
+ SECTIONS
+ {
+   /* Read-only sections, merged into text segment: */
+-  . = 0x60000000 + SIZEOF_HEADERS;
++  . = 0x60000000 + 0x400;
+   .interp     : { *(.interp)    }
+   .hash          : { *(.hash)           }
+   .dynsym        : { *(.dynsym)         }
diff --git a/packages/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.1+svn/64_ppc_asm_constraints.patch
new file mode 100644 (file)
index 0000000..7d19817
--- /dev/null
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=1
+---
+# cpu-all.h |    2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: trunk/cpu-all.h
+===================================================================
+--- trunk.orig/cpu-all.h       2008-04-24 20:15:46.000000000 +0100
++++ trunk/cpu-all.h    2008-04-24 20:16:08.000000000 +0100
+@@ -285,7 +285,7 @@
+ static inline void stl_le_p(void *ptr, int v)
+ {
+ #ifdef __powerpc__
+-    __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
++    __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
+ #else
+     uint8_t *p = ptr;
+     p[0] = v;
diff --git a/packages/qemu/qemu-0.9.1+svn/65_kfreebsd.patch b/packages/qemu/qemu-0.9.1+svn/65_kfreebsd.patch
new file mode 100644 (file)
index 0000000..028e85a
--- /dev/null
@@ -0,0 +1,35 @@
+---
+ configure |    6 ++++++
+ vl.c      |    2 ++
+ 2 files changed, 8 insertions(+)
+
+Index: configure
+===================================================================
+--- configure.orig     2008-04-24 20:15:46.000000000 +0100
++++ configure  2008-04-24 20:16:09.000000000 +0100
+@@ -135,6 +135,12 @@
+     kqemu="yes"
+ fi
+ ;;
++GNU/kFreeBSD)
++oss="yes"
++if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
++    kqemu="yes"
++fi
++;;
+ FreeBSD)
+ bsd="yes"
+ oss="yes"
+Index: vl.c
+===================================================================
+--- vl.c.orig  2008-04-24 20:15:58.000000000 +0100
++++ vl.c       2008-04-24 20:16:09.000000000 +0100
+@@ -97,6 +97,8 @@
+ #include <stropts.h>
+ #endif
+ #endif
++#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
++#include <freebsd/stdlib.h>
+ #else
+ #include <winsock2.h>
+ int inet_aton(const char *cp, struct in_addr *ia);
diff --git a/packages/qemu/qemu-0.9.1+svn/66_tls_ld.patch b/packages/qemu/qemu-0.9.1+svn/66_tls_ld.patch
new file mode 100644 (file)
index 0000000..cbd3f87
--- /dev/null
@@ -0,0 +1,55 @@
+---
+ arm.ld  |    7 +++++++
+ i386.ld |    7 +++++++
+ 2 files changed, 14 insertions(+)
+
+Index: arm.ld
+===================================================================
+--- arm.ld.orig        2008-04-24 20:15:45.000000000 +0100
++++ arm.ld     2008-04-24 20:16:11.000000000 +0100
+@@ -26,6 +26,10 @@
+     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+   .rela.rodata   :
+     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.got       : { *(.rel.got)              }
+   .rela.got      : { *(.rela.got)             }
+   .rel.ctors     : { *(.rel.ctors)    }
+@@ -58,6 +62,9 @@
+   .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+    __exidx_end = .;
+   .reginfo : { *(.reginfo) }
++  /* Thread Local Storage sections  */
++  .tdata        : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++  .tbss                 : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+   /* Adjust the address for the data segment.  We want to adjust up to
+      the same address within the page on the next page up.  */
+   . = ALIGN(0x100000) + (. & (0x100000 - 1));
+Index: i386.ld
+===================================================================
+--- i386.ld.orig       2008-04-24 20:15:45.000000000 +0100
++++ i386.ld    2008-04-24 20:16:11.000000000 +0100
+@@ -28,6 +28,10 @@
+     { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+   .rela.rodata   :
+     { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++  .rel.tdata     : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++  .rela.tdata    : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++  .rel.tbss      : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++  .rela.tbss     : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.got       : { *(.rel.got)              }
+   .rela.got      : { *(.rela.got)             }
+   .rel.ctors     : { *(.rel.ctors)    }
+@@ -53,6 +57,9 @@
+   _etext = .;
+   PROVIDE (etext = .);
+   .fini      : { *(.fini)    } =0x47ff041f
++  /* Thread Local Storage sections  */
++  .tdata        : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++  .tbss                 : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+   . = ALIGN(32 / 8);
+   PROVIDE (__preinit_array_start = .);
+   .preinit_array     : { *(.preinit_array) }
diff --git a/packages/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.1+svn/91-oh-sdl-cursor.patch
new file mode 100644 (file)
index 0000000..b3d95a4
--- /dev/null
@@ -0,0 +1,18 @@
+=== modified file 'sdl.c'
+---
+ sdl.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: sdl.c
+===================================================================
+--- sdl.c.orig 2008-04-24 20:15:45.000000000 +0100
++++ sdl.c      2008-04-24 20:16:12.000000000 +0100
+@@ -247,7 +247,7 @@
+     if (kbd_mouse_is_absolute()) {
+         SDL_ShowCursor(1);
+-        SDL_SetCursor(sdl_cursor_hidden);
++        /* SDL_SetCursor(sdl_cursor_hidden); */
+     } else {
+         SDL_ShowCursor(0);
+     }
diff --git a/packages/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch b/packages/qemu/qemu-0.9.1+svn/configure_symlinkpath_fix.patch
new file mode 100644 (file)
index 0000000..3ec304a
--- /dev/null
@@ -0,0 +1,28 @@
+Index: qemu-0.9.1/configure
+===================================================================
+--- qemu-0.9.1.orig/configure  2008-01-24 15:33:13.000000000 +0000
++++ qemu-0.9.1/configure       2008-01-24 15:45:50.000000000 +0000
+@@ -209,15 +209,17 @@
+ # find source path
+ source_path=`dirname "$0"`
++source_path_used="no"
++workdir=`pwd`
++workdir=`readlink -f $workdir`
+ if [ -z "$source_path" ]; then
+-    source_path=`pwd`
++    source_path=$workdir
+ else
+     source_path=`cd "$source_path"; pwd`
+-fi
+-if test "$source_path" = `pwd` ; then
+-    source_path_used="no"
+-else
+-    source_path_used="yes"
++    source_path=`readlink -f $source_path`
++    if test "$source_path" != "$workdir" ; then
++        source_path_used="yes"
++    fi
+ fi
+ werror="no"
diff --git a/packages/qemu/qemu-0.9.1+svn/fix_brk.patch b/packages/qemu/qemu-0.9.1+svn/fix_brk.patch
new file mode 100644 (file)
index 0000000..f15e001
--- /dev/null
@@ -0,0 +1,59 @@
+Index: trunk/linux-user/syscall.c
+===================================================================
+--- trunk.orig/linux-user/syscall.c    2008-04-24 20:16:24.000000000 +0100
++++ trunk/linux-user/syscall.c 2008-04-24 20:16:32.000000000 +0100
+@@ -440,7 +440,7 @@
+     if (!new_brk)
+         return target_brk;
+     if (new_brk < target_original_brk)
+-        return -TARGET_ENOMEM;
++        return target_brk;
+     brk_page = HOST_PAGE_ALIGN(target_brk);
+@@ -455,12 +455,11 @@
+     mapped_addr = get_errno(target_mmap(brk_page, new_alloc_size,
+                                         PROT_READ|PROT_WRITE,
+                                         MAP_ANON|MAP_FIXED|MAP_PRIVATE, 0, 0));
+-    if (is_error(mapped_addr)) {
+-      return mapped_addr;
+-    } else {
++
++    if (!is_error(mapped_addr))
+       target_brk = new_brk;
+-      return target_brk;
+-    }
++    
++    return target_brk;
+ }
+ static inline abi_long copy_from_user_fdset(fd_set *fds,
+Index: trunk/linux-user/mmap.c
+===================================================================
+--- trunk.orig/linux-user/mmap.c       2008-04-24 20:16:16.000000000 +0100
++++ trunk/linux-user/mmap.c    2008-04-24 20:16:32.000000000 +0100
+@@ -264,6 +264,9 @@
+             host_start += offset - host_offset;
+         start = h2g(host_start);
+     } else {
++        int flg;
++        target_ulong addr;
++
+         if (start & ~TARGET_PAGE_MASK) {
+             errno = EINVAL;
+             return -1;
+@@ -271,6 +274,14 @@
+         end = start + len;
+         real_end = HOST_PAGE_ALIGN(end);
+         
++        for(addr = real_start; addr < real_end; addr += TARGET_PAGE_SIZE) {
++            flg = page_get_flags(addr);
++            if( flg & PAGE_RESERVED ) {
++                errno = ENXIO;
++                return -1;
++            }
++        }
++
+         /* worst case: we cannot map the file because the offset is not
+            aligned, so we read it */
+         if (!(flags & MAP_ANONYMOUS) &&
diff --git a/packages/qemu/qemu-0.9.1+svn/fix_protection_bits.patch b/packages/qemu/qemu-0.9.1+svn/fix_protection_bits.patch
new file mode 100644 (file)
index 0000000..ee2b077
--- /dev/null
@@ -0,0 +1,14 @@
+Index: qemu-0.9.1/linux-user/mmap.c
+===================================================================
+--- qemu-0.9.1.orig/linux-user/mmap.c  2008-04-16 14:10:26.000000000 +0100
++++ qemu-0.9.1/linux-user/mmap.c       2008-04-16 14:10:51.000000000 +0100
+@@ -49,8 +49,7 @@
+     end = start + len;
+     if (end < start)
+         return -EINVAL;
+-    if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC))
+-        return -EINVAL;
++    prot = prot & (PROT_READ | PROT_WRITE | PROT_EXEC);
+     if (len == 0)
+         return 0;
diff --git a/packages/qemu/qemu-0.9.1+svn/fix_segfault.patch b/packages/qemu/qemu-0.9.1+svn/fix_segfault.patch
new file mode 100644 (file)
index 0000000..224a8b8
--- /dev/null
@@ -0,0 +1,37 @@
+---
+ linux-user/syscall.c |   22 ----------------------
+ 1 file changed, 22 deletions(-)
+
+Index: trunk/linux-user/syscall.c
+===================================================================
+--- trunk.orig/linux-user/syscall.c    2008-04-24 20:16:21.000000000 +0100
++++ trunk/linux-user/syscall.c 2008-04-24 20:16:24.000000000 +0100
+@@ -5728,28 +5728,6 @@
+            goto unimplemented_nowarn;
+ #endif
+-#ifdef TARGET_NR_clock_gettime
+-    case TARGET_NR_clock_gettime:
+-    {
+-        struct timespec ts;
+-        ret = get_errno(clock_gettime(arg1, &ts));
+-        if (!is_error(ret)) {
+-            host_to_target_timespec(arg2, &ts);
+-        }
+-        break;
+-    }
+-#endif
+-#ifdef TARGET_NR_clock_getres
+-    case TARGET_NR_clock_getres:
+-    {
+-        struct timespec ts;
+-        ret = get_errno(clock_getres(arg1, &ts));
+-        if (!is_error(ret)) {
+-            host_to_target_timespec(arg2, &ts);
+-        }
+-        break;
+-    }
+-#endif
+ #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
+     case TARGET_NR_set_tid_address:
diff --git a/packages/qemu/qemu-0.9.1+svn/no-strip.patch b/packages/qemu/qemu-0.9.1+svn/no-strip.patch
new file mode 100644 (file)
index 0000000..4813dd4
--- /dev/null
@@ -0,0 +1,26 @@
+Index: trunk/Makefile
+===================================================================
+--- trunk.orig/Makefile        2008-04-24 20:15:37.000000000 +0100
++++ trunk/Makefile     2008-04-24 20:16:30.000000000 +0100
+@@ -196,7 +196,7 @@
+ install: all $(if $(BUILD_DOCS),install-doc)
+       mkdir -p "$(DESTDIR)$(bindir)"
+ ifneq ($(TOOLS),)
+-      $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
++      $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
+ endif
+       mkdir -p "$(DESTDIR)$(datadir)"
+       set -e; for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
+Index: trunk/Makefile.target
+===================================================================
+--- trunk.orig/Makefile.target 2008-04-24 20:15:37.000000000 +0100
++++ trunk/Makefile.target      2008-04-24 20:16:30.000000000 +0100
+@@ -685,7 +685,7 @@
+ install: all
+ ifneq ($(PROGS),)
+-      $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
++      $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
+ # Include automatically generated dependency files
diff --git a/packages/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.1+svn/qemu-0.9.0-nptl.patch
new file mode 100644 (file)
index 0000000..ac68ebf
--- /dev/null
@@ -0,0 +1,1100 @@
+---
+ configure                |   25 ++++++
+ exec-all.h               |  165 ------------------------------------------
+ linux-user/arm/syscall.h |    4 -
+ linux-user/main.c        |   94 +++++++++++++++++++++---
+ linux-user/qemu.h        |    3 
+ linux-user/syscall.c     |   91 ++++++++++++++++++++++-
+ qemu_spinlock.h          |  181 +++++++++++++++++++++++++++++++++++++++++++++++
+ target-arm/cpu.h         |   10 ++
+ target-arm/op.c          |    6 +
+ target-arm/translate.c   |    9 ++
+ 10 files changed, 405 insertions(+), 183 deletions(-)
+
+Index: trunk/configure
+===================================================================
+--- trunk.orig/configure       2008-04-24 20:16:52.000000000 +0100
++++ trunk/configure    2008-04-24 20:16:53.000000000 +0100
+@@ -112,6 +112,7 @@
+ build_docs="no"
+ uname_release=""
+ curses="yes"
++nptl="yes"
+ # OS specific
+ targetos=`uname -s`
+@@ -339,6 +340,8 @@
+   ;;
+   *) echo "ERROR: unknown option $opt"; show_help="yes"
+   ;;
++  --disable-nptl) nptl="no"
++  ;;
+   esac
+ done
+@@ -436,6 +439,7 @@
+ echo "  --disable-linux-user     disable all linux usermode emulation targets"
+ echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
+ echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
++echo "  --disable-nptl           disable usermode NPTL guest support"
+ echo "  --fmod-lib               path to FMOD library"
+ echo "  --fmod-inc               path to FMOD includes"
+ echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
+@@ -647,6 +651,23 @@
+ }
+ EOF
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++  :
++else
++   nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+@@ -845,6 +866,7 @@
+ echo "Documentation     $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r          $uname_release"
++echo "NPTL support      $nptl"
+ if test $sdl_too_old = "yes"; then
+ echo "-> Your SDL version is too old - please upgrade to have SDL support"
+@@ -1228,6 +1250,9 @@
+     echo "#define TARGET_ARM 1" >> $config_h
+     echo "#define CONFIG_NO_DYNGEN_OP 1" >> $config_h
+     bflt="yes"
++    if test "$nptl" = "yes" ; then
++      echo "#define USE_NPTL 1" >> $config_h
++    fi
+   ;;
+   cris)
+     echo "TARGET_ARCH=cris" >> $config_mak
+Index: trunk/exec-all.h
+===================================================================
+--- trunk.orig/exec-all.h      2008-04-24 20:16:41.000000000 +0100
++++ trunk/exec-all.h   2008-04-24 20:16:53.000000000 +0100
+@@ -303,217 +303,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+-#if defined(__hppa__)
+-
+-typedef int spinlock_t[4];
+-
+-#define SPIN_LOCK_UNLOCKED { 1, 1, 1, 1 }
+-
+-static inline void resetlock (spinlock_t *p)
+-{
+-    (*p)[0] = (*p)[1] = (*p)[2] = (*p)[3] = 1;
+-}
+-
+-#else
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-static inline void resetlock (spinlock_t *p)
+-{
+-    *p = SPIN_LOCK_UNLOCKED;
+-}
+-
+-#endif
+-
+-#if defined(__powerpc__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    __asm__ __volatile__ (
+-                          "0:    lwarx %0,0,%1\n"
+-                          "      xor. %0,%3,%0\n"
+-                          "      bne 1f\n"
+-                          "      stwcx. %2,0,%1\n"
+-                          "      bne- 0b\n"
+-                          "1:    "
+-                          : "=&r" (ret)
+-                          : "r" (p), "r" (1), "r" (0)
+-                          : "cr0", "memory");
+-    return ret;
+-}
+-#elif defined(__i386__)
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#elif defined(__x86_64__)
+-static inline int testandset (int *p)
+-{
+-    long int readval = 0;
+-
+-    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+-                          : "+m" (*p), "+a" (readval)
+-                          : "r" (1)
+-                          : "cc");
+-    return readval;
+-}
+-#elif defined(__s390__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
+-                        "   jl    0b"
+-                        : "=&d" (ret)
+-                        : "r" (1), "a" (p), "0" (*p)
+-                        : "cc", "memory" );
+-    return ret;
+-}
+-#elif defined(__alpha__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-    unsigned long one;
+-
+-    __asm__ __volatile__ ("0: mov 1,%2\n"
+-                        "     ldl_l %0,%1\n"
+-                        "     stl_c %2,%1\n"
+-                        "     beq %2,1f\n"
+-                        ".subsection 2\n"
+-                        "1:   br 0b\n"
+-                        ".previous"
+-                        : "=r" (ret), "=m" (*p), "=r" (one)
+-                        : "m" (*p));
+-    return ret;
+-}
+-#elif defined(__sparc__)
+-static inline int testandset (int *p)
+-{
+-      int ret;
+-
+-      __asm__ __volatile__("ldstub    [%1], %0"
+-                           : "=r" (ret)
+-                           : "r" (p)
+-                           : "memory");
+-
+-      return (ret ? 1 : 0);
+-}
+-#elif defined(__arm__)
+-static inline int testandset (int *spinlock)
+-{
+-    register unsigned int ret;
+-    __asm__ __volatile__("swp %0, %1, [%2]"
+-                         : "=r"(ret)
+-                         : "0"(1), "r"(spinlock));
+-
+-    return ret;
+-}
+-#elif defined(__mc68000)
+-static inline int testandset (int *p)
+-{
+-    char ret;
+-    __asm__ __volatile__("tas %1; sne %0"
+-                         : "=r" (ret)
+-                         : "m" (p)
+-                         : "cc","memory");
+-    return ret;
+-}
+-#elif defined(__hppa__)
+-
+-/* Because malloc only guarantees 8-byte alignment for malloc'd data,
+-   and GCC only guarantees 8-byte alignment for stack locals, we can't
+-   be assured of 16-byte alignment for atomic lock data even if we
+-   specify "__attribute ((aligned(16)))" in the type declaration.  So,
+-   we use a struct containing an array of four ints for the atomic lock
+-   type and dynamically select the 16-byte aligned int from the array
+-   for the semaphore.  */
+-#define __PA_LDCW_ALIGNMENT 16
+-static inline void *ldcw_align (void *p) {
+-    unsigned long a = (unsigned long)p;
+-    a = (a + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1);
+-    return (void *)a;
+-}
+-
+-static inline int testandset (spinlock_t *p)
+-{
+-    unsigned int ret;
+-    p = ldcw_align(p);
+-    __asm__ __volatile__("ldcw 0(%1),%0"
+-                         : "=r" (ret)
+-                         : "r" (p)
+-                         : "memory" );
+-    return !ret;
+-}
+-
+-#elif defined(__ia64)
+-
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+-    return __sync_lock_test_and_set (p, 1);
+-}
+-#elif defined(__mips__)
+-static inline int testandset (int *p)
+-{
+-    int ret;
+-
+-    __asm__ __volatile__ (
+-      "       .set push               \n"
+-      "       .set noat               \n"
+-      "       .set mips2              \n"
+-      "1:     li      $1, 1           \n"
+-      "       ll      %0, %1          \n"
+-      "       sc      $1, %1          \n"
+-      "       beqz    $1, 1b          \n"
+-      "       .set pop                "
+-      : "=r" (ret), "+R" (*p)
+-      :
+-      : "memory");
+-
+-    return ret;
+-}
+-#else
+-#error unimplemented CPU support
+-#endif
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-    while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-    resetlock(lock);
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+-    return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+ extern spinlock_t tb_lock;
+Index: trunk/linux-user/arm/syscall.h
+===================================================================
+--- trunk.orig/linux-user/arm/syscall.h        2008-04-24 20:16:41.000000000 +0100
++++ trunk/linux-user/arm/syscall.h     2008-04-24 20:16:53.000000000 +0100
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE      0x900000
+ #define ARM_THUMB_SYSCALL     0
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE     0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls          (ARM_NR_BASE + 5)
+ #define ARM_NR_semihosting      0x123456
+ #define ARM_NR_thumb_semihosting  0xAB
+Index: trunk/linux-user/main.c
+===================================================================
+--- trunk.orig/linux-user/main.c       2008-04-24 20:16:47.000000000 +0100
++++ trunk/linux-user/main.c    2008-04-24 20:17:38.000000000 +0100
+@@ -365,6 +365,50 @@
+     }
+ }
++/* Handle a jump to the kernel code page.  */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++    uint32_t addr;
++    uint32_t *ptr;
++    uint32_t cpsr;
++
++    switch (env->regs[15]) {
++    case 0xffff0fc0: /* __kernel_cmpxchg */
++        /* XXX: This only works between threads, not between processes.
++           Use native atomic operations.  */
++        /* ??? This probably breaks horribly if the access segfaults.  */
++        cpu_lock();
++        ptr = (uint32_t *)env->regs[2];
++        cpsr = cpsr_read(env);
++        if (*ptr == env->regs[0]) {
++            *ptr = env->regs[1];
++            env->regs[0] = 0;
++            cpsr |= CPSR_C;
++        } else {
++            env->regs[0] = -1;
++            cpsr &= ~CPSR_C;
++        }
++        cpsr_write(env, cpsr, CPSR_C);
++        cpu_unlock();
++        break;
++    case 0xffff0fe0: /* __kernel_get_tls */
++        env->regs[0] = env->cp15.c13_tls2;
++        break;
++    default:
++        return 1;
++    }
++    /* Jump back to the caller.  */
++    addr = env->regs[14];
++    if (addr & 1) {
++        env->thumb = 1;
++        addr &= ~1;
++    }
++    env->regs[15] = addr;
++
++    return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+     int trapnr;
+@@ -475,10 +519,8 @@
+                     }
+                 }
+-                if (n == ARM_NR_cacheflush) {
+-                    arm_cache_flush(env->regs[0], env->regs[1]);
+-                } else if (n == ARM_NR_semihosting
+-                           || n == ARM_NR_thumb_semihosting) {
++                if (n == ARM_NR_semihosting
++                    || n == ARM_NR_thumb_semihosting) {
+                     env->regs[0] = do_arm_semihosting (env);
+                 } else if (n == 0 || n >= ARM_SYSCALL_BASE
+                            || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -489,14 +531,34 @@
+                         n -= ARM_SYSCALL_BASE;
+                         env->eabi = 0;
+                     }
+-                    env->regs[0] = do_syscall(env,
+-                                              n,
+-                                              env->regs[0],
+-                                              env->regs[1],
+-                                              env->regs[2],
+-                                              env->regs[3],
+-                                              env->regs[4],
+-                                              env->regs[5]);
++                    if ( n > ARM_NR_BASE) {
++                        switch (n)
++                          {
++                          case ARM_NR_cacheflush:
++                              arm_cache_flush(env->regs[0], env->regs[1]);
++                              break;
++#ifdef USE_NPTL
++                          case ARM_NR_set_tls:
++                              cpu_set_tls(env, env->regs[0]);
++                              env->regs[0] = 0;
++                              break;
++#endif
++                          default:
++                              printf ("Error: Bad syscall: %x\n", n);
++                              goto error;
++                          }
++                      }
++                    else
++                      {
++                        env->regs[0] = do_syscall(env,
++                                                  n,
++                                                  env->regs[0],
++                                                  env->regs[1],
++                                                  env->regs[2],
++                                                  env->regs[3],
++                                                  env->regs[4],
++                                                  env->regs[5]);
++                      }
+                 } else {
+                     goto error;
+                 }
+@@ -535,6 +597,10 @@
+                   }
+             }
+             break;
++        case EXCP_KERNEL_TRAP:
++            if (do_kernel_trap(env))
++              goto error;
++            break;
+         default:
+         error:
+             fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+@@ -1994,6 +2060,11 @@
+     int drop_ld_preload = 0, environ_count = 0;
+     char **target_environ, **wrk, **dst;
++    char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
++
++    if (assume_kernel)
++       setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
++
+     if (argc <= 1)
+         usage();
+@@ -2403,6 +2474,10 @@
+     ts->heap_base = info->brk;
+     /* This will be filled in on the first SYS_HEAPINFO call.  */
+     ts->heap_limit = 0;
++    /* Register the magic kernel code page.  The cpu will generate a
++       special exception when it tries to execute code here.  We can't
++       put real code here because it may be in use by the host kernel.  */
++    page_set_flags(0xffff0000, 0xffff0fff, 0);
+ #endif
+     if (gdbstub_port) {
+Index: trunk/linux-user/qemu.h
+===================================================================
+--- trunk.orig/linux-user/qemu.h       2008-04-24 20:16:41.000000000 +0100
++++ trunk/linux-user/qemu.h    2008-04-24 20:16:53.000000000 +0100
+@@ -107,6 +107,9 @@
+     uint32_t heap_base;
+     uint32_t heap_limit;
+ #endif
++#ifdef USE_NPTL
++    uint32_t *child_tidptr;
++#endif
+     int used; /* non zero if used */
+     struct image_info *info;
+     uint8_t stack[0];
+Index: trunk/linux-user/syscall.c
+===================================================================
+--- trunk.orig/linux-user/syscall.c    2008-04-24 20:16:50.000000000 +0100
++++ trunk/linux-user/syscall.c 2008-04-24 20:19:52.000000000 +0100
+@@ -61,6 +61,7 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
++#include <linux/futex.h>
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
+@@ -71,9 +72,18 @@
+ #include <linux/kd.h>
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+ //#define DEBUG
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++    CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values.  */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
+     || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
+ /* 16 bit uid wrappers emulation */
+@@ -2695,16 +2705,25 @@
+     return 0;
+ }
+ #endif
+-
+ #endif /* defined(TARGET_I386) */
+ /* this stack is the equivalent of the kernel stack associated with a
+    thread/process */
+ #define NEW_STACK_SIZE 8192
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+     CPUState *env = arg;
++#ifdef HAVE_NPTL
++    /* Wait until the parent has finshed initializing the tls state.  */
++    while (!spin_trylock(&nptl_lock))
++        usleep(1);
++    spin_unlock(&nptl_lock);
++#endif
+     cpu_loop(env);
+     /* never exits */
+     return 0;
+@@ -2712,15 +2731,27 @@
+ /* do_fork() Must return host values and target errnos (unlike most
+    do_*() functions). */
+-int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++            uint32_t *parent_tidptr, void *newtls,
++            uint32_t *child_tidptr)
+ {
+     int ret;
+     TaskState *ts;
+     uint8_t *new_stack;
+     CPUState *new_env;
++#if defined(TARGET_I386)
++     uint64_t *new_gdt_table;
++#endif
++#ifdef USE_NPTL
++    unsigned int nptl_flags;
++    if (flags & CLONE_PARENT_SETTID)
++        *parent_tidptr = gettid();
++#endif
+     if (flags & CLONE_VM) {
+         ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
++        if (!ts)
++          return -ENOMEM;
+         memset(ts, 0, sizeof(TaskState));
+         new_stack = ts->stack;
+         ts->used = 1;
+@@ -2732,6 +2763,29 @@
+ #if defined(TARGET_I386)
+         if (!newsp)
+             newsp = env->regs[R_ESP];
++       new_gdt_table = malloc(9 * 8);
++       if (!new_gdt_table) {
++               free(new_env);
++               return -ENOMEM;
++       }
++       /* Copy main GDT table from parent, but clear TLS entries */
++       memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
++       memset(&new_gdt_table[6], 0, 3 * 8); 
++       new_env->gdt.base = h2g(new_gdt_table);
++       if (flags & 0x00080000 /* CLONE_SETTLS */) {
++               ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
++               if (ret) {
++                       free(new_gdt_table);
++                       free(new_env);
++                       return ret;
++               }
++       }
++       cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
++       cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
++       cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
++       cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
++       cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
++       cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
+         new_env->regs[R_ESP] = newsp;
+         new_env->regs[R_EAX] = 0;
+ #elif defined(TARGET_ARM)
+@@ -2784,16 +2838,67 @@
+ #error unsupported target CPU
+ #endif
+         new_env->opaque = ts;
++#ifdef USE_NPTL
++        nptl_flags = flags;
++        flags &= ~CLONE_NPTL_FLAGS2;
++
++        if (nptl_flags & CLONE_CHILD_CLEARTID) {
++            ts->child_tidptr = child_tidptr;
++        }
++
++        if (nptl_flags & CLONE_SETTLS)
++            cpu_set_tls (new_env, newtls);
++
++        /* Grab the global cpu lock so that the thread setup appears
++           atomic.  */
++        if (nptl_flags & CLONE_CHILD_SETTID)
++            spin_lock(&nptl_lock);
++
++#else
++        if (flags & CLONE_NPTL_FLAGS2)
++            return -EINVAL;
++#endif
++
++       if (CLONE_VFORK & flags)
++              flags ^= CLONE_VM;
+ #ifdef __ia64__
+         ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+       ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++        if (ret != -1) {
++            if (nptl_flags & CLONE_CHILD_SETTID)
++                *child_tidptr = ret;
++        }
++
++        /* Allow the child to continue.  */
++        if (nptl_flags & CLONE_CHILD_SETTID)
++            spin_unlock(&nptl_lock);
++#endif
+     } else {
+         /* if no CLONE_VM, we consider it is a fork */
+-        if ((flags & ~CSIGNAL) != 0)
++        if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
+             return -EINVAL;
+         ret = fork();
++#ifdef USE_NPTL
++        /* There is a race condition here.  The parent process could
++           theoretically read the TID in the child process before the child
++           tid is set.  This would require using either ptrace
++           (not implemented) or having *_tidptr to point at a shared memory
++           mapping.  We can't repeat the spinlock hack used above because
++           the child process gets its own copy of the lock.  */
++        if (ret == 0) {
++            /* Child Process.  */
++            if (flags & CLONE_CHILD_SETTID)
++                *child_tidptr = gettid();
++            ts = (TaskState *)env->opaque;
++            if (flags & CLONE_CHILD_CLEARTID)
++                ts->child_tidptr = child_tidptr;
++            if (flags & CLONE_SETTLS)
++                cpu_set_tls (env, newtls);
++        }
++#endif
+     }
+     return ret;
+ }
+@@ -3052,6 +3157,68 @@
+     unlock_user_struct(target_ts, target_addr, 1);
+ }
++static long do_futex(target_ulong uaddr, int op, uint32_t val,
++                    target_ulong utime, target_ulong uaddr2,
++                    uint32_t val3)
++{
++       struct timespec host_utime;
++       unsigned long val2 = utime;
++
++       if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
++               target_to_host_timespec(&host_utime, utime);
++               val2 = (unsigned long)&host_utime;
++       }
++ 
++#ifdef BSWAP_NEEDED
++       switch(op) {
++       case FUTEX_CMP_REQUEUE:
++               val3 = tswap32(val3);
++       case FUTEX_REQUEUE:
++               val2 = tswap32(val2);
++       case FUTEX_WAIT:
++       case FUTEX_WAKE:
++               val = tswap32(val);
++       case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
++       case FUTEX_UNLOCK_PI:
++               break;
++       default: 
++               gemu_log("qemu: Unsupported futex op %d\n", op);
++               return -ENOSYS;
++       } 
++#if 0 /* No, it's worse than this */
++       if (op == FUTEX_WAKE_OP) {
++               /* Need to munge the secondary operation (val3) */
++               val3 = tswap32(val3);
++               int op2 = (val3 >> 28) & 7;
++               int cmp = (val3 >> 24) & 15;
++               int oparg = (val3 << 8) >> 20;
++               int cmparg = (val3 << 20) >> 20;
++               int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
++
++               if (shift)
++                   oparg = (oparg & 7) + 24 - (oparg & 24);
++               else oparg = 
++               if (op2 == FUTEX_OP_ADD) {
++                       gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
++                       return -ENOSYS;
++               }
++               if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
++                   cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
++                       gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
++                       return -ENOSYS;
++               }
++               val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
++       }
++#endif
++#endif
++       return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
++}
++
++int do_set_tid_address(target_ulong tidptr)
++{
++       return syscall(__NR_set_tid_address, g2h(tidptr));
++}
++
+ /* do_syscall() should always have a single exit point at the end so
+    that actions, such as logging of syscall results, can be performed.
+    All errnos that do_syscall() returns must be -TARGET_<errcode>. */
+@@ -3076,7 +3243,7 @@
+         _mcleanup();
+ #endif
+         gdb_exit(cpu_env, arg1);
+-        /* XXX: should free thread stack and CPU env */
++        /* XXX: should free thread stack, GDT and CPU env */
+         _exit(arg1);
+         ret = 0; /* avoid warning */
+         break;
+@@ -3118,7 +3285,7 @@
+         ret = do_brk(arg1);
+         break;
+     case TARGET_NR_fork:
+-        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+         break;
+ #ifdef TARGET_NR_waitpid
+     case TARGET_NR_waitpid:
+@@ -4482,7 +4649,8 @@
+         ret = get_errno(fsync(arg1));
+         break;
+     case TARGET_NR_clone:
+-        ret = get_errno(do_fork(cpu_env, arg1, arg2));
++        ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++                        (void *)arg4, (uint32_t *)arg5));
+         break;
+ #ifdef __NR_exit_group
+         /* new thread calls */
+@@ -4943,7 +5111,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+     case TARGET_NR_vfork:
+-        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++        ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++                                NULL, NULL, NULL));
+         break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -5521,6 +5690,9 @@
+ #elif defined(TARGET_I386) && defined(TARGET_ABI32)
+       ret = do_set_thread_area(cpu_env, arg1);
+       break;
++#elif TARGET_i386
++        ret = get_errno(do_set_thread_area(cpu_env, arg1));
++        break;
+ #else
+       goto unimplemented_nowarn;
+ #endif
+@@ -5538,6 +5710,12 @@
+         goto unimplemented_nowarn;
+ #endif
++#ifdef TARGET_NR_futex
++    case TARGET_NR_futex:
++       ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
++       break;
++#endif
++
+ #ifdef TARGET_NR_clock_gettime
+     case TARGET_NR_clock_gettime:
+     {
+Index: trunk/qemu_spinlock.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ trunk/qemu_spinlock.h      2008-04-24 20:16:53.000000000 +0100
+@@ -0,0 +1,250 @@
++/*
++ * Atomic operation helper include
++ *
++ *  Copyright (c) 2005 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++#ifndef QEMU_SPINLOCK_H
++#define QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++    int ret;
++    __asm__ __volatile__ (
++                          "0:    lwarx %0,0,%1\n"
++                          "      xor. %0,%3,%0\n"
++                          "      bne 1f\n"
++                          "      stwcx. %2,0,%1\n"
++                          "      bne- 0b\n"
++                          "1:    "
++                          : "=&r" (ret)
++                          : "r" (p), "r" (1), "r" (0)
++                          : "cr0", "memory");
++    return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++    long int readval = 0;
++
++    __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++                          : "+m" (*p), "+a" (readval)
++                          : "r" (1)
++                          : "cc");
++    return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++    int ret;
++
++    __asm__ __volatile__ ("0: cs    %0,%1,0(%2)\n"
++                        "   jl    0b"
++                        : "=&d" (ret)
++                        : "r" (1), "a" (p), "0" (*p)
++                        : "cc", "memory" );
++    return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++    int ret;
++    unsigned long one;
++
++    __asm__ __volatile__ ("0: mov 1,%2\n"
++                        "     ldl_l %0,%1\n"
++                        "     stl_c %2,%1\n"
++                        "     beq %2,1f\n"
++                        ".subsection 2\n"
++                        "1:   br 0b\n"
++                        ".previous"
++                        : "=r" (ret), "=m" (*p), "=r" (one)
++                        : "m" (*p));
++    return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++      int ret;
++
++      __asm__ __volatile__("ldstub    [%1], %0"
++                           : "=r" (ret)
++                           : "r" (p)
++                           : "memory");
++
++      return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++    register unsigned int ret;
++    __asm__ __volatile__("swp %0, %1, [%2]"
++                         : "=r"(ret)
++                         : "0"(1), "r"(spinlock));
++
++    return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++    char ret;
++    __asm__ __volatile__("tas %1; sne %0"
++                         : "=r" (ret)
++                         : "m" (p)
++                         : "cc","memory");
++    return ret;
++}
++#endif
++
++#ifdef __hppa__
++/* Because malloc only guarantees 8-byte alignment for malloc'd data,
++   and GCC only guarantees 8-byte alignment for stack locals, we can't
++   be assured of 16-byte alignment for atomic lock data even if we
++   specify "__attribute ((aligned(16)))" in the type declaration.  So,
++   we use a struct containing an array of four ints for the atomic lock
++   type and dynamically select the 16-byte aligned int from the array
++   for the semaphore.  */
++#define __PA_LDCW_ALIGNMENT 16
++static inline void *ldcw_align (void *p) {
++    unsigned long a = (unsigned long)p;
++    a = (a + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1);
++    return (void *)a;
++}
++
++static inline int testandset (spinlock_t *p)
++{
++    unsigned int ret;
++    p = ldcw_align(p);
++    __asm__ __volatile__("ldcw 0(%1),%0"
++                         : "=r" (ret)
++                         : "r" (p)
++                         : "memory" );
++    return !ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++    return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++#ifdef __mips__
++static inline int testandset (int *p)
++{
++    int ret;
++
++    __asm__ __volatile__ (
++      "       .set push               \n"
++      "       .set noat               \n"
++      "       .set mips2              \n"
++      "1:     li      $1, 1           \n"
++      "       ll      %0, %1          \n"
++      "       sc      $1, %1          \n"
++      "       beqz    $1, 1b          \n"
++      "       .set pop                "
++      : "=r" (ret), "+R" (*p)
++      :
++      : "memory");
++
++    return ret;
++}
++#endif
++
++#if defined(__hppa__)
++
++typedef int spinlock_t[4];
++
++#define SPIN_LOCK_UNLOCKED { 1, 1, 1, 1 }
++
++static inline void resetlock (spinlock_t *p)
++{
++    (*p)[0] = (*p)[1] = (*p)[2] = (*p)[3] = 1;
++}
++
++#else
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++static inline void resetlock (spinlock_t *p)
++{
++    *p = SPIN_LOCK_UNLOCKED;
++}
++
++#endif
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++    while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++    resetlock(lock);
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++    return 1;
++}
++#endif
++
++#endif
+Index: trunk/target-arm/cpu.h
+===================================================================
+--- trunk.orig/target-arm/cpu.h        2008-04-24 20:16:41.000000000 +0100
++++ trunk/target-arm/cpu.h     2008-04-24 20:16:53.000000000 +0100
+@@ -38,6 +38,7 @@
+ #define EXCP_FIQ             6
+ #define EXCP_BKPT            7
+ #define EXCP_EXCEPTION_EXIT  8   /* Return from v7M exception.  */
++#define EXCP_KERNEL_TRAP     9   /* Jumped to kernel code page.  */
+ #define ARMV7M_EXCP_RESET   1
+ #define ARMV7M_EXCP_NMI     2
+@@ -218,6 +219,15 @@
+ void cpu_lock(void);
+ void cpu_unlock(void);
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++  env->cp15.c13_tls2 = (uint32_t)(long)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+Index: trunk/target-arm/translate.c
+===================================================================
+--- trunk.orig/target-arm/translate.c  2008-04-24 20:16:41.000000000 +0100
++++ trunk/target-arm/translate.c       2008-04-24 20:16:53.000000000 +0100
+@@ -8606,7 +8606,14 @@
+             gen_exception(EXCP_EXCEPTION_EXIT);
+         }
+ #endif
+-
++#ifdef CONFIG_USER_ONLY
++        /* Intercept jump to the magic kernel page.  */
++        if (dc->pc > 0xffff0000) {
++            gen_exception(EXCP_KERNEL_TRAP);
++            dc->is_jmp = DISAS_UPDATE;
++            break;
++        }
++#endif
+         if (env->nb_breakpoints > 0) {
+             for(j = 0; j < env->nb_breakpoints; j++) {
+                 if (env->breakpoints[j] == dc->pc) {
diff --git a/packages/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.1+svn/qemu-amd64-32b-mapping-0.9.0.patch
new file mode 100644 (file)
index 0000000..02f093a
--- /dev/null
@@ -0,0 +1,37 @@
+---
+ linux-user/mmap.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+Index: trunk/linux-user/mmap.c
+===================================================================
+--- trunk.orig/linux-user/mmap.c       2008-04-24 20:15:37.000000000 +0100
++++ trunk/linux-user/mmap.c    2008-04-24 20:16:16.000000000 +0100
+@@ -29,6 +29,10 @@
+ //#define DEBUG_MMAP
++#ifndef MAP_32BIT
++#define MAP_32BIT 0
++#endif
++
+ /* NOTE: all the constants are the HOST ones, but addresses are target. */
+ int target_mprotect(abi_ulong start, abi_ulong len, int prot)
+ {
+@@ -251,7 +255,7 @@
+            especially important if qemu_host_page_size >
+            qemu_real_host_page_size */
+         p = mmap(g2h(mmap_start),
+-                 host_len, prot, flags | MAP_FIXED, fd, host_offset);
++                 host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset);
+         if (p == MAP_FAILED)
+             return -1;
+         /* update start so that it points to the file position at 'offset' */
+@@ -406,7 +410,7 @@
+     unsigned long host_addr;
+     /* XXX: use 5 args syscall */
+-    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
++    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT);
+     if (host_addr == -1)
+         return -1;
+     new_addr = h2g(host_addr);
diff --git a/packages/qemu/qemu-0.9.1+svn/qemu-n800-support.patch b/packages/qemu/qemu-0.9.1+svn/qemu-n800-support.patch
new file mode 100644 (file)
index 0000000..1224fb4
--- /dev/null
@@ -0,0 +1,2381 @@
+diff -urN 4242/cpu-all.h qemu-omap/cpu-all.h
+--- 4242/cpu-all.h     2008-04-24 21:26:19.000000000 +0100
++++ qemu-omap/cpu-all.h        2008-04-23 09:57:55.000000000 +0100
+@@ -816,7 +816,7 @@
+ /* physical memory access */
+ #define TLB_INVALID_MASK   (1 << 3)
+ #define IO_MEM_SHIFT       4
+-#define IO_MEM_NB_ENTRIES  (1 << (TARGET_PAGE_BITS  - IO_MEM_SHIFT))
++#define IO_MEM_NB_ENTRIES  (16 << (TARGET_PAGE_BITS  - IO_MEM_SHIFT))
+ #define IO_MEM_RAM         (0 << IO_MEM_SHIFT) /* hardcoded offset */
+ #define IO_MEM_ROM         (1 << IO_MEM_SHIFT) /* hardcoded offset */
+diff -urN 4242/exec.c qemu-omap/exec.c
+--- 4242/exec.c        2008-04-24 18:11:49.000000000 +0100
++++ qemu-omap/exec.c   2008-04-23 09:57:55.000000000 +0100
+@@ -1664,7 +1664,7 @@
+     {
+         if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
+             /* IO memory case */
+-            address = vaddr | pd;
++            address = vaddr | (pd & ~TARGET_PAGE_MASK);
+             addend = paddr;
+         } else {
+             /* standard memory */
+@@ -1698,7 +1698,9 @@
+         } else {
+             te->addr_read = -1;
+         }
+-        if (prot & PAGE_EXEC) {
++        if ((pd & ~TARGET_PAGE_MASK) > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
++            te->addr_code = pd;
++        } else if (prot & PAGE_EXEC) {
+             te->addr_code = address;
+         } else {
+             te->addr_code = -1;
+@@ -2493,7 +2495,9 @@
+     if (io_index <= 0) {
+         if (io_mem_nb >= IO_MEM_NB_ENTRIES)
+             return -1;
+-        io_index = io_mem_nb++;
++        do io_index = io_mem_nb++;
++        while (((io_index << IO_MEM_SHIFT) & ~TARGET_PAGE_MASK)
++               <= IO_MEM_NOTDIRTY);
+     } else {
+         if (io_index >= IO_MEM_NB_ENTRIES)
+             return -1;
+diff -urN 4242/hw/max7310.c qemu-omap/hw/max7310.c
+--- 4242/hw/max7310.c  2008-04-24 18:11:49.000000000 +0100
++++ qemu-omap/hw/max7310.c     2008-03-02 19:31:55.000000000 +0000
+@@ -134,8 +134,8 @@
+         s->i2c_command_byte = 1;
+         break;
+     case I2C_FINISH:
+-        if (s->len == 1)
+ #ifdef VERBOSE
++        if (s->len == 1)
+             printf("%s: message too short (%i bytes)\n", __FUNCTION__, s->len);
+ #endif
+         break;
+diff -urN 4242/hw/ndis.h qemu-omap/hw/ndis.h
+--- 4242/hw/ndis.h     1970-01-01 01:00:00.000000000 +0100
++++ qemu-omap/hw/ndis.h        2008-04-23 09:57:56.000000000 +0100
+@@ -0,0 +1,217 @@
++/*
++ * ndis.h 
++ * 
++ * ntddndis.h modified by Benedikt Spranger <b.spranger@pengutronix.de>
++ * 
++ * Thanks to the cygwin development team, 
++ * espacially to Casper S. Hornstrup <chorns@users.sourceforge.net>
++ * 
++ * THIS SOFTWARE IS NOT COPYRIGHTED
++ *
++ * This source code is offered for use in the public domain. You may
++ * use, modify or distribute it freely.
++ *
++ * This code is distributed in the hope that it will be useful but
++ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
++ * DISCLAIMED. This includes but is not limited to warranties of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ *
++ */
++
++#ifndef _LINUX_NDIS_H
++#define _LINUX_NDIS_H
++
++
++#define NDIS_STATUS_MULTICAST_FULL      0xC0010009
++#define NDIS_STATUS_MULTICAST_EXISTS      0xC001000A
++#define NDIS_STATUS_MULTICAST_NOT_FOUND   0xC001000B
++
++enum NDIS_DEVICE_POWER_STATE {
++      NdisDeviceStateUnspecified = 0,
++      NdisDeviceStateD0,
++      NdisDeviceStateD1,
++      NdisDeviceStateD2,
++      NdisDeviceStateD3,
++      NdisDeviceStateMaximum
++};
++
++struct NDIS_PM_WAKE_UP_CAPABILITIES {
++      enum NDIS_DEVICE_POWER_STATE  MinMagicPacketWakeUp;
++      enum NDIS_DEVICE_POWER_STATE  MinPatternWakeUp;
++      enum NDIS_DEVICE_POWER_STATE  MinLinkChangeWakeUp;
++};
++
++/* NDIS_PNP_CAPABILITIES.Flags constants */
++#define NDIS_DEVICE_WAKE_UP_ENABLE                0x00000001
++#define NDIS_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE  0x00000002
++#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE   0x00000004
++
++struct NDIS_PNP_CAPABILITIES {
++      __le32                                  Flags;
++      struct NDIS_PM_WAKE_UP_CAPABILITIES     WakeUpCapabilities;
++};
++
++struct NDIS_PM_PACKET_PATTERN {
++      __le32  Priority;
++      __le32  Reserved;
++      __le32  MaskSize;
++      __le32  PatternOffset;
++      __le32  PatternSize;
++      __le32  PatternFlags;
++};
++
++
++/* Required Object IDs (OIDs) */
++#define OID_GEN_SUPPORTED_LIST            0x00010101
++#define OID_GEN_HARDWARE_STATUS           0x00010102
++#define OID_GEN_MEDIA_SUPPORTED           0x00010103
++#define OID_GEN_MEDIA_IN_USE              0x00010104
++#define OID_GEN_MAXIMUM_LOOKAHEAD         0x00010105
++#define OID_GEN_MAXIMUM_FRAME_SIZE        0x00010106
++#define OID_GEN_LINK_SPEED                0x00010107
++#define OID_GEN_TRANSMIT_BUFFER_SPACE     0x00010108
++#define OID_GEN_RECEIVE_BUFFER_SPACE      0x00010109
++#define OID_GEN_TRANSMIT_BLOCK_SIZE       0x0001010A
++#define OID_GEN_RECEIVE_BLOCK_SIZE        0x0001010B
++#define OID_GEN_VENDOR_ID                 0x0001010C
++#define OID_GEN_VENDOR_DESCRIPTION        0x0001010D
++#define OID_GEN_CURRENT_PACKET_FILTER     0x0001010E
++#define OID_GEN_CURRENT_LOOKAHEAD         0x0001010F
++#define OID_GEN_DRIVER_VERSION            0x00010110
++#define OID_GEN_MAXIMUM_TOTAL_SIZE        0x00010111
++#define OID_GEN_PROTOCOL_OPTIONS          0x00010112
++#define OID_GEN_MAC_OPTIONS               0x00010113
++#define OID_GEN_MEDIA_CONNECT_STATUS      0x00010114
++#define OID_GEN_MAXIMUM_SEND_PACKETS      0x00010115
++#define OID_GEN_VENDOR_DRIVER_VERSION     0x00010116
++#define OID_GEN_SUPPORTED_GUIDS           0x00010117
++#define OID_GEN_NETWORK_LAYER_ADDRESSES   0x00010118
++#define OID_GEN_TRANSPORT_HEADER_OFFSET   0x00010119
++#define OID_GEN_MACHINE_NAME              0x0001021A
++#define OID_GEN_RNDIS_CONFIG_PARAMETER    0x0001021B
++#define OID_GEN_VLAN_ID                   0x0001021C
++
++/* Optional OIDs */
++#define OID_GEN_MEDIA_CAPABILITIES        0x00010201
++#define OID_GEN_PHYSICAL_MEDIUM           0x00010202
++
++/* Required statistics OIDs */
++#define OID_GEN_XMIT_OK                   0x00020101
++#define OID_GEN_RCV_OK                    0x00020102
++#define OID_GEN_XMIT_ERROR                0x00020103
++#define OID_GEN_RCV_ERROR                 0x00020104
++#define OID_GEN_RCV_NO_BUFFER             0x00020105
++
++/* Optional statistics OIDs */
++#define OID_GEN_DIRECTED_BYTES_XMIT       0x00020201
++#define OID_GEN_DIRECTED_FRAMES_XMIT      0x00020202
++#define OID_GEN_MULTICAST_BYTES_XMIT      0x00020203
++#define OID_GEN_MULTICAST_FRAMES_XMIT     0x00020204
++#define OID_GEN_BROADCAST_BYTES_XMIT      0x00020205
++#define OID_GEN_BROADCAST_FRAMES_XMIT     0x00020206
++#define OID_GEN_DIRECTED_BYTES_RCV        0x00020207
++#define OID_GEN_DIRECTED_FRAMES_RCV       0x00020208
++#define OID_GEN_MULTICAST_BYTES_RCV       0x00020209
++#define OID_GEN_MULTICAST_FRAMES_RCV      0x0002020A
++#define OID_GEN_BROADCAST_BYTES_RCV       0x0002020B
++#define OID_GEN_BROADCAST_FRAMES_RCV      0x0002020C
++#define OID_GEN_RCV_CRC_ERROR             0x0002020D
++#define OID_GEN_TRANSMIT_QUEUE_LENGTH     0x0002020E
++#define OID_GEN_GET_TIME_CAPS             0x0002020F
++#define OID_GEN_GET_NETCARD_TIME          0x00020210
++#define OID_GEN_NETCARD_LOAD              0x00020211
++#define OID_GEN_DEVICE_PROFILE            0x00020212
++#define OID_GEN_INIT_TIME_MS              0x00020213
++#define OID_GEN_RESET_COUNTS              0x00020214
++#define OID_GEN_MEDIA_SENSE_COUNTS        0x00020215
++#define OID_GEN_FRIENDLY_NAME             0x00020216
++#define OID_GEN_MINIPORT_INFO             0x00020217
++#define OID_GEN_RESET_VERIFY_PARAMETERS   0x00020218
++
++/* IEEE 802.3 (Ethernet) OIDs */
++#define NDIS_802_3_MAC_OPTION_PRIORITY    0x00000001
++
++#define OID_802_3_PERMANENT_ADDRESS       0x01010101
++#define OID_802_3_CURRENT_ADDRESS         0x01010102
++#define OID_802_3_MULTICAST_LIST          0x01010103
++#define OID_802_3_MAXIMUM_LIST_SIZE       0x01010104
++#define OID_802_3_MAC_OPTIONS             0x01010105
++#define OID_802_3_RCV_ERROR_ALIGNMENT     0x01020101
++#define OID_802_3_XMIT_ONE_COLLISION      0x01020102
++#define OID_802_3_XMIT_MORE_COLLISIONS    0x01020103
++#define OID_802_3_XMIT_DEFERRED           0x01020201
++#define OID_802_3_XMIT_MAX_COLLISIONS     0x01020202
++#define OID_802_3_RCV_OVERRUN             0x01020203
++#define OID_802_3_XMIT_UNDERRUN           0x01020204
++#define OID_802_3_XMIT_HEARTBEAT_FAILURE  0x01020205
++#define OID_802_3_XMIT_TIMES_CRS_LOST     0x01020206
++#define OID_802_3_XMIT_LATE_COLLISIONS    0x01020207
++
++/* OID_GEN_MINIPORT_INFO constants */
++#define NDIS_MINIPORT_BUS_MASTER                      0x00000001
++#define NDIS_MINIPORT_WDM_DRIVER                      0x00000002
++#define NDIS_MINIPORT_SG_LIST                         0x00000004
++#define NDIS_MINIPORT_SUPPORTS_MEDIA_QUERY            0x00000008
++#define NDIS_MINIPORT_INDICATES_PACKETS               0x00000010
++#define NDIS_MINIPORT_IGNORE_PACKET_QUEUE             0x00000020
++#define NDIS_MINIPORT_IGNORE_REQUEST_QUEUE            0x00000040
++#define NDIS_MINIPORT_IGNORE_TOKEN_RING_ERRORS        0x00000080
++#define NDIS_MINIPORT_INTERMEDIATE_DRIVER             0x00000100
++#define NDIS_MINIPORT_IS_NDIS_5                       0x00000200
++#define NDIS_MINIPORT_IS_CO                           0x00000400
++#define NDIS_MINIPORT_DESERIALIZE                     0x00000800
++#define NDIS_MINIPORT_REQUIRES_MEDIA_POLLING          0x00001000
++#define NDIS_MINIPORT_SUPPORTS_MEDIA_SENSE            0x00002000
++#define NDIS_MINIPORT_NETBOOT_CARD                    0x00004000
++#define NDIS_MINIPORT_PM_SUPPORTED                    0x00008000
++#define NDIS_MINIPORT_SUPPORTS_MAC_ADDRESS_OVERWRITE  0x00010000
++#define NDIS_MINIPORT_USES_SAFE_BUFFER_APIS           0x00020000
++#define NDIS_MINIPORT_HIDDEN                          0x00040000
++#define NDIS_MINIPORT_SWENUM                          0x00080000
++#define NDIS_MINIPORT_SURPRISE_REMOVE_OK              0x00100000
++#define NDIS_MINIPORT_NO_HALT_ON_SUSPEND              0x00200000
++#define NDIS_MINIPORT_HARDWARE_DEVICE                 0x00400000
++#define NDIS_MINIPORT_SUPPORTS_CANCEL_SEND_PACKETS    0x00800000
++#define NDIS_MINIPORT_64BITS_DMA                      0x01000000
++
++#define NDIS_MEDIUM_802_3             0x00000000
++#define NDIS_MEDIUM_802_5             0x00000001
++#define NDIS_MEDIUM_FDDI              0x00000002
++#define NDIS_MEDIUM_WAN                       0x00000003
++#define NDIS_MEDIUM_LOCAL_TALK                0x00000004
++#define NDIS_MEDIUM_DIX                       0x00000005
++#define NDIS_MEDIUM_ARCENT_RAW                0x00000006
++#define NDIS_MEDIUM_ARCENT_878_2      0x00000007
++#define NDIS_MEDIUM_ATM                       0x00000008
++#define NDIS_MEDIUM_WIRELESS_LAN      0x00000009
++#define NDIS_MEDIUM_IRDA              0x0000000A
++#define NDIS_MEDIUM_BPC                       0x0000000B
++#define NDIS_MEDIUM_CO_WAN            0x0000000C
++#define NDIS_MEDIUM_1394              0x0000000D
++
++#define NDIS_PACKET_TYPE_DIRECTED     0x00000001
++#define NDIS_PACKET_TYPE_MULTICAST    0x00000002
++#define NDIS_PACKET_TYPE_ALL_MULTICAST        0x00000004
++#define NDIS_PACKET_TYPE_BROADCAST    0x00000008
++#define NDIS_PACKET_TYPE_SOURCE_ROUTING       0x00000010
++#define NDIS_PACKET_TYPE_PROMISCUOUS  0x00000020
++#define NDIS_PACKET_TYPE_SMT          0x00000040
++#define NDIS_PACKET_TYPE_ALL_LOCAL    0x00000080
++#define NDIS_PACKET_TYPE_GROUP                0x00000100
++#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL       0x00000200
++#define NDIS_PACKET_TYPE_FUNCTIONAL   0x00000400
++#define NDIS_PACKET_TYPE_MAC_FRAME    0x00000800
++
++#define NDIS_MEDIA_STATE_CONNECTED    0x00000000
++#define NDIS_MEDIA_STATE_DISCONNECTED 0x00000001
++
++#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA     0x00000001
++#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED      0x00000002
++#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND      0x00000004
++#define NDIS_MAC_OPTION_NO_LOOPBACK             0x00000008
++#define NDIS_MAC_OPTION_FULL_DUPLEX             0x00000010
++#define NDIS_MAC_OPTION_EOTX_INDICATION         0x00000020
++#define NDIS_MAC_OPTION_8021P_PRIORITY          0x00000040
++#define NDIS_MAC_OPTION_RESERVED                0x80000000
++
++#endif /* _LINUX_NDIS_H */
+diff -urN 4242/hw/nseries.c qemu-omap/hw/nseries.c
+--- 4242/hw/nseries.c  2008-04-24 18:11:49.000000000 +0100
++++ qemu-omap/hw/nseries.c     2008-04-23 09:57:56.000000000 +0100
+@@ -602,6 +602,37 @@
+                     (void *) &config7, sizeof(config7));
+ }
++#if 0
++static uint32_t n800_pinout[104] = {
++    0x080f00d8, 0x00d40808, 0x03080808, 0x080800d0,
++    0x00dc0808, 0x0b0f0f00, 0x080800b4, 0x00c00808,
++    0x08080808, 0x180800c4, 0x00b80000, 0x08080808,
++    0x080800bc, 0x00cc0808, 0x08081818, 0x18180128,
++    0x01241800, 0x18181818, 0x000000f0, 0x01300000,
++    0x00001b0b, 0x1b0f0138, 0x00e0181b, 0x1b031b0b,
++    0x180f0078, 0x00740018, 0x0f0f0f1a, 0x00000080,
++    0x007c0000, 0x00000000, 0x00000088, 0x00840000,
++    0x00000000, 0x00000094, 0x00980300, 0x0f180003,
++    0x0000008c, 0x00900f0f, 0x0f0f1b00, 0x0f00009c,
++    0x01140000, 0x1b1b0f18, 0x0818013c, 0x01400008,
++    0x00001818, 0x000b0110, 0x010c1800, 0x0b030b0f,
++    0x181800f4, 0x00f81818, 0x00000018, 0x000000fc,
++    0x00401808, 0x00000000, 0x0f1b0030, 0x003c0008,
++    0x00000000, 0x00000038, 0x00340000, 0x00000000,
++    0x1a080070, 0x00641a1a, 0x08080808, 0x08080060,
++    0x005c0808, 0x08080808, 0x08080058, 0x00540808,
++    0x08080808, 0x0808006c, 0x00680808, 0x08080808,
++    0x000000a8, 0x00b00000, 0x08080808, 0x000000a0,
++    0x00a40000, 0x00000000, 0x08ff0050, 0x004c0808,
++    0xffffffff, 0xffff0048, 0x0044ffff, 0xffffffff,
++    0x000000ac, 0x01040800, 0x08080b0f, 0x18180100,
++    0x01081818, 0x0b0b1808, 0x1a0300e4, 0x012c0b1a,
++    0x02020018, 0x0b000134, 0x011c0800, 0x0b1b1b00,
++    0x0f0000c8, 0x00ec181b, 0x000f0f02, 0x00180118,
++    0x01200000, 0x0f0b1b1b, 0x0f0200e8, 0x0000020b,
++};
++#endif
++
+ /* Setup sequence done by the bootloader */
+ static void n800_boot_init(void *opaque)
+ {
+@@ -942,3 +973,71 @@
+     "Nokia N800 aka. RX-34 tablet (OMAP2420)",
+     n800_init,
+ };
++
++#if 0
++/* cx3110x.c */
++#define CY_ARM_INT            0x00
++#define CY_ARM_INT_ENA                0x00
++#define CY_HOST_INT           0x00
++#define CY_HOST_INT_ENA               0x00
++#define CY_HOST_INT_ACK               0x00
++#define CY_GP1_COMM           0x00
++#define CY_GP2_COMM           0x00
++#define CY_DEV_CTRL_STA               0x00
++#define CY_DMA_DATA           0x00    /* 16-bit */
++#define CY_DMA_WR_CTRL                0x00    /* 16-bit */
++#define CY_DMA_WR_LEN         0x00    /* 16-bit */
++#define CY_DMA_WR_BASE                0x00
++#define CY_DMA_RD_CTRL                0x00    /* 16-bit */
++#define CY_DMA_RD_LEN         0x00    /* 16-bit */
++#define CY_DMA_RD_BASE                0x00
++
++HW:
++(spi bus 1.0)
++  tsc2005
++(spi bus 1.1)
++  lcd_mipid
++(spi bus 2.0)
++  cx3110x (WLAN)
++(spi somewhere?)
++  pc2400m (WiMAX)
++(i2c bus 0)
++  TLV320AIC33 (audio codec on i2c)
++  TCM825x (camera on i2c)
++  lp5521 (LED on i2c)
++  tsl2563 (light sensor, hwmon on i2c)
++  lm8323 (keypad on i2c)
++(i2c bus 1)
++  tmp105 (temperature sensor, hwmon on i2c)
++  menelaus (power on i2c)
++
++GPIO   0: out hi
++GPIO   8: in  hi
++GPIO   9: out hi
++GPIO  10: out lo
++GPIO  12: out lo
++GPIO  15: out lo
++GPIO  23: out hi
++GPIO  26: in  hi, irq-186 rising
++GPIO  53: out lo
++GPIO  58: in  hi, irq-218 low wakeup
++GPIO  62: out lo
++GPIO  64: out hi
++GPIO  65: in  hi
++GPIO  66: out lo
++GPIO  93: out lo
++GPIO  94: in  hi
++GPIO  95: out lo
++GPIO  96: out hi
++GPIO 101: out lo
++GPIO 102: in  hi, irq-262 bothedge
++GPIO 106: in  hi, irq-266 falling wakeup
++GPIO 107: in  hi, irq-267 bothedge
++GPIO 108: in  lo, irq-268 rising wakeup
++GPIO 109: in  hi, irq-269 falling wakeup
++GPIO 110: in  hi, irq-270 bothedge
++GPIO 111: in  lo, irq-271 rising
++GPIO 112: out hi
++GPIO 118: out hi
++GPIO 125: in  lo, irq-285 rising
++#endif
+diff -urN 4242/hw/omap2.c qemu-omap/hw/omap2.c
+--- 4242/hw/omap2.c    2008-04-24 18:11:49.000000000 +0100
++++ qemu-omap/hw/omap2.c       2008-04-23 09:57:56.000000000 +0100
+@@ -3675,152 +3675,152 @@
+                     omap_findclk(s, "dss_l4_iclk"));
+     /* All register mappings (includin those not currenlty implemented):
+-     * SystemControlMod       48000000 - 48000fff
+-     * SystemControlL4        48001000 - 48001fff
+-     * 32kHz Timer Mod        48004000 - 48004fff
+-     * 32kHz Timer L4 48005000 - 48005fff
+-     * PRCM ModA      48008000 - 480087ff
++     * SystemControlMod       48000000 - 48000fff (REV 0x00000010)
++     * SystemControlL4        48001000 - 48001fff (0x00200010, 0x01000200, 0x00000000)
++     * 32kHz Timer Mod        48004000 - 48004fff (REV 0x00000011)
++     * 32kHz Timer L4 48005000 - 48005fff (0x00200010, 0x01000200, 0x00000000)
++     * PRCM ModA      48008000 - 480087ff (REV 0x00000010)
+      * PRCM ModB      48008800 - 48008fff
+-     * PRCM L4                48009000 - 48009fff
+-     * TEST-BCM Mod   48012000 - 48012fff
+-     * TEST-BCM L4    48013000 - 48013fff
+-     * TEST-TAP Mod   48014000 - 48014fff
+-     * TEST-TAP L4    48015000 - 48015fff
+-     * GPIO1 Mod      48018000 - 48018fff
+-     * GPIO Top               48019000 - 48019fff
+-     * GPIO2 Mod      4801a000 - 4801afff
+-     * GPIO L4                4801b000 - 4801bfff
+-     * GPIO3 Mod      4801c000 - 4801cfff
+-     * GPIO4 Mod      4801e000 - 4801efff
+-     * WDTIMER1 Mod   48020000 - 48010fff
++     * PRCM L4                48009000 - 48009fff (0x00200010, 0x00000200, 0x00000000)
++     * TEST-BCM Mod   48012000 - 48012fff (REV 0x00000010)
++     * TEST-BCM L4    48013000 - 48013fff (0x00200010, 0x00000200, 0x00000000)
++     * TEST-TAP Mod   48014000 - 48014fff (REV 0x00000010)
++     * TEST-TAP L4    48015000 - 48015fff (0x00200010, 0x00000200, 0x00000000)
++     * GPIO1 Mod      48018000 - 48018fff (REV 0x00000018)
++     * GPIO Top               48019000 - 48019fff (REV 0x00000011)
++     * GPIO2 Mod      4801a000 - 4801afff (REV 0x00000018)
++     * GPIO L4                4801b000 - 4801bfff (0x00200010, 0x00000200, 0x00000000)
++     * GPIO3 Mod      4801c000 - 4801cfff (REV 0x00000018)
++     * GPIO4 Mod      4801e000 - 4801efff (REV 0x00000018)
++     * WDTIMER1 Mod   48020000 - 48010fff (REV Abort)
+      * WDTIMER Top    48021000 - 48011fff
+-     * WDTIMER2 Mod   48022000 - 48012fff
+-     * WDTIMER L4     48023000 - 48013fff
+-     * WDTIMER3 Mod   48024000 - 48014fff
+-     * WDTIMER3 L4    48025000 - 48015fff
+-     * WDTIMER4 Mod   48026000 - 48016fff
+-     * WDTIMER4 L4    48027000 - 48017fff
+-     * GPTIMER1 Mod   48028000 - 48018fff
+-     * GPTIMER1 L4    48029000 - 48019fff
+-     * GPTIMER2 Mod   4802a000 - 4801afff
+-     * GPTIMER2 L4    4802b000 - 4801bfff
++     * WDTIMER2 Mod   48022000 - 48012fff (REV 0x00000011)
++     * WDTIMER L4     48023000 - 48013fff (0x00200010, 0x00000200, 0x00000000)
++     * WDTIMER3 Mod   48024000 - 48014fff (REV 0x00000011)
++     * WDTIMER3 L4    48025000 - 48015fff (0x00200010, 0x00000200, 0x00000000)
++     * WDTIMER4 Mod   48026000 - 48016fff (REV 0x00000011)
++     * WDTIMER4 L4    48027000 - 48017fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER1 Mod   48028000 - 48018fff (REV 0x00000013)
++     * GPTIMER1 L4    48029000 - 48019fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER2 Mod   4802a000 - 4801afff (REV Abort)
++     * GPTIMER2 L4    4802b000 - 4801bfff (0x00200010, 0x00000200, 0x00000000)
+      * L4-Config AP   48040000 - 480407ff
+      * L4-Config IP   48040800 - 48040fff
+      * L4-Config LA   48041000 - 48041fff
+-     * ARM11ETB Mod   48048000 - 48049fff
+-     * ARM11ETB L4    4804a000 - 4804afff
+-     * DISPLAY Top    48050000 - 480503ff
+-     * DISPLAY DISPC  48050400 - 480507ff
+-     * DISPLAY RFBI   48050800 - 48050bff
+-     * DISPLAY VENC   48050c00 - 48050fff
+-     * DISPLAY L4     48051000 - 48051fff
+-     * CAMERA Top     48052000 - 480523ff
+-     * CAMERA core    48052400 - 480527ff
+-     * CAMERA DMA     48052800 - 48052bff
+-     * CAMERA MMU     48052c00 - 48052fff
+-     * CAMERA L4      48053000 - 48053fff
+-     * SDMA Mod               48056000 - 48056fff
+-     * SDMA L4                48057000 - 48057fff
+-     * SSI Top                48058000 - 48058fff
+-     * SSI GDD                48059000 - 48059fff
+-     * SSI Port1      4805a000 - 4805afff
+-     * SSI Port2      4805b000 - 4805bfff
+-     * SSI L4         4805c000 - 4805cfff
+-     * USB Mod                4805e000 - 480fefff
+-     * USB L4         4805f000 - 480fffff
+-     * WIN_TRACER1 Mod        48060000 - 48060fff
+-     * WIN_TRACER1 L4 48061000 - 48061fff
+-     * WIN_TRACER2 Mod        48062000 - 48062fff
+-     * WIN_TRACER2 L4 48063000 - 48063fff
+-     * WIN_TRACER3 Mod        48064000 - 48064fff
+-     * WIN_TRACER3 L4 48065000 - 48065fff
+-     * WIN_TRACER4 Top        48066000 - 480660ff
+-     * WIN_TRACER4 ETT        48066100 - 480661ff
+-     * WIN_TRACER4 WT 48066200 - 480662ff
+-     * WIN_TRACER4 L4 48067000 - 48067fff
+-     * XTI Mod                48068000 - 48068fff
+-     * XTI L4         48069000 - 48069fff
+-     * UART1 Mod      4806a000 - 4806afff
+-     * UART1 L4               4806b000 - 4806bfff
+-     * UART2 Mod      4806c000 - 4806cfff
+-     * UART2 L4               4806d000 - 4806dfff
+-     * UART3 Mod      4806e000 - 4806efff
+-     * UART3 L4               4806f000 - 4806ffff
+-     * I2C1 Mod               48070000 - 48070fff
+-     * I2C1 L4                48071000 - 48071fff
+-     * I2C2 Mod               48072000 - 48072fff
+-     * I2C2 L4                48073000 - 48073fff
+-     * McBSP1 Mod     48074000 - 48074fff
+-     * McBSP1 L4      48075000 - 48075fff
+-     * McBSP2 Mod     48076000 - 48076fff
+-     * McBSP2 L4      48077000 - 48077fff
+-     * GPTIMER3 Mod   48078000 - 48078fff
+-     * GPTIMER3 L4    48079000 - 48079fff
+-     * GPTIMER4 Mod   4807a000 - 4807afff
+-     * GPTIMER4 L4    4807b000 - 4807bfff
+-     * GPTIMER5 Mod   4807c000 - 4807cfff
+-     * GPTIMER5 L4    4807d000 - 4807dfff
+-     * GPTIMER6 Mod   4807e000 - 4807efff
+-     * GPTIMER6 L4    4807f000 - 4807ffff
+-     * GPTIMER7 Mod   48080000 - 48080fff
+-     * GPTIMER7 L4    48081000 - 48081fff
+-     * GPTIMER8 Mod   48082000 - 48082fff
+-     * GPTIMER8 L4    48083000 - 48083fff
+-     * GPTIMER9 Mod   48084000 - 48084fff
+-     * GPTIMER9 L4    48085000 - 48085fff
+-     * GPTIMER10 Mod  48086000 - 48086fff
+-     * GPTIMER10 L4   48087000 - 48087fff
+-     * GPTIMER11 Mod  48088000 - 48088fff
+-     * GPTIMER11 L4   48089000 - 48089fff
+-     * GPTIMER12 Mod  4808a000 - 4808afff
+-     * GPTIMER12 L4   4808b000 - 4808bfff
+-     * EAC Mod                48090000 - 48090fff
+-     * EAC L4         48091000 - 48091fff
+-     * FAC Mod                48092000 - 48092fff
+-     * FAC L4         48093000 - 48093fff
+-     * MAILBOX Mod    48094000 - 48094fff
+-     * MAILBOX L4     48095000 - 48095fff
+-     * SPI1 Mod               48098000 - 48098fff
+-     * SPI1 L4                48099000 - 48099fff
+-     * SPI2 Mod               4809a000 - 4809afff
+-     * SPI2 L4                4809b000 - 4809bfff
+-     * MMC/SDIO Mod   4809c000 - 4809cfff
+-     * MMC/SDIO L4    4809d000 - 4809dfff
+-     * MS_PRO Mod     4809e000 - 4809efff
+-     * MS_PRO L4      4809f000 - 4809ffff
+-     * RNG Mod                480a0000 - 480a0fff
+-     * RNG L4         480a1000 - 480a1fff
+-     * DES3DES Mod    480a2000 - 480a2fff
+-     * DES3DES L4     480a3000 - 480a3fff
+-     * SHA1MD5 Mod    480a4000 - 480a4fff
+-     * SHA1MD5 L4     480a5000 - 480a5fff
+-     * AES Mod                480a6000 - 480a6fff
+-     * AES L4         480a7000 - 480a7fff
+-     * PKA Mod                480a8000 - 480a9fff
+-     * PKA L4         480aa000 - 480aafff
+-     * MG Mod         480b0000 - 480b0fff
+-     * MG L4          480b1000 - 480b1fff
+-     * HDQ/1-wire Mod 480b2000 - 480b2fff
+-     * HDQ/1-wire L4  480b3000 - 480b3fff
+-     * MPU interrupt  480fe000 - 480fefff
+-     * IVA RAM                5c000000 - 5c01ffff
+-     * IVA ROM                5c020000 - 5c027fff
+-     * IMG_BUF_A      5c040000 - 5c040fff
+-     * IMG_BUF_B      5c042000 - 5c042fff
+-     * VLCDS          5c048000 - 5c0487ff
+-     * IMX_COEF               5c049000 - 5c04afff
+-     * IMX_CMD                5c051000 - 5c051fff
+-     * VLCDQ          5c053000 - 5c0533ff
+-     * VLCDH          5c054000 - 5c054fff
+-     * SEQ_CMD                5c055000 - 5c055fff
+-     * IMX_REG                5c056000 - 5c0560ff
+-     * VLCD_REG               5c056100 - 5c0561ff
+-     * SEQ_REG                5c056200 - 5c0562ff
+-     * IMG_BUF_REG    5c056300 - 5c0563ff
+-     * SEQIRQ_REG     5c056400 - 5c0564ff
+-     * OCP_REG                5c060000 - 5c060fff
+-     * SYSC_REG               5c070000 - 5c070fff
+-     * MMU_REG                5d000000 - 5d000fff
++     * ARM11ETB Mod   48048000 - 48049fff (REV 0x00000011)
++     * ARM11ETB L4    4804a000 - 4804afff (0x00200010, 0x00000200, 0x00000000)
++     * DISPLAY Top    48050000 - 480503ff (REV 0x00000003)
++     * DISPLAY DISPC  48050400 - 480507ff (REV 0x00000020)
++     * DISPLAY RFBI   48050800 - 48050bff (REV 0x00000010)
++     * DISPLAY VENC   48050c00 - 48050fff (REV Abort)
++     * DISPLAY L4     48051000 - 48051fff (0x00200010, 0x00000200, 0x00000100)
++     * CAMERA Top     48052000 - 480523ff (REV 0x00000020)
++     * CAMERA core    48052400 - 480527ff (REV 0x00000020)
++     * CAMERA DMA     48052800 - 48052bff (REV 0x00000020)
++     * CAMERA MMU     48052c00 - 48052fff (REV 0x00000010)
++     * CAMERA L4      48053000 - 48053fff (0x00200010, 0x00000200, 0x00000000)
++     * SDMA Mod               48056000 - 48056fff (REV 0x00000020)
++     * SDMA L4                48057000 - 48057fff (0x00200010, 0x00000200, 0x00000000)
++     * SSI Top                48058000 - 48058fff (REV Abort)
++     * SSI GDD                48059000 - 48059fff (REV Abort)
++     * SSI Port1      4805a000 - 4805afff (REV Abort)
++     * SSI Port2      4805b000 - 4805bfff (REV Abort)
++     * SSI L4         4805c000 - 4805cfff (0x00200010, 0x00000200, 0x00000100)
++     * USB Mod                4805e000 - 480fefff (REV Abort)
++     * USB L4         4805f000 - 480fffff (0x00200010, 0x01000200, 0x00000100)
++     * WIN_TRACER1 Mod        48060000 - 48060fff (REV 0x00000020)
++     * WIN_TRACER1 L4 48061000 - 48061fff (0x00200010, 0x00000200, 0x00000000)
++     * WIN_TRACER2 Mod        48062000 - 48062fff (REV 0x00000020)
++     * WIN_TRACER2 L4 48063000 - 48063fff (0x00200010, 0x00000200, 0x00000000)
++     * WIN_TRACER3 Mod        48064000 - 48064fff (REV 0x00000020)
++     * WIN_TRACER3 L4 48065000 - 48065fff (0x00200010, 0x00000200, 0x00000000)
++     * WIN_TRACER4 Top        48066000 - 480660ff (REV 0x00000011)
++     * WIN_TRACER4 ETT        48066100 - 480661ff (REV 0x00000011)
++     * WIN_TRACER4 WT 48066200 - 480662ff (REV 0x00000020)
++     * WIN_TRACER4 L4 48067000 - 48067fff (0x00200010, 0x00000200, 0x00000000)
++     * XTI Mod                48068000 - 48068fff (REV 0x00000010)
++     * XTI L4         48069000 - 48069fff (0x00200010, 0x00000200, 0x00000000)
++     * UART1 Mod      4806a000 - 4806afff (MVR Abort)
++     * UART1 L4               4806b000 - 4806bfff (0x00200010, 0x00000200, 0x00000000)
++     * UART2 Mod      4806c000 - 4806cfff (MVR Abort)
++     * UART2 L4               4806d000 - 4806dfff (0x00200010, 0x00000200, 0x00000000)
++     * UART3 Mod      4806e000 - 4806efff (MVR 0x20)
++     * UART3 L4               4806f000 - 4806ffff (0x00200010, 0x00000200, 0x00000000)
++     * I2C1 Mod               48070000 - 48070fff (REV 0x0034)
++     * I2C1 L4                48071000 - 48071fff (0x00200010, 0x01000200, 0x01000000)
++     * I2C2 Mod               48072000 - 48072fff (REV 0x0034)
++     * I2C2 L4                48073000 - 48073fff (0x00200010, 0x01000200, 0x01000000)
++     * McBSP1 Mod     48074000 - 48074fff (REV Abort)
++     * McBSP1 L4      48075000 - 48075fff (0x00200010, 0x01000200, 0x01000000)
++     * McBSP2 Mod     48076000 - 48076fff (REV Abort)
++     * McBSP2 L4      48077000 - 48077fff (0x00200010, 0x01000200, 0x01000000)
++     * GPTIMER3 Mod   48078000 - 48078fff (REV Abort)
++     * GPTIMER3 L4    48079000 - 48079fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER4 Mod   4807a000 - 4807afff (REV Abort)
++     * GPTIMER4 L4    4807b000 - 4807bfff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER5 Mod   4807c000 - 4807cfff (REV Abort)
++     * GPTIMER5 L4    4807d000 - 4807dfff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER6 Mod   4807e000 - 4807efff (REV Abort)
++     * GPTIMER6 L4    4807f000 - 4807ffff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER7 Mod   48080000 - 48080fff (REV Abort)
++     * GPTIMER7 L4    48081000 - 48081fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER8 Mod   48082000 - 48082fff (REV Abort)
++     * GPTIMER8 L4    48083000 - 48083fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER9 Mod   48084000 - 48084fff (REV Abort)
++     * GPTIMER9 L4    48085000 - 48085fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER10 Mod  48086000 - 48086fff (REV Abort)
++     * GPTIMER10 L4   48087000 - 48087fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER11 Mod  48088000 - 48088fff (REV Abort)
++     * GPTIMER11 L4   48089000 - 48089fff (0x00200010, 0x00000200, 0x00000000)
++     * GPTIMER12 Mod  4808a000 - 4808afff (REV Abort)
++     * GPTIMER12 L4   4808b000 - 4808bfff (0x00200010, 0x00000200, 0x00000000)
++     * EAC Mod                48090000 - 48090fff (REV Abort)
++     * EAC L4         48091000 - 48091fff (0x00200010, 0x00000200, 0x00000000)
++     * FAC Mod                48092000 - 48092fff (REV Abort)
++     * FAC L4         48093000 - 48093fff (0x00200010, 0x00000200, 0x00000000)
++     * MAILBOX Mod    48094000 - 48094fff (REV 0x00000010)
++     * MAILBOX L4     48095000 - 48095fff (0x00200010, 0x00000200, 0x00000000)
++     * SPI1 Mod               48098000 - 48098fff (REV Abort)
++     * SPI1 L4                48099000 - 48099fff (0x00200010, 0x00000200, 0x00000000)
++     * SPI2 Mod               4809a000 - 4809afff (REV Abort)
++     * SPI2 L4                4809b000 - 4809bfff (0x00200010, 0x00000200, 0x00000000)
++     * MMC/SDIO Mod   4809c000 - 4809cfff (REV 0x0044)
++     * MMC/SDIO L4    4809d000 - 4809dfff (0x00200010, 0x01000200, 0x01000000)
++     * MS_PRO Mod     4809e000 - 4809efff (REV Abort)
++     * MS_PRO L4      4809f000 - 4809ffff (0x00200010, 0x01000200, 0x01000000)
++     * RNG Mod                480a0000 - 480a0fff (REV 0xFC066F93?)
++     * RNG L4         480a1000 - 480a1fff (0x00200010, 0x01000200, 0x00000000)
++     * DES3DES Mod    480a2000 - 480a2fff (REV 0x00000000?)
++     * DES3DES L4     480a3000 - 480a3fff (0x00200010, 0x01000200, 0x00000000)
++     * SHA1MD5 Mod    480a4000 - 480a4fff (REV 0x00000000?)
++     * SHA1MD5 L4     480a5000 - 480a5fff (0x00200010, 0x01000200, 0x00000000)
++     * AES Mod                480a6000 - 480a6fff (REV 0x00000000?)
++     * AES L4         480a7000 - 480a7fff (0x00200010, 0x00000200, 0x00000000)
++     * PKA Mod                480a8000 - 480a9fff (REV 0x00000000?)
++     * PKA L4         480aa000 - 480aafff (0x00200010, 0x00000200, 0x00000000)
++     * MG Mod         480b0000 - 480b0fff (REV Abort)
++     * MG L4          480b1000 - 480b1fff (0x00200010, 0x01000200, 0x01000000)
++     * HDQ/1-wire Mod 480b2000 - 480b2fff (REV 0x00000002)
++     * HDQ/1-wire L4  480b3000 - 480b3fff (0x00200010, 0x00000200, 0x00000000)
++     * MPU interrupt  480fe000 - 480fefff (REV 0x00000020)
++     * IVA RAM                5c000000 - 5c01ffff (REV Abort)
++     * IVA ROM                5c020000 - 5c027fff (REV Abort)
++     * IMG_BUF_A      5c040000 - 5c040fff (REV Abort)
++     * IMG_BUF_B      5c042000 - 5c042fff (REV Abort)
++     * VLCDS          5c048000 - 5c0487ff (REV Abort)
++     * IMX_COEF               5c049000 - 5c04afff (REV Abort)
++     * IMX_CMD                5c051000 - 5c051fff (REV Abort)
++     * VLCDQ          5c053000 - 5c0533ff (REV Abort)
++     * VLCDH          5c054000 - 5c054fff (REV Abort)
++     * SEQ_CMD                5c055000 - 5c055fff (REV Abort)
++     * IMX_REG                5c056000 - 5c0560ff (REV Abort)
++     * VLCD_REG               5c056100 - 5c0561ff (REV Abort)
++     * SEQ_REG                5c056200 - 5c0562ff (REV Abort)
++     * IMG_BUF_REG    5c056300 - 5c0563ff (REV Abort)
++     * SEQIRQ_REG     5c056400 - 5c0564ff (REV Abort)
++     * OCP_REG                5c060000 - 5c060fff (REV Abort)
++     * SYSC_REG               5c070000 - 5c070fff (REV Abort)
++     * MMU_REG                5d000000 - 5d000fff (REV Abort)
+      * sDMA R         68000400 - 680005ff
+      * sDMA W         68000600 - 680007ff
+      * Display Control        68000800 - 680009ff
+@@ -3849,9 +3849,9 @@
+      * GPMC (firewall)        68006000 - 680063ff
+      * GPMC (err login)       68006400 - 680067ff
+      * SMS (err login)        68006c00 - 68006fff
+-     * SMS registers  68008000 - 68008fff
+-     * SDRC registers 68009000 - 68009fff
+-     * GPMC registers 6800a000   6800afff
++     * SMS registers  68008000 - 68008fff (REV 0x00000020)
++     * SDRC registers 68009000 - 68009fff (REV 0x00000020)
++     * GPMC registers 6800a000   6800afff (REV 0x00000020)
+      */
+     qemu_register_reset(omap2_mpu_reset, s);
+diff -urN 4242/hw/pc.c qemu-omap/hw/pc.c
+--- 4242/hw/pc.c       2008-04-24 21:26:22.000000000 +0100
++++ qemu-omap/hw/pc.c  2008-04-23 09:57:56.000000000 +0100
+@@ -445,6 +445,37 @@
+     bdrv_set_boot_sector(drives_table[hda].bdrv, bootsect, sizeof(bootsect));
+ }
++static int load_kernel(const char *filename, uint8_t *addr,
++                       uint8_t *real_addr)
++{
++    int fd, size;
++    int setup_sects;
++
++    fd = open(filename, O_RDONLY | O_BINARY);
++    if (fd < 0)
++        return -1;
++
++    /* load 16 bit code */
++    if (read(fd, real_addr, 512) != 512)
++        goto fail;
++    setup_sects = real_addr[0x1F1];
++    if (!setup_sects)
++        setup_sects = 4;
++    if (read(fd, real_addr + 512, setup_sects * 512) !=
++        setup_sects * 512)
++        goto fail;
++
++    /* load 32 bit code */
++    size = read(fd, addr, 16 * 1024 * 1024);
++    if (size < 0)
++        goto fail;
++    close(fd);
++    return size;
++ fail:
++    close(fd);
++    return -1;
++}
++
+ static long get_file_size(FILE *f)
+ {
+     long where, size;
+diff -urN 4242/hw/tusb6010.c qemu-omap/hw/tusb6010.c
+--- 4242/hw/tusb6010.c 2008-04-23 12:18:54.000000000 +0100
++++ qemu-omap/hw/tusb6010.c    2008-04-23 09:57:56.000000000 +0100
+@@ -287,9 +287,6 @@
+     /* TODO: How is this signalled?  */
+ }
+-extern CPUReadMemoryFunc *musb_read[];
+-extern CPUWriteMemoryFunc *musb_write[];
+-
+ static uint32_t tusb_async_readb(void *opaque, target_phys_addr_t addr)
+ {
+     struct tusb_s *s = (struct tusb_s *) opaque;
+diff -urN 4242/hw/usb.h qemu-omap/hw/usb.h
+--- 4242/hw/usb.h      2008-04-23 12:18:54.000000000 +0100
++++ qemu-omap/hw/usb.h 2008-04-23 09:57:56.000000000 +0100
+@@ -219,6 +219,9 @@
+ /* usb-msd.c */
+ USBDevice *usb_msd_init(const char *filename);
++/* usb-net.c */
++USBDevice *usb_net_init(NICInfo *nd);
++
+ /* usb-wacom.c */
+ USBDevice *usb_wacom_init(void);
+@@ -254,3 +257,7 @@
+ uint32_t musb_core_intr_get(struct musb_s *s);
+ void musb_core_intr_clear(struct musb_s *s, uint32_t mask);
+ void musb_set_size(struct musb_s *s, int epnum, int size, int is_tx);
++#ifdef NEED_CPU_H
++extern CPUReadMemoryFunc *musb_read[];
++extern CPUWriteMemoryFunc *musb_write[];
++#endif
+diff -urN 4242/hw/usb-hub.c qemu-omap/hw/usb-hub.c
+--- 4242/hw/usb-hub.c  2008-04-23 11:43:37.000000000 +0100
++++ qemu-omap/hw/usb-hub.c     2008-04-23 09:57:56.000000000 +0100
+@@ -146,8 +146,8 @@
+       0x07,       /*  u8  ep_bLength; */
+       0x05,       /*  u8  ep_bDescriptorType; Endpoint */
+       0x81,       /*  u8  ep_bEndpointAddress; IN Endpoint 1 */
+-      0x03,       /*  u8  ep_bmAttributes; Interrupt */
+-      0x02, 0x00, /*  u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
++      0x03,       /*  u8  ep_bmAttributes; Interrupt */
++      0x02, 0x00, /*  u16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
+       0xff        /*  u8  ep_bInterval; (255ms -- usb 2.0 spec) */
+ };
+diff -urN 4242/hw/usb-net.c qemu-omap/hw/usb-net.c
+--- 4242/hw/usb-net.c  1970-01-01 01:00:00.000000000 +0100
++++ qemu-omap/hw/usb-net.c     2008-04-23 09:57:56.000000000 +0100
+@@ -0,0 +1,1334 @@
++/*
++ * QEMU USB Net devices
++ * 
++ * Copyright (c) 2006 Thomas Sailer
++ * based on usb-hid.c Copyright (c) 2005 Fabrice Bellard
++ * 
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
++#include "qemu-common.h"
++#include "usb.h"
++#include "net.h"
++#include "../audio/sys-queue.h"
++
++typedef uint32_t __le32;
++#include "ndis.h"
++
++/*#define TRAFFIC_DEBUG*/
++/* Thanks to NetChip Technologies for donating this product ID.
++ * It's for devices with only CDC Ethernet configurations.
++ */
++#define CDC_VENDOR_NUM          0x0525  /* NetChip */
++#define CDC_PRODUCT_NUM         0xa4a1  /* Linux-USB Ethernet Gadget */
++/* For hardware that can talk RNDIS and either of the above protocols,
++ * use this ID ... the windows INF files will know it.
++ */
++#define RNDIS_VENDOR_NUM        0x0525  /* NetChip */
++#define RNDIS_PRODUCT_NUM       0xa4a2  /* Ethernet/RNDIS Gadget */
++
++#define STRING_MANUFACTURER             1
++#define STRING_PRODUCT                  2
++#define STRING_ETHADDR                  3
++#define STRING_DATA                     4
++#define STRING_CONTROL                  5
++#define STRING_RNDIS_CONTROL            6
++#define STRING_CDC                      7
++#define STRING_SUBSET                   8
++#define STRING_RNDIS                    9
++#define STRING_SERIALNUMBER             10
++
++#define DEV_CONFIG_VALUE        1       /* cdc or subset */
++#define DEV_RNDIS_CONFIG_VALUE  2       /* rndis; optional */
++
++#define USB_CDC_SUBCLASS_ACM                    0x02
++#define USB_CDC_SUBCLASS_ETHERNET               0x06
++
++#define USB_CDC_PROTO_NONE                      0
++#define USB_CDC_ACM_PROTO_VENDOR                0xff
++
++#define USB_CDC_HEADER_TYPE             0x00            /* header_desc */
++#define USB_CDC_CALL_MANAGEMENT_TYPE    0x01            /* call_mgmt_descriptor */
++#define USB_CDC_ACM_TYPE                0x02            /* acm_descriptor */
++#define USB_CDC_UNION_TYPE              0x06            /* union_desc */
++#define USB_CDC_ETHERNET_TYPE           0x0f            /* ether_desc */
++
++#define USB_DT_CS_INTERFACE             0x24
++#define USB_DT_CS_ENDPOINT              0x25
++
++#define ClassInterfaceRequest \
++        ((USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8)
++#define ClassInterfaceOutRequest \
++        ((USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE)<<8)
++
++#define USB_CDC_SEND_ENCAPSULATED_COMMAND       0x00
++#define USB_CDC_GET_ENCAPSULATED_RESPONSE       0x01
++#define USB_CDC_REQ_SET_LINE_CODING             0x20
++#define USB_CDC_REQ_GET_LINE_CODING             0x21
++#define USB_CDC_REQ_SET_CONTROL_LINE_STATE      0x22
++#define USB_CDC_REQ_SEND_BREAK                  0x23
++#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS  0x40
++#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER  0x41
++#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER  0x42
++#define USB_CDC_SET_ETHERNET_PACKET_FILTER      0x43
++#define USB_CDC_GET_ETHERNET_STATISTIC          0x44
++
++#define USB_ENDPOINT_XFER_BULK          2
++#define USB_ENDPOINT_XFER_INT           3
++
++#define LOG2_STATUS_INTERVAL_MSEC       5       /* 1 << 5 == 32 msec */
++#define STATUS_BYTECOUNT                16      /* 8 byte header + data */
++
++#define ETH_FRAME_LEN                   1514    /* Max. octets in frame sans FCS */
++
++/*
++ * mostly the same descriptor as the linux gadget rndis driver
++ */
++static const uint8_t qemu_net_dev_descriptor[] = {
++      0x12,                /*  u8 bLength; */
++      USB_DT_DEVICE,       /*  u8 bDescriptorType; Device */
++      0x00, 0x02,          /*  u16 bcdUSB; v2.0 */
++      USB_CLASS_COMM,      /*  u8  bDeviceClass; */
++      0x00,                /*  u8  bDeviceSubClass; */
++      0x00,                /*  u8  bDeviceProtocol; [ low/full speeds only ] */
++      0x40,                /*  u8  bMaxPacketSize0 */
++      RNDIS_VENDOR_NUM & 0xff, RNDIS_VENDOR_NUM >> 8,   /*  u16 idVendor; */
++      RNDIS_PRODUCT_NUM & 0xff, RNDIS_PRODUCT_NUM >> 8, /*  u16 idProduct; */
++      0x00, 0x00,          /*  u16 bcdDevice */
++      STRING_MANUFACTURER, /*  u8  iManufacturer; */
++      STRING_PRODUCT,      /*  u8  iProduct; */
++      STRING_SERIALNUMBER, /*  u8  iSerialNumber; */
++      0x02                 /*  u8  bNumConfigurations; */
++};
++
++static const uint8_t qemu_net_rndis_config_descriptor[] = {
++      /* Configuration Descriptor */
++      0x09,                /*  u8  bLength */
++      USB_DT_CONFIG,       /*  u8  bDescriptorType */
++        0x43, 0x00,          /*  le16 wTotalLength */
++        0x02,                /*  u8  bNumInterfaces */
++        DEV_RNDIS_CONFIG_VALUE, /*  u8  bConfigurationValue */
++        STRING_RNDIS,        /*  u8  iConfiguration */
++        0xc0,                /*  u8  bmAttributes */
++        0x32,                /*  u8  bMaxPower */
++      /* RNDIS Control Interface */
++        0x09,                /*  u8  bLength */
++        USB_DT_INTERFACE,    /*  u8  bDescriptorType */
++        0x00,                /*  u8  bInterfaceNumber */
++        0x00,                /*  u8  bAlternateSetting */
++        0x01,                /*  u8  bNumEndpoints */
++        USB_CLASS_COMM,           /*  u8  bInterfaceClass */
++        USB_CDC_SUBCLASS_ACM,     /*  u8  bInterfaceSubClass */
++        USB_CDC_ACM_PROTO_VENDOR, /*  u8  bInterfaceProtocol */
++        STRING_RNDIS_CONTROL,     /*  u8  iInterface */
++      /* Header Descriptor */
++        0x05,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_HEADER_TYPE, /*  u8    bDescriptorSubType */
++        0x10, 0x01,          /*  le16  bcdCDC */
++      /* Call Management Descriptor */
++        0x05,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_CALL_MANAGEMENT_TYPE, /*  u8    bDescriptorSubType */
++        0x00,                /*  u8    bmCapabilities */
++        0x01,                /*  u8    bDataInterface */
++      /* ACM Descriptor */
++        0x04,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_ACM_TYPE,    /*  u8    bDescriptorSubType */
++        0x00,                /*  u8    bmCapabilities */
++      /* Union Descriptor */
++        0x05,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_UNION_TYPE,  /*  u8    bDescriptorSubType */
++        0x00,                /*  u8    bMasterInterface0 */
++        0x01,                /*  u8    bSlaveInterface0 */
++      /* Status Descriptor */
++        0x07,                /*  u8  bLength */
++        USB_DT_ENDPOINT,     /*  u8  bDescriptorType */
++        USB_DIR_IN | 1,      /*  u8  bEndpointAddress */
++        USB_ENDPOINT_XFER_INT, /*  u8  bmAttributes */
++        STATUS_BYTECOUNT & 0xff, STATUS_BYTECOUNT >> 8, /*  le16 wMaxPacketSize */
++        1 << LOG2_STATUS_INTERVAL_MSEC, /*  u8  bInterval */
++      /* RNDIS Data Interface */
++        0x09,                /*  u8  bLength */
++        USB_DT_INTERFACE,    /*  u8  bDescriptorType */
++        0x01,                /*  u8  bInterfaceNumber */
++        0x00,                /*  u8  bAlternateSetting */
++        0x02,                /*  u8  bNumEndpoints */
++        USB_CLASS_CDC_DATA,  /*  u8  bInterfaceClass */
++        0x00,                /*  u8  bInterfaceSubClass */
++        0x00,                /*  u8  bInterfaceProtocol */
++        STRING_DATA,         /*  u8  iInterface */
++      /* Source Endpoint */
++        0x07,                /*  u8  bLength */
++        USB_DT_ENDPOINT,     /*  u8  bDescriptorType */
++        USB_DIR_IN | 2,      /*  u8  bEndpointAddress */
++        USB_ENDPOINT_XFER_BULK, /*  u8  bmAttributes */
++        0x40, 0x00,          /*  le16 wMaxPacketSize */
++        0x00,                /*  u8  bInterval */
++      /* Sink Endpoint */
++        0x07,                /*  u8  bLength */
++        USB_DT_ENDPOINT,     /*  u8  bDescriptorType */
++        USB_DIR_OUT | 2,     /*  u8  bEndpointAddress */
++        USB_ENDPOINT_XFER_BULK, /*  u8  bmAttributes */
++        0x40, 0x00,          /*  le16 wMaxPacketSize */
++        0x00                 /*  u8  bInterval */
++};
++
++static const uint8_t qemu_net_cdc_config_descriptor[] = {
++      /* Configuration Descriptor */
++      0x09,                /*  u8  bLength */
++      USB_DT_CONFIG,       /*  u8  bDescriptorType */
++        0x50, 0x00,          /*  le16 wTotalLength */
++        0x02,                /*  u8  bNumInterfaces */
++        DEV_CONFIG_VALUE,    /*  u8  bConfigurationValue */
++        STRING_CDC,          /*  u8  iConfiguration */
++        0xc0,                /*  u8  bmAttributes */
++        0x32,                /*  u8  bMaxPower */
++      /* CDC Control Interface */
++        0x09,                /*  u8  bLength */
++        USB_DT_INTERFACE,    /*  u8  bDescriptorType */
++        0x00,                /*  u8  bInterfaceNumber */
++        0x00,                /*  u8  bAlternateSetting */
++        0x01,                /*  u8  bNumEndpoints */
++        USB_CLASS_COMM,            /*  u8  bInterfaceClass */
++        USB_CDC_SUBCLASS_ETHERNET, /*  u8  bInterfaceSubClass */
++        USB_CDC_PROTO_NONE,        /*  u8  bInterfaceProtocol */
++        STRING_CONTROL,            /*  u8  iInterface */
++      /* Header Descriptor */
++        0x05,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_HEADER_TYPE, /*  u8    bDescriptorSubType */
++        0x10, 0x01,          /*  le16  bcdCDC */
++      /* Union Descriptor */
++        0x05,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_UNION_TYPE,  /*  u8    bDescriptorSubType */
++        0x00,                /*  u8    bMasterInterface0 */
++        0x01,                /*  u8    bSlaveInterface0 */
++      /* Ethernet Descriptor */
++        0x0d,                /*  u8    bLength */
++        USB_DT_CS_INTERFACE, /*  u8    bDescriptorType */
++        USB_CDC_ETHERNET_TYPE,  /*  u8    bDescriptorSubType */
++        STRING_ETHADDR,         /*  u8    iMACAddress */
++        0x00, 0x00, 0x00, 0x00, /*  le32  bmEthernetStatistics */
++        ETH_FRAME_LEN & 0xff, ETH_FRAME_LEN >> 8, /*  le16  wMaxSegmentSize */
++        0x00, 0x00,          /*  le16  wNumberMCFilters */
++        0x00,                /*  u8    bNumberPowerFilters */
++      /* Status Descriptor */
++        0x07,                /*  u8  bLength */
++        USB_DT_ENDPOINT,     /*  u8  bDescriptorType */
++        USB_DIR_IN | 1,      /*  u8  bEndpointAddress */
++        USB_ENDPOINT_XFER_INT, /*  u8  bmAttributes */
++        STATUS_BYTECOUNT & 0xff, STATUS_BYTECOUNT >> 8, /*  le16 wMaxPacketSize */
++        1 << LOG2_STATUS_INTERVAL_MSEC, /*  u8  bInterval */
++      /* CDC Data (nop) Interface */
++        0x09,                /*  u8  bLength */
++        USB_DT_INTERFACE,    /*  u8  bDescriptorType */
++        0x01,                /*  u8  bInterfaceNumber */
++        0x00,                /*  u8  bAlternateSetting */
++        0x00,                /*  u8  bNumEndpoints */
++        USB_CLASS_CDC_DATA,  /*  u8  bInterfaceClass */
++        0x00,                /*  u8  bInterfaceSubClass */
++        0x00,                /*  u8  bInterfaceProtocol */
++        0x00,                /*  u8  iInterface */
++      /* CDC Data Interface */
++        0x09,                /*  u8  bLength */
++        USB_DT_INTERFACE,    /*  u8  bDescriptorType */
++        0x01,                /*  u8  bInterfaceNumber */
++        0x01,                /*  u8  bAlternateSetting */
++        0x02,                /*  u8  bNumEndpoints */
++        USB_CLASS_CDC_DATA,  /*  u8  bInterfaceClass */
++        0x00,                /*  u8  bInterfaceSubClass */
++        0x00,                /*  u8  bInterfaceProtocol */
++        STRING_DATA,         /*  u8  iInterface */
++      /* Source Endpoint */
++        0x07,                /*  u8  bLength */
++        USB_DT_ENDPOINT,     /*  u8  bDescriptorType */
++        USB_DIR_IN | 2,      /*  u8  bEndpointAddress */
++        USB_ENDPOINT_XFER_BULK, /*  u8  bmAttributes */
++        0x40, 0x00,          /*  le16 wMaxPacketSize */
++        0x00,                /*  u8  bInterval */
++      /* Sink Endpoint */
++        0x07,                /*  u8  bLength */
++        USB_DT_ENDPOINT,     /*  u8  bDescriptorType */
++        USB_DIR_OUT | 2,     /*  u8  bEndpointAddress */
++        USB_ENDPOINT_XFER_BULK, /*  u8  bmAttributes */
++        0x40, 0x00,          /*  le16 wMaxPacketSize */
++        0x00                 /*  u8  bInterval */
++};
++
++/*
++ * RNDIS Status
++ */
++
++#define RNDIS_MAXIMUM_FRAME_SIZE        1518
++#define RNDIS_MAX_TOTAL_SIZE            1558
++
++/* Remote NDIS Versions */
++#define RNDIS_MAJOR_VERSION             1
++#define RNDIS_MINOR_VERSION             0
++
++/* Status Values */
++#define RNDIS_STATUS_SUCCESS            0x00000000U     /* Success           */
++#define RNDIS_STATUS_FAILURE            0xC0000001U     /* Unspecified error */
++#define RNDIS_STATUS_INVALID_DATA       0xC0010015U     /* Invalid data      */
++#define RNDIS_STATUS_NOT_SUPPORTED      0xC00000BBU     /* Unsupported request */
++#define RNDIS_STATUS_MEDIA_CONNECT      0x4001000BU     /* Device connected  */
++#define RNDIS_STATUS_MEDIA_DISCONNECT   0x4001000CU     /* Device disconnected */
++
++/* Message Set for Connectionless (802.3) Devices */
++#define REMOTE_NDIS_PACKET_MSG          0x00000001U
++#define REMOTE_NDIS_INITIALIZE_MSG      0x00000002U     /* Initialize device */
++#define REMOTE_NDIS_HALT_MSG            0x00000003U
++#define REMOTE_NDIS_QUERY_MSG           0x00000004U
++#define REMOTE_NDIS_SET_MSG             0x00000005U
++#define REMOTE_NDIS_RESET_MSG           0x00000006U
++#define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007U
++#define REMOTE_NDIS_KEEPALIVE_MSG       0x00000008U
++
++/* Message completion */
++#define REMOTE_NDIS_INITIALIZE_CMPLT    0x80000002U
++#define REMOTE_NDIS_QUERY_CMPLT         0x80000004U
++#define REMOTE_NDIS_SET_CMPLT           0x80000005U
++#define REMOTE_NDIS_RESET_CMPLT         0x80000006U
++#define REMOTE_NDIS_KEEPALIVE_CMPLT     0x80000008U
++
++/* Device Flags */
++#define RNDIS_DF_CONNECTIONLESS         0x00000001U
++#define RNDIS_DF_CONNECTION_ORIENTED    0x00000002U
++
++#define RNDIS_MEDIUM_802_3              0x00000000U
++
++/* from drivers/net/sk98lin/h/skgepnmi.h */
++#define OID_PNP_CAPABILITIES                    0xFD010100
++#define OID_PNP_SET_POWER                       0xFD010101
++#define OID_PNP_QUERY_POWER                     0xFD010102
++#define OID_PNP_ADD_WAKE_UP_PATTERN             0xFD010103
++#define OID_PNP_REMOVE_WAKE_UP_PATTERN          0xFD010104
++#define OID_PNP_ENABLE_WAKE_UP                  0xFD010106
++
++typedef struct rndis_init_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  MajorVersion;
++        __le32  MinorVersion;
++        __le32  MaxTransferSize;
++} rndis_init_msg_type;
++
++typedef struct rndis_init_cmplt_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  Status;
++        __le32  MajorVersion;
++        __le32  MinorVersion;
++        __le32  DeviceFlags;
++        __le32  Medium;
++        __le32  MaxPacketsPerTransfer;
++        __le32  MaxTransferSize;
++        __le32  PacketAlignmentFactor;
++        __le32  AFListOffset;
++        __le32  AFListSize;
++} rndis_init_cmplt_type;
++
++typedef struct rndis_halt_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++} rndis_halt_msg_type;
++
++typedef struct rndis_query_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  OID;
++        __le32  InformationBufferLength;
++        __le32  InformationBufferOffset;
++        __le32  DeviceVcHandle;
++} rndis_query_msg_type;
++
++typedef struct rndis_query_cmplt_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  Status;
++        __le32  InformationBufferLength;
++        __le32  InformationBufferOffset;
++} rndis_query_cmplt_type;
++
++typedef struct rndis_set_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  OID;
++        __le32  InformationBufferLength;
++        __le32  InformationBufferOffset;
++        __le32  DeviceVcHandle;
++} rndis_set_msg_type;
++
++typedef struct rndis_set_cmplt_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  Status;
++} rndis_set_cmplt_type;
++
++typedef struct rndis_reset_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  Reserved;
++} rndis_reset_msg_type;
++
++typedef struct rndis_reset_cmplt_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  Status;
++        __le32  AddressingReset;
++} rndis_reset_cmplt_type;
++
++typedef struct rndis_indicate_status_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  Status;
++        __le32  StatusBufferLength;
++        __le32  StatusBufferOffset;
++} rndis_indicate_status_msg_type;
++
++typedef struct rndis_keepalive_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++} rndis_keepalive_msg_type;
++
++typedef struct rndis_keepalive_cmplt_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  RequestID;
++        __le32  Status;
++} rndis_keepalive_cmplt_type;
++
++struct rndis_packet_msg_type
++{
++        __le32  MessageType;
++        __le32  MessageLength;
++        __le32  DataOffset;
++        __le32  DataLength;
++        __le32  OOBDataOffset;
++        __le32  OOBDataLength;
++        __le32  NumOOBDataElements;
++        __le32  PerPacketInfoOffset;
++        __le32  PerPacketInfoLength;
++        __le32  VcHandle;
++        __le32  Reserved;
++};
++
++struct rndis_config_parameter
++{
++        __le32  ParameterNameOffset;
++        __le32  ParameterNameLength;
++        __le32  ParameterType;
++        __le32  ParameterValueOffset;
++        __le32  ParameterValueLength;
++};
++
++/* implementation specific */
++enum rndis_state
++{
++        RNDIS_UNINITIALIZED,
++        RNDIS_INITIALIZED,
++        RNDIS_DATA_INITIALIZED,
++};
++
++static const uint32_t oid_supported_list[] =
++{
++        /* the general stuff */
++        OID_GEN_SUPPORTED_LIST,
++        OID_GEN_HARDWARE_STATUS,
++        OID_GEN_MEDIA_SUPPORTED,
++        OID_GEN_MEDIA_IN_USE,
++        OID_GEN_MAXIMUM_FRAME_SIZE,
++        OID_GEN_LINK_SPEED,
++        OID_GEN_TRANSMIT_BLOCK_SIZE,
++        OID_GEN_RECEIVE_BLOCK_SIZE,
++        OID_GEN_VENDOR_ID,
++        OID_GEN_VENDOR_DESCRIPTION,
++        OID_GEN_VENDOR_DRIVER_VERSION,
++        OID_GEN_CURRENT_PACKET_FILTER,
++        OID_GEN_MAXIMUM_TOTAL_SIZE,
++        OID_GEN_MEDIA_CONNECT_STATUS,
++        OID_GEN_PHYSICAL_MEDIUM,
++        /* the statistical stuff */
++        OID_GEN_XMIT_OK,
++        OID_GEN_RCV_OK,
++        OID_GEN_XMIT_ERROR,
++        OID_GEN_RCV_ERROR,
++        OID_GEN_RCV_NO_BUFFER,
++        /* mandatory 802.3 */
++        /* the general stuff */
++        OID_802_3_PERMANENT_ADDRESS,
++        OID_802_3_CURRENT_ADDRESS,
++        OID_802_3_MULTICAST_LIST,
++        OID_802_3_MAC_OPTIONS,
++        OID_802_3_MAXIMUM_LIST_SIZE,
++
++        /* the statistical stuff */
++        OID_802_3_RCV_ERROR_ALIGNMENT,
++        OID_802_3_XMIT_ONE_COLLISION,
++        OID_802_3_XMIT_MORE_COLLISIONS
++};
++
++struct rndis_response {
++      TAILQ_ENTRY(rndis_response) entries;
++      uint32_t length;
++      uint8_t buf[0];
++};
++
++
++typedef struct USBNetState {
++      USBDevice dev;
++
++      unsigned int rndis;
++      enum rndis_state rndis_state;
++        uint32_t medium;
++        uint32_t speed;
++        uint32_t media_state;
++      uint16_t filter;
++              uint32_t vendorid;
++      uint8_t mac[6];
++
++      unsigned int out_ptr;
++      uint8_t out_buf[2048];
++
++      USBPacket *inpkt;
++      unsigned int in_ptr, in_len;
++      uint8_t in_buf[2048];   
++
++      VLANClientState *vc;
++      TAILQ_HEAD(rndis_resp_head, rndis_response) rndis_resp;
++} USBNetState;
++
++
++static int ndis_query(USBNetState *s, uint32_t oid, uint8_t *inbuf, unsigned int inlen, uint8_t *outbuf)
++{
++      switch (oid) {
++        /* general oids (table 4-1) */
++        /* mandatory */
++        case OID_GEN_SUPPORTED_LIST:
++      {
++                unsigned int i, count = sizeof(oid_supported_list) / sizeof(uint32_t);
++                for (i = 0; i < count; i++)
++                        ((__le32 *)outbuf)[i] = cpu_to_le32(oid_supported_list[i]);
++                return sizeof(oid_supported_list);
++      }
++
++        /* mandatory */
++      case OID_GEN_HARDWARE_STATUS:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++              
++        /* mandatory */
++        case OID_GEN_MEDIA_SUPPORTED:
++              *((__le32 *)outbuf) = cpu_to_le32(s->medium);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_MEDIA_IN_USE:
++              *((__le32 *)outbuf) = cpu_to_le32(s->medium);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_MAXIMUM_FRAME_SIZE:
++              *((__le32 *)outbuf) = cpu_to_le32(ETH_FRAME_LEN);
++              return sizeof(__le32);
++              
++        /* mandatory */
++        case OID_GEN_LINK_SPEED:
++              *((__le32 *)outbuf) = cpu_to_le32(s->speed);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_TRANSMIT_BLOCK_SIZE:
++              *((__le32 *)outbuf) = cpu_to_le32(ETH_FRAME_LEN);
++              return sizeof(__le32);
++              
++        /* mandatory */
++        case OID_GEN_RECEIVE_BLOCK_SIZE:
++              *((__le32 *)outbuf) = cpu_to_le32(ETH_FRAME_LEN);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_VENDOR_ID:
++              *((__le32 *)outbuf) = cpu_to_le32(0x1234);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_VENDOR_DESCRIPTION:
++              strcpy(outbuf, "QEMU USB RNDIS Net");
++              return strlen(outbuf) + 1;
++
++       case OID_GEN_VENDOR_DRIVER_VERSION:
++              *((__le32 *)outbuf) = cpu_to_le32(1);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_CURRENT_PACKET_FILTER:
++              *((__le32 *)outbuf) = cpu_to_le32(s->filter);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_MAXIMUM_TOTAL_SIZE:
++              *((__le32 *)outbuf) = cpu_to_le32(RNDIS_MAX_TOTAL_SIZE);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_MEDIA_CONNECT_STATUS:
++              *((__le32 *)outbuf) = cpu_to_le32(s->media_state);
++              return sizeof(__le32);
++
++        case OID_GEN_PHYSICAL_MEDIUM:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        case OID_GEN_MAC_OPTIONS:
++              *((__le32 *)outbuf) = cpu_to_le32(NDIS_MAC_OPTION_RECEIVE_SERIALIZED | NDIS_MAC_OPTION_FULL_DUPLEX);
++              return sizeof(__le32);
++
++        /* statistics OIDs (table 4-2) */
++        /* mandatory */
++        case OID_GEN_XMIT_OK:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_RCV_OK:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_XMIT_ERROR:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_RCV_ERROR:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_GEN_RCV_NO_BUFFER:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* ieee802.3 OIDs (table 4-3) */
++        /* mandatory */
++        case OID_802_3_PERMANENT_ADDRESS:
++              memcpy(outbuf, s->mac, 6);
++              return 6;
++
++        /* mandatory */
++        case OID_802_3_CURRENT_ADDRESS:
++              memcpy(outbuf, s->mac, 6);
++              return 6;
++
++        /* mandatory */
++        case OID_802_3_MULTICAST_LIST:
++              *((__le32 *)outbuf) = cpu_to_le32(0xE0000000);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_802_3_MAXIMUM_LIST_SIZE:
++              *((__le32 *)outbuf) = cpu_to_le32(1);
++              return sizeof(__le32);
++
++        case OID_802_3_MAC_OPTIONS:
++              return 0;
++
++        /* ieee802.3 statistics OIDs (table 4-4) */
++        /* mandatory */
++        case OID_802_3_RCV_ERROR_ALIGNMENT:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_802_3_XMIT_ONE_COLLISION:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++        /* mandatory */
++        case OID_802_3_XMIT_MORE_COLLISIONS:
++              *((__le32 *)outbuf) = cpu_to_le32(0);
++              return sizeof(__le32);
++
++      default:
++              fprintf(stderr, "usbnet: unknown OID 0x%08x\n", oid);
++              return 0;
++      }
++      return -1;
++}
++
++static int ndis_set(USBNetState *s, uint32_t oid, uint8_t *inbuf, unsigned int inlen)
++{
++      switch (oid) {
++        case OID_GEN_CURRENT_PACKET_FILTER:
++              s->filter = le32_to_cpup((__le32 *)inbuf);
++              if (s->filter) {
++                      s->rndis_state = RNDIS_DATA_INITIALIZED;
++              } else {
++                      s->rndis_state = RNDIS_INITIALIZED;
++              }
++              return 0;
++
++        case OID_802_3_MULTICAST_LIST:
++              return 0;
++
++      }
++      return -1;
++}
++
++static int rndis_get_response(USBNetState *s, uint8_t *buf)
++{
++      int ret = 0;
++      struct rndis_response *r = s->rndis_resp.tqh_first;
++      if (!r)
++              return ret;
++      TAILQ_REMOVE(&s->rndis_resp, r, entries);
++      ret = r->length;
++      memcpy(buf, r->buf, r->length);
++      qemu_free(r);
++      return ret;
++}
++
++static void *rndis_queue_response(USBNetState *s, unsigned int length)
++{
++      struct rndis_response *r = qemu_mallocz(sizeof(struct rndis_response) + length);
++      if (!r)
++              return NULL;
++      TAILQ_INSERT_TAIL(&s->rndis_resp, r, entries);
++      r->length = length;
++      return &r->buf[0];
++}
++
++static void rndis_clear_responsequeue(USBNetState *s)
++{
++      struct rndis_response *r;
++      
++      while ((r = s->rndis_resp.tqh_first)) {
++              TAILQ_REMOVE(&s->rndis_resp, r, entries);
++              qemu_free(r);
++      }
++}
++
++static int rndis_init_response(USBNetState *s, rndis_init_msg_type *buf)
++{
++      rndis_init_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_init_cmplt_type));
++      if (!resp)
++              return USB_RET_STALL;
++      resp->MessageType = cpu_to_le32(REMOTE_NDIS_INITIALIZE_CMPLT);
++        resp->MessageLength = cpu_to_le32(sizeof(rndis_init_cmplt_type));
++        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
++        resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
++        resp->MajorVersion = cpu_to_le32(RNDIS_MAJOR_VERSION);
++        resp->MinorVersion = cpu_to_le32(RNDIS_MINOR_VERSION);
++        resp->DeviceFlags = cpu_to_le32(RNDIS_DF_CONNECTIONLESS);
++        resp->Medium = cpu_to_le32(RNDIS_MEDIUM_802_3);
++        resp->MaxPacketsPerTransfer = cpu_to_le32(1);
++        resp->MaxTransferSize = cpu_to_le32(ETH_FRAME_LEN + sizeof(struct rndis_packet_msg_type) + 22);
++        resp->PacketAlignmentFactor = cpu_to_le32(0);
++        resp->AFListOffset = cpu_to_le32(0);
++        resp->AFListSize = cpu_to_le32(0);
++        return 0;
++}
++
++static int rndis_query_response(USBNetState *s, rndis_query_msg_type *buf, unsigned int length)
++{
++        rndis_query_cmplt_type *resp;
++      uint8_t infobuf[sizeof(oid_supported_list)]; /* oid_supported_list is the largest data reply */
++      uint32_t bufoffs, buflen;
++      int infobuflen;
++      unsigned int resplen;
++      bufoffs = le32_to_cpu(buf->InformationBufferOffset) + 8;
++      buflen = le32_to_cpu(buf->InformationBufferLength);
++      if (bufoffs + buflen > length)
++              return USB_RET_STALL;
++      infobuflen = ndis_query(s, le32_to_cpu(buf->OID), bufoffs + (uint8_t *)buf, buflen, infobuf);
++      resplen = sizeof(rndis_query_cmplt_type) + ((infobuflen < 0) ? 0 : infobuflen);
++      resp = rndis_queue_response(s, resplen);
++      if (!resp)
++              return USB_RET_STALL;
++        resp->MessageType = cpu_to_le32(REMOTE_NDIS_QUERY_CMPLT);
++        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
++      resp->MessageLength = cpu_to_le32(resplen);
++      if (infobuflen < 0) {
++              /* OID not supported */
++                resp->Status = cpu_to_le32(RNDIS_STATUS_NOT_SUPPORTED);
++              resp->InformationBufferLength = cpu_to_le32(0);
++                resp->InformationBufferOffset = cpu_to_le32(0);
++              return 0;
++      }
++      resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
++      resp->InformationBufferOffset = cpu_to_le32(infobuflen ? sizeof(rndis_query_cmplt_type) - 8 : 0);
++      resp->InformationBufferLength = cpu_to_le32(infobuflen);
++      memcpy(resp + 1, infobuf, infobuflen);
++      return 0;
++}
++
++static int rndis_set_response(USBNetState *s, rndis_set_msg_type *buf, unsigned int length)
++{
++        rndis_set_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_set_cmplt_type));
++      uint32_t bufoffs, buflen;
++      if (!resp)
++              return USB_RET_STALL;
++      bufoffs = le32_to_cpu(buf->InformationBufferOffset) + 8;
++      buflen = le32_to_cpu(buf->InformationBufferLength);
++      if (bufoffs + buflen > length)
++              return USB_RET_STALL;
++      int ret = ndis_set(s, le32_to_cpu(buf->OID), bufoffs + (uint8_t *)buf, buflen);
++        resp->MessageType = cpu_to_le32(REMOTE_NDIS_SET_CMPLT);
++        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
++      resp->MessageLength = cpu_to_le32(sizeof(rndis_set_cmplt_type));
++      if (ret < 0) {
++              /* OID not supported */
++                resp->Status = cpu_to_le32(RNDIS_STATUS_NOT_SUPPORTED);
++              return 0;
++      }
++      resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
++      return 0;
++}
++
++static int rndis_reset_response(USBNetState *s, rndis_reset_msg_type *buf)
++{
++        rndis_reset_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_reset_cmplt_type));
++      if (!resp)
++              return USB_RET_STALL;
++        resp->MessageType = cpu_to_le32(REMOTE_NDIS_RESET_CMPLT);
++        resp->MessageLength = cpu_to_le32(sizeof(rndis_reset_cmplt_type));
++        resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
++        /* resent information */
++        resp->AddressingReset = cpu_to_le32(1);
++      return 0;
++}
++
++static int rndis_keepalive_response(USBNetState *s, rndis_keepalive_msg_type *buf)
++{
++        rndis_keepalive_cmplt_type *resp = rndis_queue_response(s, sizeof(rndis_keepalive_cmplt_type));
++      if (!resp)
++              return USB_RET_STALL;
++        resp->MessageType = cpu_to_le32(REMOTE_NDIS_KEEPALIVE_CMPLT);
++        resp->MessageLength = cpu_to_le32(sizeof(rndis_keepalive_cmplt_type));
++        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
++        resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
++      return 0;
++}
++
++static int rndis_parse(USBNetState *s, uint8_t *data, int length)
++{
++        uint32_t MsgType, MsgLength;
++        __le32 *tmp = (__le32 *)data;
++        MsgType = le32_to_cpup(tmp++);
++        MsgLength = le32_to_cpup(tmp++);
++      
++      switch (MsgType) {
++      case REMOTE_NDIS_INITIALIZE_MSG:
++              s->rndis_state = RNDIS_INITIALIZED;
++              return rndis_init_response(s, (rndis_init_msg_type *)data);
++
++        case REMOTE_NDIS_HALT_MSG:
++              s->rndis_state = RNDIS_UNINITIALIZED;
++                return 0;
++
++      case REMOTE_NDIS_QUERY_MSG:
++                return rndis_query_response(s, (rndis_query_msg_type *)data, length);
++
++        case REMOTE_NDIS_SET_MSG:
++                return rndis_set_response(s, (rndis_set_msg_type *)data, length);
++
++        case REMOTE_NDIS_RESET_MSG:
++              rndis_clear_responsequeue(s);
++              s->out_ptr = s->in_ptr = s->in_len = 0;
++                return rndis_reset_response(s, (rndis_reset_msg_type *)data);
++
++        case REMOTE_NDIS_KEEPALIVE_MSG:
++                /* For USB: host does this every 5 seconds */
++                return rndis_keepalive_response(s, (rndis_keepalive_msg_type *)data); 
++      }
++      return USB_RET_STALL;
++}
++
++static void usb_net_handle_reset(USBDevice *dev)
++{
++}
++
++static int usb_net_handle_control(USBDevice *dev, int request, int value,
++                                  int index, int length, uint8_t *data)
++{
++      USBNetState *s = (USBNetState *)dev;
++      int ret = 0;
++
++      switch(request) {
++      case DeviceRequest | USB_REQ_GET_STATUS:
++              data[0] = (1 << USB_DEVICE_SELF_POWERED) |
++                      (dev->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP);
++              data[1] = 0x00;
++              ret = 2;
++              break;
++
++      case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
++              if (value == USB_DEVICE_REMOTE_WAKEUP) {
++                      dev->remote_wakeup = 0;
++              } else {
++                      goto fail;
++              }
++              ret = 0;
++              break;
++
++      case DeviceOutRequest | USB_REQ_SET_FEATURE:
++              if (value == USB_DEVICE_REMOTE_WAKEUP) {
++                      dev->remote_wakeup = 1;
++              } else {
++                      goto fail;
++              }
++              ret = 0;
++              break;
++
++      case DeviceOutRequest | USB_REQ_SET_ADDRESS:
++              dev->addr = value;
++              ret = 0;
++              break;
++
++      case ClassInterfaceOutRequest | USB_CDC_SEND_ENCAPSULATED_COMMAND:
++              if (!s->rndis || value || index != 0)
++                      goto fail;
++#if TRAFFIC_DEBUG
++              {
++                      unsigned int i;
++                      fprintf(stderr, "SEND_ENCAPSULATED_COMMAND:");
++                      for (i = 0; i < length; i++) {
++                              if (!(i & 15))
++                                      fprintf(stderr, "\n%04X:", i);
++                              fprintf(stderr, " %02X", data[i]);
++                      }
++                      fprintf(stderr, "\n\n");
++              }
++#endif
++              ret = rndis_parse(s, data, length);
++              break;
++
++      case ClassInterfaceRequest | USB_CDC_GET_ENCAPSULATED_RESPONSE:
++              if (!s->rndis || value || index != 0)
++                      goto fail;
++              ret = rndis_get_response(s, data);
++              if (!ret) {
++                      data[0] = 0;
++                      ret = 1;
++              }
++#if TRAFFIC_DEBUG
++              {
++                      unsigned int i;
++                      fprintf(stderr, "GET_ENCAPSULATED_RESPONSE:");
++                      for (i = 0; i < ret; i++) {
++                              if (!(i & 15))
++                                      fprintf(stderr, "\n%04X:", i);
++                              fprintf(stderr, " %02X", data[i]);
++                      }
++                      fprintf(stderr, "\n\n");
++              }
++#endif
++              break;
++
++      case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
++              switch(value >> 8) {
++              case USB_DT_DEVICE:
++                      ret = sizeof(qemu_net_dev_descriptor);
++                      memcpy(data, qemu_net_dev_descriptor, ret);
++                      break;
++
++              case USB_DT_CONFIG:
++                      switch (value & 0xff) {
++                      case 0:
++                              ret = sizeof(qemu_net_rndis_config_descriptor);
++                              memcpy(data, qemu_net_rndis_config_descriptor,
++                                              ret);
++                              break;
++
++                      case 1:
++                              ret = sizeof(qemu_net_cdc_config_descriptor);
++                              memcpy(data, qemu_net_cdc_config_descriptor,
++                                              ret);
++                              break;
++
++                      default:
++                              goto fail;
++                      }
++                      data[2] = ret & 0xff;
++                      data[3] = ret >> 8;
++                      break;
++
++              case USB_DT_STRING:
++                      switch (value & 0xff) {
++                      case 0:
++                              /* language ids */
++                              data[0] = 4;
++                              data[1] = 3;
++                              data[2] = 0x09;
++                              data[3] = 0x04;
++                              ret = 4;
++                              break;
++                              
++                      case STRING_MANUFACTURER:
++                              ret = set_usb_string(data, "QEMU");
++                              break;
++
++                      case STRING_PRODUCT:
++                              ret = set_usb_string(data, "RNDIS/QEMU USB Network Device");
++                              break;
++
++                      case STRING_ETHADDR:
++                              ret = set_usb_string(data, "400102030405");
++                              break;
++
++                      case STRING_DATA:
++                              ret = set_usb_string(data, "QEMU USB Net Data Interface");
++                              break;
++
++                      case STRING_CONTROL:
++                              ret = set_usb_string(data, "QEMU USB Net Control Interface");
++                              break;
++
++                      case STRING_RNDIS_CONTROL:
++                              ret = set_usb_string(data, "QEMU USB Net RNDIS Control Interface");
++                              break;
++
++                      case STRING_CDC:
++                              ret = set_usb_string(data, "QEMU USB Net CDC");
++                              break;
++
++                      case STRING_SUBSET:
++                              ret = set_usb_string(data, "QEMU USB Net Subset");
++                              break;
++
++                      case STRING_RNDIS:
++                              ret = set_usb_string(data, "QEMU USB Net RNDIS");
++                              break;
++
++                      case STRING_SERIALNUMBER:
++                              ret = set_usb_string(data, "1");
++                              break;
++
++                      default:
++                              goto fail;
++                      }
++                      break;
++
++              default:
++                      goto fail;
++              }
++              break;
++
++      case DeviceRequest | USB_REQ_GET_CONFIGURATION:
++              data[0] = s->rndis ? DEV_RNDIS_CONFIG_VALUE : DEV_CONFIG_VALUE;
++              ret = 1;
++              break;
++
++      case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
++              switch (value & 0xff) {
++              case DEV_CONFIG_VALUE:
++                      s->rndis = 0;
++                      break;
++
++              case DEV_RNDIS_CONFIG_VALUE:
++                      s->rndis = 1;
++                      break;
++
++              default:
++                      goto fail;
++              }
++              ret = 0;
++              break;
++
++      case DeviceRequest | USB_REQ_GET_INTERFACE:
++      case InterfaceRequest | USB_REQ_GET_INTERFACE:
++              data[0] = 0;
++              ret = 1;
++              break;
++
++      case DeviceOutRequest | USB_REQ_SET_INTERFACE:
++      case InterfaceOutRequest | USB_REQ_SET_INTERFACE:
++              ret = 0;
++              break;
++
++      default:
++      fail:
++              fprintf(stderr, "usbnet: failed control transaction: request 0x%x value 0x%x index 0x%x length 0x%x\n",
++                      request, value, index, length);
++              ret = USB_RET_STALL;
++              break;
++      }
++      return ret;
++}
++
++static int usb_net_handle_statusin(USBNetState *s, USBPacket *p)
++{
++      int ret = 8;
++      if (p->len < 8)
++              return USB_RET_STALL;
++      ((__le32 *)p->data)[0] = cpu_to_le32(1);
++      ((__le32 *)p->data)[1] = cpu_to_le32(0);
++      if (!s->rndis_resp.tqh_first)
++              ret = USB_RET_NAK;
++#if DEBUG
++      fprintf(stderr, "usbnet: interrupt poll len %u return %d", p->len, ret);
++      {
++              int i;
++              fprintf(stderr, ":");
++              for (i = 0; i < ret; i++) {
++                      if (!(i & 15))
++                              fprintf(stderr, "\n%04X:", i);
++                      fprintf(stderr, " %02X", p->data[i]);
++              }
++              fprintf(stderr, "\n\n");
++      }
++#endif
++      return ret;
++}
++
++static int usb_net_handle_datain(USBNetState *s, USBPacket *p)
++{
++      int ret = USB_RET_NAK;
++
++      if (s->in_ptr > s->in_len) {
++              s->in_ptr = s->in_len = 0;
++              ret = USB_RET_NAK;
++              return ret;
++      }
++      if (!s->in_len) {
++              ret = USB_RET_NAK;
++              return ret;
++      }
++      ret = s->in_len - s->in_ptr;
++      if (ret > p->len)
++              ret = p->len;
++      memcpy(p->data, &s->in_buf[s->in_ptr], ret);
++      s->in_ptr += ret;
++      if (s->in_ptr >= s->in_len && (s->rndis || (s->in_len & (64-1)) || !ret)) {
++              /* no short packet necessary */
++              s->in_ptr = s->in_len = 0;
++      }
++#if TRAFFIC_DEBUG
++      fprintf(stderr, "usbnet: data in len %u return %d", p->len, ret);
++      {
++              int i;
++              fprintf(stderr, ":");
++              for (i = 0; i < ret; i++) {
++                      if (!(i & 15))
++                              fprintf(stderr, "\n%04X:", i);
++                      fprintf(stderr, " %02X", p->data[i]);
++              }
++              fprintf(stderr, "\n\n");
++      }
++#endif
++      return ret;
++}
++
++static int usb_net_handle_dataout(USBNetState *s, USBPacket *p)
++{
++      int ret = p->len;
++      int sz = sizeof(s->out_buf) - s->out_ptr;
++      struct rndis_packet_msg_type *msg = (struct rndis_packet_msg_type *)s->out_buf;
++      uint32_t len;
++
++#if TRAFFIC_DEBUG
++      fprintf(stderr, "usbnet: data out len %u\n", p->len);
++      {
++              int i;
++              fprintf(stderr, ":");
++              for (i = 0; i < p->len; i++) {
++                      if (!(i & 15))
++                              fprintf(stderr, "\n%04X:", i);
++                      fprintf(stderr, " %02X", p->data[i]);
++              }
++              fprintf(stderr, "\n\n");
++      }
++#endif
++      if (sz > ret)
++              sz = ret;
++      memcpy(&s->out_buf[s->out_ptr], p->data, sz);
++      s->out_ptr += sz;
++      if (!s->rndis) {
++              if (ret < 64) {
++                      qemu_send_packet(s->vc, s->out_buf, s->out_ptr);
++                      s->out_ptr = 0;
++              }
++              return ret;
++      }
++      len = le32_to_cpu(msg->MessageLength);
++      if (s->out_ptr < 8 || s->out_ptr < len)
++              return ret;
++      if (le32_to_cpu(msg->MessageType) == REMOTE_NDIS_PACKET_MSG) {
++              uint32_t offs = 8 + le32_to_cpu(msg->DataOffset);
++              uint32_t size = le32_to_cpu(msg->DataLength);
++              if (offs + size <= len)
++                      qemu_send_packet(s->vc, s->out_buf + offs, size);
++      }
++      s->out_ptr -= len;
++      memmove(s->out_buf, &s->out_buf[len], s->out_ptr);
++      return ret;
++}
++
++static int usb_net_handle_data(USBDevice *dev, USBPacket *p)
++{
++      USBNetState *s = (USBNetState *)dev;
++      int ret = 0;
++
++      switch(p->pid) {
++      case USB_TOKEN_IN:
++              switch (p->devep) {
++              case 1:
++                      ret = usb_net_handle_statusin(s, p);
++                      break;
++
++              case 2:
++                      ret = usb_net_handle_datain(s, p);
++                      break;
++
++              default:
++                      goto fail;
++              }
++              break;
++
++      case USB_TOKEN_OUT:
++              switch (p->devep) {
++              case 2:
++                      ret = usb_net_handle_dataout(s, p);
++                      break;
++
++              default:
++                      goto fail;
++              }
++              break;
++
++      default:
++      fail:
++              ret = USB_RET_STALL;
++              break;
++      }
++      if (ret == USB_RET_STALL)
++              fprintf(stderr, "usbnet: failed data transaction: pid 0x%x ep 0x%x len 0x%x\n", p->pid, p->devep, p->len);
++      return ret;
++}
++
++static void usbnet_receive(void *opaque, const uint8_t *buf, int size)
++{
++      USBNetState *s = opaque;
++
++      if (s->rndis) {
++              struct rndis_packet_msg_type *msg = (struct rndis_packet_msg_type *)s->in_buf;
++              if (!s->rndis_state == RNDIS_DATA_INITIALIZED)
++                      return;
++              if (size + sizeof(struct rndis_packet_msg_type) > sizeof(s->in_buf))
++                      return;
++              memset(msg, 0, sizeof(struct rndis_packet_msg_type));
++              msg->MessageType = cpu_to_le32(REMOTE_NDIS_PACKET_MSG);
++              msg->MessageLength = cpu_to_le32(size + sizeof(struct rndis_packet_msg_type));
++              msg->DataOffset = cpu_to_le32(sizeof(struct rndis_packet_msg_type) - 8);
++              msg->DataLength = cpu_to_le32(size);
++              //msg->OOBDataOffset;
++              //msg->OOBDataLength;
++              //msg->NumOOBDataElements;
++              //msg->PerPacketInfoOffset;
++              //msg->PerPacketInfoLength;
++              //msg->VcHandle;
++              //msg->Reserved;
++              memcpy(msg + 1, buf, size);
++              s->in_len = size + sizeof(struct rndis_packet_msg_type);
++      } else {
++              if (size > sizeof(s->in_buf))
++                      return;
++              memcpy(s->in_buf, buf, size);
++              s->in_len = size;
++      }
++      s->in_ptr = 0;
++}
++
++static int usbnet_can_receive(void *opaque)
++{
++      USBNetState *s = opaque;
++
++      if (s->rndis && !s->rndis_state == RNDIS_DATA_INITIALIZED)
++              return 1;
++      return !s->in_len;
++}
++
++static void usb_net_handle_destroy(USBDevice *dev)
++{
++      USBNetState *s = (USBNetState *)dev;
++      rndis_clear_responsequeue(s);
++      qemu_free(s);
++}
++
++USBDevice *usb_net_init(NICInfo *nd)
++{
++      USBNetState *s;
++
++      s = qemu_mallocz(sizeof(USBNetState));
++      if (!s)
++              return NULL;
++      s->dev.speed = USB_SPEED_FULL;
++      s->dev.handle_packet = usb_generic_handle_packet;
++
++      s->dev.handle_reset = usb_net_handle_reset;
++      s->dev.handle_control = usb_net_handle_control;
++      s->dev.handle_data = usb_net_handle_data;
++      s->dev.handle_destroy = usb_net_handle_destroy;
++
++      s->rndis = 1;
++      s->rndis_state = RNDIS_UNINITIALIZED;
++        s->medium = NDIS_MEDIUM_802_3;
++        s->speed = 1000000; /* 100MBps, in 100Bps units */
++        s->media_state = NDIS_MEDIA_STATE_CONNECTED;
++      s->filter = 0;
++        s->vendorid = 0x1234;
++      memcpy(s->mac, nd->macaddr, 6);
++      TAILQ_INIT(&s->rndis_resp);
++
++      pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Network Interface");
++      s->vc = qemu_new_vlan_client(nd->vlan, usbnet_receive, usbnet_can_receive, s);
++      snprintf(s->vc->info_str, sizeof(s->vc->info_str),
++               "usbnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
++               s->mac[0], s->mac[1], s->mac[2],
++               s->mac[3], s->mac[4], s->mac[5]);
++      fprintf(stderr, "usbnet: initialized mac %02x:%02x:%02x:%02x:%02x:%02x\n",
++              s->mac[0], s->mac[1], s->mac[2],
++              s->mac[3], s->mac[4], s->mac[5]);
++      return (USBDevice *)s;
++}
+diff -urN 4242/Makefile qemu-omap/Makefile
+--- 4242/Makefile      2008-04-24 20:17:05.000000000 +0100
++++ qemu-omap/Makefile 2008-04-23 09:57:55.000000000 +0100
+@@ -55,7 +55,8 @@
+ OBJS+=tmp105.o
+ OBJS+=scsi-disk.o cdrom.o
+ OBJS+=scsi-generic.o
+-OBJS+=usb.o usb-hub.o usb-linux.o usb-hid.o usb-msd.o usb-wacom.o usb-serial.o
++OBJS+=usb.o usb-hub.o usb-linux.o usb-hid.o usb-msd.o usb-net.o
++OBJS+=usb-wacom.o usb-serial.o
+ OBJS+=sd.o ssi-sd.o
+ ifdef CONFIG_BRLAPI
+diff -urN 4242/softmmu_template.h qemu-omap/softmmu_template.h
+--- 4242/softmmu_template.h    2008-04-24 18:11:49.000000000 +0100
++++ qemu-omap/softmmu_template.h       2008-04-23 09:57:56.000000000 +0100
+@@ -51,12 +51,15 @@
+                                                         int mmu_idx,
+                                                         void *retaddr);
+ static inline DATA_TYPE glue(io_read, SUFFIX)(target_phys_addr_t physaddr,
+-                                              target_ulong tlb_addr)
++                                              target_ulong tlb_addr,
++                                              target_ulong tlb_io)
+ {
+     DATA_TYPE res;
+     int index;
+-    index = (tlb_addr >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
++    index = (tlb_addr & ~TARGET_PAGE_MASK) >> IO_MEM_SHIFT;
++    if (index > 4)
++        index = (tlb_io >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
+ #if SHIFT <= 2
+     res = io_mem_read[index][SHIFT](io_mem_opaque[index], physaddr);
+ #else
+@@ -95,7 +98,9 @@
+             /* IO access */
+             if ((addr & (DATA_SIZE - 1)) != 0)
+                 goto do_unaligned_access;
+-            res = glue(io_read, SUFFIX)(physaddr, tlb_addr);
++            res = glue(io_read, SUFFIX)(physaddr, tlb_addr,
++                                        env->tlb_table[mmu_idx]
++                                        [index].addr_code);
+         } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
+             /* slow unaligned access (it spans two pages or IO) */
+         do_unaligned_access:
+@@ -147,7 +152,9 @@
+             /* IO access */
+             if ((addr & (DATA_SIZE - 1)) != 0)
+                 goto do_unaligned_access;
+-            res = glue(io_read, SUFFIX)(physaddr, tlb_addr);
++            res = glue(io_read, SUFFIX)(physaddr, tlb_addr,
++                                        env->tlb_table[mmu_idx]
++                                        [index].addr_code);
+         } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
+         do_unaligned_access:
+             /* slow unaligned access (it spans two pages) */
+@@ -186,11 +193,14 @@
+ static inline void glue(io_write, SUFFIX)(target_phys_addr_t physaddr,
+                                           DATA_TYPE val,
+                                           target_ulong tlb_addr,
+-                                          void *retaddr)
++                                          void *retaddr,
++                                          target_ulong tlb_io)
+ {
+     int index;
+-    index = (tlb_addr >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
++    index = (tlb_addr & ~TARGET_PAGE_MASK) >> IO_MEM_SHIFT;
++    if (index > 4)
++        index = (tlb_io >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
+     env->mem_write_vaddr = tlb_addr;
+     env->mem_write_pc = (unsigned long)retaddr;
+ #if SHIFT <= 2
+@@ -228,7 +238,8 @@
+             if ((addr & (DATA_SIZE - 1)) != 0)
+                 goto do_unaligned_access;
+             retaddr = GETPC();
+-            glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr);
++            glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr,
++                                   env->tlb_table[mmu_idx][index].addr_code);
+         } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
+         do_unaligned_access:
+             retaddr = GETPC();
+@@ -278,7 +289,8 @@
+             /* IO access */
+             if ((addr & (DATA_SIZE - 1)) != 0)
+                 goto do_unaligned_access;
+-            glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr);
++            glue(io_write, SUFFIX)(physaddr, val, tlb_addr, retaddr,
++                                   env->tlb_table[mmu_idx][index].addr_code);
+         } else if (((addr & ~TARGET_PAGE_MASK) + DATA_SIZE - 1) >= TARGET_PAGE_SIZE) {
+         do_unaligned_access:
+             /* XXX: not efficient, but simple */
+diff -urN 4242/target-i386/cpu.h qemu-omap/target-i386/cpu.h
+--- 4242/target-i386/cpu.h     2008-04-23 12:18:51.000000000 +0100
++++ qemu-omap/target-i386/cpu.h        2008-04-23 09:57:56.000000000 +0100
+@@ -499,7 +499,7 @@
+     SegmentCache idt; /* only base and limit are used */
+     target_ulong cr[9]; /* NOTE: cr1, cr5-7 are unused */
+-    uint64_t a20_mask;
++    uint32_t a20_mask;
+     /* FPU state */
+     unsigned int fpstt; /* top of stack index */
+diff -urN 4242/target-i386/helper2.c qemu-omap/target-i386/helper2.c
+--- 4242/target-i386/helper2.c 2008-04-23 12:18:51.000000000 +0100
++++ qemu-omap/target-i386/helper2.c    2008-04-23 09:57:56.000000000 +0100
+@@ -377,7 +377,7 @@
+     env->hflags |= HF_GIF_MASK;
+     cpu_x86_update_cr0(env, 0x60000010);
+-    env->a20_mask = ~0x0;
++    env->a20_mask = 0xffffffff;
+     env->smbase = 0x30000;
+     env->idt.limit = 0xffff;
+@@ -695,7 +695,7 @@
+         /* when a20 is changed, all the MMU mappings are invalid, so
+            we must flush everything */
+         tlb_flush(env, 1);
+-        env->a20_mask = (~0x100000) | (a20_state << 20);
++        env->a20_mask = 0xffefffff | (a20_state << 20);
+     }
+ }
+@@ -800,8 +800,7 @@
+ #else
+-/* Bits 52-62 of a PTE are reserved. Bit 63 is the NX bit. */
+-#define PHYS_ADDR_MASK 0xffffffffff000L
++#define PHYS_ADDR_MASK 0xfffff000
+ /* return value:
+    -1 = cannot handle fault
+@@ -813,10 +812,9 @@
+                              int is_write1, int mmu_idx, int is_softmmu)
+ {
+     uint64_t ptep, pte;
+-    target_ulong pde_addr, pte_addr;
++    uint32_t pdpe_addr, pde_addr, pte_addr;
+     int error_code, is_dirty, prot, page_size, ret, is_write, is_user;
+-    target_phys_addr_t paddr;
+-    uint32_t page_offset;
++    unsigned long paddr, page_offset;
+     target_ulong vaddr, virt_addr;
+     is_user = mmu_idx == MMU_USER_IDX;
+@@ -836,11 +834,12 @@
+     if (env->cr[4] & CR4_PAE_MASK) {
+         uint64_t pde, pdpe;
+-        target_ulong pdpe_addr;
++        /* XXX: we only use 32 bit physical addresses */
+ #ifdef TARGET_X86_64
+         if (env->hflags & HF_LMA_MASK) {
+-            uint64_t pml4e_addr, pml4e;
++            uint32_t pml4e_addr;
++            uint64_t pml4e;
+             int32_t sext;
+             /* test virtual address sign extension */
+@@ -1102,19 +1101,17 @@
+ target_phys_addr_t cpu_get_phys_page_debug(CPUState *env, target_ulong addr)
+ {
+-    target_ulong pde_addr, pte_addr;
+-    uint64_t pte;
+-    target_phys_addr_t paddr;
+-    uint32_t page_offset;
+-    int page_size;
++    uint32_t pde_addr, pte_addr;
++    uint32_t pde, pte, paddr, page_offset, page_size;
+     if (env->cr[4] & CR4_PAE_MASK) {
+-        target_ulong pdpe_addr;
+-        uint64_t pde, pdpe;
++        uint32_t pdpe_addr, pde_addr, pte_addr;
++        uint32_t pdpe;
++        /* XXX: we only use 32 bit physical addresses */
+ #ifdef TARGET_X86_64
+         if (env->hflags & HF_LMA_MASK) {
+-            uint64_t pml4e_addr, pml4e;
++            uint32_t pml4e_addr, pml4e;
+             int32_t sext;
+             /* test virtual address sign extension */
+@@ -1124,13 +1121,13 @@
+             pml4e_addr = ((env->cr[3] & ~0xfff) + (((addr >> 39) & 0x1ff) << 3)) &
+                 env->a20_mask;
+-            pml4e = ldq_phys(pml4e_addr);
++            pml4e = ldl_phys(pml4e_addr);
+             if (!(pml4e & PG_PRESENT_MASK))
+                 return -1;
+             pdpe_addr = ((pml4e & ~0xfff) + (((addr >> 30) & 0x1ff) << 3)) &
+                 env->a20_mask;
+-            pdpe = ldq_phys(pdpe_addr);
++            pdpe = ldl_phys(pdpe_addr);
+             if (!(pdpe & PG_PRESENT_MASK))
+                 return -1;
+         } else
+@@ -1138,14 +1135,14 @@
+         {
+             pdpe_addr = ((env->cr[3] & ~0x1f) + ((addr >> 27) & 0x18)) &
+                 env->a20_mask;
+-            pdpe = ldq_phys(pdpe_addr);
++            pdpe = ldl_phys(pdpe_addr);
+             if (!(pdpe & PG_PRESENT_MASK))
+                 return -1;
+         }
+         pde_addr = ((pdpe & ~0xfff) + (((addr >> 21) & 0x1ff) << 3)) &
+             env->a20_mask;
+-        pde = ldq_phys(pde_addr);
++        pde = ldl_phys(pde_addr);
+         if (!(pde & PG_PRESENT_MASK)) {
+             return -1;
+         }
+@@ -1158,11 +1155,9 @@
+             pte_addr = ((pde & ~0xfff) + (((addr >> 12) & 0x1ff) << 3)) &
+                 env->a20_mask;
+             page_size = 4096;
+-            pte = ldq_phys(pte_addr);
++            pte = ldl_phys(pte_addr);
+         }
+     } else {
+-        uint32_t pde;
+-
+         if (!(env->cr[0] & CR0_PG_MASK)) {
+             pte = addr;
+             page_size = 4096;
+diff -urN 4242/vl.c qemu-omap/vl.c
+--- 4242/vl.c  2008-04-24 21:26:21.000000000 +0100
++++ qemu-omap/vl.c     2008-04-23 09:57:57.000000000 +0100
+@@ -5284,6 +5284,11 @@
+         dev = usb_keyboard_init();
+     } else if (strstart(devname, "disk:", &p)) {
+         dev = usb_msd_init(p);
++    } else if (strstart(devname, "net:", &p)) {
++        unsigned int nr = strtoul(p, NULL, 0);
++        if (nr >= (unsigned int) nb_nics || strcmp(nd_table[nr].model, "usb"))
++            return -1;
++        dev = usb_net_init(&nd_table[nr]);
+     } else if (!strcmp(devname, "wacom-tablet")) {
+         dev = usb_wacom_init();
+     } else if (strstart(devname, "serial:", &p)) {
diff --git a/packages/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz b/packages/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz
new file mode 100644 (file)
index 0000000..eb2a76c
Binary files /dev/null and b/packages/qemu/qemu-0.9.1+svn/revert_arm_tcg.patch.gz differ
diff --git a/packages/qemu/qemu-0.9.1+svn/series b/packages/qemu/qemu-0.9.1+svn/series
new file mode 100644 (file)
index 0000000..fb11034
--- /dev/null
@@ -0,0 +1,25 @@
+05_non-fatal_if_linux_hd_missing.patch 
+06_exit_segfault.patch -p0
+10_signal_jobs.patch -p0
+11_signal_sigaction.patch -p0
+22_net_tuntap_stall.patch -p0
+31_syscalls.patch -p0
+32_syscall_sysctl.patch -p0
+33_syscall_ppc_clone.patch -p0
+39_syscall_fadvise64.patch -p0
+52_ne2000_return.patch 
+61_safe_64bit_int.patch -p0
+63_sparc_build.patch -p0
+64_ppc_asm_constraints.patch 
+65_kfreebsd.patch -p0
+66_tls_ld.patch -p0
+91-oh-sdl-cursor.patch -p0
+qemu-0.9.0-nptl.patch 
+qemu-0.9.0-nptl-update.patch 
+qemu-amd64-32b-mapping-0.9.0.patch 
+workaround_bad_futex_headers.patch -p1
+fix_segfault.patch 
+no-strip.patch 
+fix_brk.patch 
+fix_protection_bits.patch -p1
+qemu-n800-support.patch -p1
diff --git a/packages/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.1+svn/workaround_bad_futex_headers.patch
new file mode 100644 (file)
index 0000000..cc122eb
--- /dev/null
@@ -0,0 +1,25 @@
+---
+ linux-user/syscall.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c     2007-08-09 20:28:06.000000000 +0100
++++ qemu/linux-user/syscall.c  2007-08-09 20:28:41.000000000 +0100
+@@ -61,7 +61,15 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+-#include <linux/futex.h>
++#define FUTEX_WAIT              0
++#define FUTEX_WAKE              1
++#define FUTEX_FD                2
++#define FUTEX_REQUEUE           3
++#define FUTEX_CMP_REQUEUE       4
++#define FUTEX_WAKE_OP           5
++#define FUTEX_LOCK_PI           6
++#define FUTEX_UNLOCK_PI         7
++
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
diff --git a/packages/qemu/qemu-native_svn.bb b/packages/qemu/qemu-native_svn.bb
new file mode 100644 (file)
index 0000000..1e3a4db
--- /dev/null
@@ -0,0 +1,2 @@
+require qemu_svn.bb
+require qemu-native.inc
diff --git a/packages/qemu/qemu_svn.bb b/packages/qemu/qemu_svn.bb
new file mode 100644 (file)
index 0000000..6e52a15
--- /dev/null
@@ -0,0 +1,48 @@
+LICENSE = "GPL"
+DEPENDS = "zlib"
+PV = "0.9.1+svnr${SRCREV}"
+PR = "r12"
+
+FILESPATH = "${FILE_DIRNAME}/qemu-${PV}/:${FILE_DIRNAME}/qemu-0.9.1+svn/"
+
+SRC_URI = "\
+    svn://svn.savannah.nongnu.org/qemu;module=trunk \
+    file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
+    file://06_exit_segfault.patch;patch=1;pnum=0 \
+    file://10_signal_jobs.patch;patch=1;pnum=0 \
+    file://11_signal_sigaction.patch;patch=1;pnum=0 \
+    file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
+    file://31_syscalls.patch;patch=1;pnum=0 \
+    file://32_syscall_sysctl.patch;patch=1;pnum=0 \
+    file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
+    file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
+    file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0;maxrev=4028 \
+    file://52_ne2000_return.patch;patch=1;pnum=1 \
+    file://61_safe_64bit_int.patch;patch=1;pnum=0 \
+    file://63_sparc_build.patch;patch=1;pnum=0 \
+    file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
+    file://65_kfreebsd.patch;patch=1;pnum=0 \
+    file://66_tls_ld.patch;patch=1;pnum=0 \
+    file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
+    file://qemu-0.9.0-nptl.patch;patch=1 \
+    file://qemu-0.9.0-nptl-update.patch;patch=1;maxrev=4028 \
+    file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
+    file://workaround_bad_futex_headers.patch;patch=1 \
+    file://fix_segfault.patch;patch=1 \
+    file://no-strip.patch;patch=1 \
+    file://fix_brk.patch;patch=1 \
+    file://fix_protection_bits.patch;patch=1 \
+    file://revert_arm_tcg.patch.gz;patch=1;minrev=4242 \
+    file://qemu-n800-support.patch;patch=1"
+
+S = "${WORKDIR}/trunk"
+
+#EXTRA_OECONF += "--disable-sdl"
+#EXTRA_OECONF += "--target-list=arm-linux-user,arm-softmmu,i386-softmmu"
+EXTRA_OECONF += "--disable-gfx-check"
+
+inherit autotools
+
+do_configure() {
+    ${S}/configure --prefix=${prefix} ${EXTRA_OECONF}
+}
diff --git a/packages/shared-mime-info/shared-mime-info-native_0.51.bb b/packages/shared-mime-info/shared-mime-info-native_0.51.bb
new file mode 100644 (file)
index 0000000..bd6f522
--- /dev/null
@@ -0,0 +1,7 @@
+require shared-mime-info.inc
+
+DEPENDS = "libxml2-native intltool-native glib-2.0-native"
+
+inherit native
+
+S = "${WORKDIR}/shared-mime-info-${PV}"
index a5176a7..ba96f17 100644 (file)
@@ -1,7 +1,5 @@
 SECTION = "base"
 LICENSE = "GPL"
-DEPENDS = "libxml2 intltool-native glib-2.0"
-PR = "r0"
 
 SRC_URI = "http://freedesktop.org/~hadess/shared-mime-info-${PV}.tar.bz2"
 
@@ -11,11 +9,3 @@ EXTRA_OECONF = "--disable-update-mimedb"
 
 FILES_${PN} += "${datadir}/mime"
 FILES_${PN}-dev += "${datadir}/pkgconfig/shared-mime-info.pc"
-
-pkg_postinst () {
-if [ "x$D" != "x" ]; then
-        exit 1
-fi
-  echo "Updating MIME database... this may take a while."
-  ${bindir}/update-mime-database ${datadir}/mime
-}
diff --git a/packages/shared-mime-info/shared-mime-info_0.51.bb b/packages/shared-mime-info/shared-mime-info_0.51.bb
new file mode 100644 (file)
index 0000000..c8e475a
--- /dev/null
@@ -0,0 +1,11 @@
+require shared-mime-info.inc
+
+DEPENDS = "libxml2 intltool-native glib-2.0 shared-mime-info-native"
+PR = "r1"
+
+do_install_append() {
+    update-mime-database ${D}${datadir}/mime
+
+    # we do not need it on device and it is huge
+    rm ${D}${datadir}/mime/packages/freedesktop.org.xml
+}
diff --git a/packages/tasks/mamona-sdk.inc b/packages/tasks/mamona-sdk.inc
new file mode 100644 (file)
index 0000000..fb54eab
--- /dev/null
@@ -0,0 +1,25 @@
+DESCRIPTION = "Mamona SDK - Packages for compilation and debug"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+PACKAGES = "${PN}"
+
+RDEPENDS = "\
+  task-mamona \
+  automake \
+  bison \
+  cmake \
+  fakeroot \
+  flex \
+  git \
+  gdb \
+  gettext \
+  groff \
+  libc6-dev \
+  libstdc++-dev \
+  make \
+  cvs \
+  subversion \
+  pkgconfig \
+  diffutils \
+"
index 76f84cc..c3f867f 100644 (file)
@@ -1,6 +1,6 @@
 DESCRIPTION = "task mamona base"
 LICENSE = "MIT"
-PR = "r1"
+PR = "r2"
 ALLOW_EMPTY = "1"
 
 PACKAGES = "${PN}"
@@ -9,8 +9,7 @@ RDEPENDS = "\
   apt \
   base-files \
   base-passwd \
-  bash \
-  binutils \
+  bash | bash-noemu \
   busybox \
   bzip2 \
   coreutils \
@@ -22,24 +21,22 @@ RDEPENDS = "\
   file \
   gawk \
   gawk-common \
+  initscripts \
   libgcc \
   libstdc++ \
-  zlib \
+  makedevs \
   ncurses \
   netbase \
+  patch \
   perl \
-  perl-module-base \
-  perl-module-carp \
-  perl-module-exporter \
-  perl-module-strict \
-  perl-module-vars \
-  perl-module-warnings \
-  perl-module-warnings-register \
+  pkgconfig \
   procps \
   sed \
+  sudo \
   sysvinit \
   sysvinit-inittab \
   tar \
+  tinylogin \
   udev \
   update-alternatives-dpkg \
   update-rc.d \
@@ -47,10 +44,5 @@ RDEPENDS = "\
   util-linux-losetup \
   util-linux-swaponoff \
   util-linux-umount \
-  pkgconfig \
-  initscripts \
-  makedevs \
-  patch \
-  tinylogin \
-  sudo \
+  zlib \
 "
index a1d8d23..a330834 100644 (file)
@@ -1,26 +1,26 @@
-DESCRIPTION = "Necessary packages for development"
+DESCRIPTION = "Necessary packages for development at runtime environment"
 LICENSE = "MIT"
-PR = "r1"
+PR = "r3"
 ALLOW_EMPTY = "1"
 
 PACKAGES = "${PN}"
 
 RDEPENDS = "\
-  automake \
-  bison \
-  fakeroot \
-  flex \
-  gcc \
-  gcc-symlinks \
-  g++ \
-  g++-symlinks \
+  task-mamona \
   gdb \
-  gettext \
-  groff \
-  libc6-dev \
-  libstdc++-dev \
-  make \
-  cvs \
-  subversion \
-  pkgconfig \
-"
\ No newline at end of file
+  strace \
+  udev-usbserial \
+  usbnet \
+  openssh-sshd \
+  openssh-scp \
+"
+
+pkg_postinst () {
+       echo; echo
+       echo " ########################################################## "
+       echo " # WARNING: Please set your root password before use your # "
+       echo " #          usbnet package. It's required for ssh login.  # "
+       echo " ########################################################## "
+       echo; echo
+}
+
diff --git a/packages/tasks/task-mamona-e.bb b/packages/tasks/task-mamona-e.bb
deleted file mode 100644 (file)
index cc8af8b..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-DESCRIPTION = "Necessary packages for Enlightenment on Mamona"
-LICENSE = "MIT"
-PR = "r2"
-ALLOW_EMPTY = "1"
-
-PACKAGES = "${PN}"
-
-RDEPENDS = "\
-eet \
-embryo \
-imlib2 \
-edb \
-evas \
-libevas-engine-software-x11 \
-libevas-engine-software-16 \
-libevas-engine-software-16-x11 \
-libevas-saver-eet \
-libevas-saver-edb \
-libevas-saver-jpeg \
-libevas-saver-tiff \
-libevas-loader-eet \
-libevas-loader-edb \
-libevas-loader-jpeg \
-libevas-loader-tiff \
-ecore \
-efreet \
-edje \
-etk \
-ewl \
-epeg \
-esmart \
-epsilon \
-emotion \
-enhance \
-edbus \
-e-wm \
-"
diff --git a/packages/tasks/task-mamona-extras.bb b/packages/tasks/task-mamona-extras.bb
deleted file mode 100644 (file)
index 7a5e7a6..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-DESCRIPTION = "Task mamona extras: Dummy package to build extra packages to mamona repository"
-LICENSE = "MIT"
-PR = "r1"
-ALLOW_EMPTY = "1"
-
-PACKAGES = "${PN}"
-
-RDEPENDS = "\
-  tinylogin \
-  bluez-utils \
-  bluez-utils-compat \
-  bluez-utils-alsa \
-  bluez-libs \
-  coreutils \
-  cpio \
-  dbus \
-  diffstat \
-  dnsmasq \
-  dosfstools \
-  e2fsprogs \
-  expat \
-  findutils \
-  fontconfig \
-  gconf \
-  gnome-common \
-  gtk+-doc \
-  glib-2.0 \
-  ifupdown \
-  initscripts \
-  intltool \
-  iptables \
-  libelf \
-  libfontenc \
-  libmatchbox \
-  liboil \
-  libpng \
-  libtool \
-  libusb \
-  libxau \
-  libxcursor \
-  libxdmcp \
-  libxext \
-  libxfixes \
-  libxfont \
-  libxi \
-  libxkbfile \
-  libxml2 \
-  libxpm \
-  libxrandr \
-  libxrender \
-  libxslt \
-  libxt \
-  libxtst \
-  libxv \
-  lsof \
-  makedev \
-  mime-support \
-  module-init-tools \
-  ncurses \
-  net-tools \
-  netbase \
-  osso-af-utils \
-  osso-core-config \
-  osso-esd \
-  osso-sounds \
-  portmap \
-  ppp \
-  procps \
-  samba \
-  sbrsh \
-  sdk-default-icons \
-  sdk-default-theme \
-  sdk-default-theme-config \
-  sgml-common \
-  shared-mime-info \
-  slang \
-  sqlite \
-  sqlite3 \
-  sudo \
-  sysvinit \
-  telepathy-gabble \
-  libtelepathy \
-  telepathy-glib \
-  telepathy-mission-control \
-  tslib \
-  ttf-bitstream-vera \
-  udev \
-  util-linux \
-  wireless-tools \
-  xkbd \
-  xtrans-dev \
-  gnome-vfs \
-  groff \
-  gstreamer \
-  gtk-engines-dev \
-  gtk+ \
-  libart-lgpl \
-  libdbi \
-  libosso \
-  libosso-gsf \
-  matchbox-wm \
-  nfs-utils \
-  osso-af-settings-dev \
-  osso-af-startup \
-  osso-af-utils \
-  osso-core-config \
-  osso-dsp-headers-dev \
-  osso-esd \
-  python \
-  python-ao \
-  python-cheetah \
-  python-constraint \
-  python-pycrypto \
-  python-dbus \
-  python-dialog \
-  python-fnorb \
-  python-fpconst \
-  python-gmpy \
-  python-gnosis \
-  python-hmm \
-  python-imaging \
-  python-imdbpy \
-  python-inotify \
-  python-irclib \
-  python-itools \
-  python-libgmail \
-  python-libgmail \
-  python-logilab-common \
-  python-lxml \
-  python-mad \
-  python-numarray \
-  python-numeric \
-  python-ogg \
-  python-pexpect \
-  python-pybluez \
-  python-pycairo \
-  python-pychecker \
-  python-pycodes \
-  python-pyephem \
-  python-pyfits \
-  python-pyflakes \
-  python-pygobject \
-  python-pygoogle \
-  python-pygtk \
-  python-pyiw \
-  python-pylinda \
-  python-pylint \
-  python-pymetar \
-  python-pymp3 \
-  python-pyraf \
-  python-pyreverse \
-  python-pyrex \
-  python-pyro \
-  python-pyserial \
-  python-pythondaap \
-  python-pyvisa \
-  python-pyweather \
-  python-pywpa \
-  python-pyzeroconf \
-  python-scons \
-  python-sgmlop \
-  python-snmplib \
-  python-soappy \
-  python-tlslite \
-  python-urwid \
-  python-vmaps \
-  python-vorbis \
-  python-webpy \
-  renderproto-dev \
-  wget \
-  zlib \
-"
-
-#  strace \
diff --git a/packages/tasks/task-mamona-noemu.bb b/packages/tasks/task-mamona-noemu.bb
deleted file mode 100644 (file)
index 7365959..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Noemu packages are i386 packages thar run inside ARM chroot environment"
-LICENSE = "MIT"
-PR = "r1"
-ALLOW_EMPTY = "1"
-
-PACKAGES = "${PN}"
-
-RDEPENDS = "\
-  bash-noemu \
-  binutils-noemu \
-  gcc-noemu \
-"
\ No newline at end of file
diff --git a/packages/tasks/task-mamona-nokia-it.bb b/packages/tasks/task-mamona-nokia-it.bb
deleted file mode 100644 (file)
index 05bc7e7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "Necessary packages for Mamona run on Nokia Internet Tablets"
-LICENSE = "MIT"
-PR = "r0"
-ALLOW_EMPTY = "1"
-
-RDEPENDS = "\
-  task-mamona \
-  xmodmap \
-  xdpyinfo \
-  xtscal \
-  wireless-tools \
-  wpa-supplicant \
-  bluez-utils \
-  bluez-utils-compat \
-  dspgw-utils \
-  libasound-module-ctl-dsp-ctl \
-  libasound-module-pcm-alsa-dsp \
-  alsa-conf-base \
-  alsa-utils-alsamixer \
-  alsa-lib \
-  alsa-utils-alsactl \
-  alsa-state \
-  mamona-sound-n800 \
-  usbnet \
-  openssh-sshd \
-  openssh-scp \
-"
diff --git a/packages/tasks/task-mamona-python.bb b/packages/tasks/task-mamona-python.bb
new file mode 100644 (file)
index 0000000..f17d6e7
--- /dev/null
@@ -0,0 +1,79 @@
+DESCRIPTION = "Task mamona: Python Applicattions"
+LICENSE = "MIT"
+PR = "r0"
+
+PACKAGES = "${PN}"
+
+RDEPENDS = "\
+    python-ao \
+    python-cheetah \
+    python-constraint \
+    python-dbus \
+    python-dialog \
+    python-pycurl \
+    python-fam \
+    python-fnorb \
+    python-formencode \
+    python-fpconst \
+    python-gmpy        \
+    python-gnosis \
+    python-gst \
+    python-hmm \
+    python-imaging \
+    python-imdbpy \
+    python-inotify \
+    python-irclib \
+    python-itools \
+    python-logilab-common \
+    python-libgmail \
+    python-lightmediascanner \
+    python-lxml        \
+    python-mad \
+    python-numarray    \
+    python-numeric \
+    python-ogg \
+    python-pexpect \
+    python-pybluez \
+    python-pycairo \
+    python-pychecker \
+    python-pycodes \
+    python-pyephem \
+    python-pyfits \
+    python-pyflakes \
+    python-pygobject \
+    python-pygoogle \
+    python-pygtk \
+    python-pyid3lib \
+    python-pylinda \
+    python-pylint \
+    python-pyqt        \
+    python-pyraf \
+    python-pyreverse \
+    python-pyrex \
+    python-pyro \
+    python-pyserial \
+    python-pytester \
+    python-pyusb \
+    python-pyvisa \
+    python-pyweather \
+    python-pyxml \
+    python-pyxmlrpc \
+    python-scons \
+    python-setuptools \
+    python-simplejson \
+    python-sip \
+    python-sgmlop \
+    python-snmplib \
+    python-soappy \
+    python-spydi \
+    python-spyro \
+    python-sqlalchemy \
+    python-sqlobject \
+    python-tlslite \
+    python-urwid \
+    python-vmaps \
+    python-vorbis \
+    python-webpy \
+    task-python-efl \
+    twisted \
+"
diff --git a/packages/tasks/task-mamona-sdk-noemu.bb b/packages/tasks/task-mamona-sdk-noemu.bb
new file mode 100644 (file)
index 0000000..0ef65b9
--- /dev/null
@@ -0,0 +1,16 @@
+PR = "r2"
+
+require mamona-sdk.inc
+
+RCONFLICTS = "task-mamona-sdk"
+RREPLACES = "task-mamona-sdk"
+
+RDEPENDS += "\
+  bash-noemu \
+  binutils-noemu \
+  binutils-noemu-symlinks \
+  gcc-noemu \
+  gcc-noemu-symlinks \
+  g++-noemu \
+  g++-noemu-symlinks \
+"
diff --git a/packages/tasks/task-mamona-sdk.bb b/packages/tasks/task-mamona-sdk.bb
new file mode 100644 (file)
index 0000000..6e57865
--- /dev/null
@@ -0,0 +1,16 @@
+PR = "r4"
+
+include mamona-sdk.inc
+
+RCONFLICTS = "task-mamona-sdk-noemu"
+RREPLACES = "task-mamona-sdk-noemu"
+
+RDEPENDS += "\
+  bash \
+  binutils \
+  binutils-symlinks \
+  gcc \
+  gcc-symlinks \
+  g++ \
+  g++-symlinks \
+"
diff --git a/packages/tasks/task-mamona-systemtap.bb b/packages/tasks/task-mamona-systemtap.bb
new file mode 100644 (file)
index 0000000..01664d3
--- /dev/null
@@ -0,0 +1,11 @@
+DESCRIPTION = "Task Mamona: Necessary packages for running a systemtap enabled system"
+PR = "r1"
+ALLOW_EMPTY = "1"
+
+PACKAGES = "${PN}"
+
+RDEPENDS = "\
+    libcap \
+    systemtap \
+    task-mamona-sdk \
+"
diff --git a/packages/tasks/task-mamona-wm.bb b/packages/tasks/task-mamona-wm.bb
new file mode 100644 (file)
index 0000000..55893e0
--- /dev/null
@@ -0,0 +1,17 @@
+DESCRIPTION = "Task mamona: Window Manager"
+LICENSE = "MIT"
+PR = "r2"
+ALLOW_EMPTY = "1"
+
+PACKAGES = "${PN}"
+
+RDEPENDS = "\
+    task-mamona \
+    e-wm \
+    libmamona-im-ecore \
+    libmamona-im-gtk \
+    pango-module-basic-x \
+    pango-module-basic-fc \
+    aterm \
+    midori \
+"
index 67c8ed5..498b67b 100644 (file)
@@ -1,22 +1,31 @@
 DESCRIPTION = "Task mamona: Build and Install Mamona Platform"
 LICENSE = "MIT"
-PR = "r1"
+PR = "r5"
 ALLOW_EMPTY = "1"
 
 PACKAGES = "${PN}"
 
 RDEPENDS = "\
     task-mamona-base \
+    alsa-conf-base \
+    alsa-utils-alsamixer \
+    alsa-lib \
+    alsa-utils-alsactl \
+    alsa-state \
+    alsa-utils-alsamixer \
+    bluez-utils \
+    bluez-utils-compat \
     dbus \
     dbus-glib \
     expat \
     freetype \
     glib-2.0 \
     glibc \
+    glibc-utils \
     hal \
-    hal-info \
     intltool \
     libfontenc \
+    libmamona-im0 \
     libusb \
     libx11 \
     libxau \
@@ -26,11 +35,17 @@ RDEPENDS = "\
     libxkbfile \
     libxrandr \
     libxrender \
+    matchbox-keyboard \
+    netm-cli \
+    networkmanager \
     pointercal \
+    python-core \
     tslib \
     tslib-calibrate \
     udev \
-    update-modules \
+    wireless-tools \
+    wpa-supplicant \
+    wpa-supplicant-passphrase \
     xserver-kdrive-xomap \
     xserver-kdrive-common \
     xserver-nodm-init \
@@ -38,3 +53,18 @@ RDEPENDS = "\
     xinit \
     xsp \
 "
+
+RDEPENDS_append_nokia770 = " \
+    cx3110x-770he \
+    libasound-module-ctl-dsp-ctl \
+    libasound-module-pcm-alsa-dsp \
+    mamona-sound-n770 \
+"
+
+RDEPENDS_append_nokia800 = " \
+    cx3110x-chinooke \
+    libasound-module-ctl-dsp-ctl \
+    libasound-module-pcm-alsa-dsp \
+    mamona-sound-n800 \
+"
+
diff --git a/packages/u-boot/u-boot-mkimage-native-1.3.2/fix-arm920t-eabi.patch b/packages/u-boot/u-boot-mkimage-native-1.3.2/fix-arm920t-eabi.patch
new file mode 100644 (file)
index 0000000..69cb758
--- /dev/null
@@ -0,0 +1,22 @@
+---
+ cpu/arm920t/config.mk |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- u-boot-1.3.2.orig/cpu/arm920t/config.mk
++++ u-boot-1.3.2/cpu/arm920t/config.mk
+@@ -22,13 +22,13 @@
+ #
+ PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
+       -msoft-float
+-PLATFORM_CPPFLAGS += -march=armv4
++#PLATFORM_CPPFLAGS += -march=armv4
+ # =========================================================================
+ #
+ # Supply options according to compiler version
+ #
+ # =========================================================================
+-PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
++PLATFORM_CPPFLAGS +=$(call cc-option)
+ PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
diff --git a/packages/u-boot/u-boot-mkimage-native_1.3.2.bb b/packages/u-boot/u-boot-mkimage-native_1.3.2.bb
new file mode 100644 (file)
index 0000000..38dd700
--- /dev/null
@@ -0,0 +1,22 @@
+DESCRIPTION = "U-boot bootloader mkimage tool"
+LICENSE = "GPL"
+SECTION = "bootloader"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
+           file://fix-arm920t-eabi.patch;patch=1"
+
+S = "${WORKDIR}/u-boot-${PV}"
+
+inherit native
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+
+do_compile () {
+       oe_runmake smdk2410_config
+        oe_runmake tools
+}
+
+do_stage () {
+        install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+        ln -sf ${STAGING_BINDIR_NATIVE}/uboot-mkimage ${STAGING_BINDIR_NATIVE}/mkimage
+}