diff options
Diffstat (limited to 'packages')
240 files changed, 19255 insertions, 964 deletions
diff --git a/packages/apmd/apmd-3.2.2/90-wifi-off b/packages/apmd/apmd-3.2.2/90-wifi-off new file mode 100644 index 0000000000..c54936c4be --- /dev/null +++ b/packages/apmd/apmd-3.2.2/90-wifi-off @@ -0,0 +1,12 @@ +#!/bin/sh +#Author: Rolf Leggewie +# +# turn off wifi cards before suspend so they are fully reloaded upon resume + +wifislot = `pccardctl ls|egrep '(hostap|orinoco)'|cut -f 2 -d " "` +if test $wifislot +then + for slot in $wifislot; do + pccardctl eject $wifislot + done +fi diff --git a/packages/apmd/apmd_3.2.2.bb b/packages/apmd/apmd_3.2.2.bb index c3fce375d3..e9f5c0cbef 100644 --- a/packages/apmd/apmd_3.2.2.bb +++ b/packages/apmd/apmd_3.2.2.bb @@ -3,7 +3,7 @@ SECTION = "base" PRIORITY = "required" DEPENDS = "libtool-cross" LICENSE = "GPL" -PR = "r8" +PR = "r9" SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.orig.tar.gz \ file://debian.patch;patch=1 \ @@ -12,6 +12,7 @@ SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.orig.tar.gz \ file://unlinux.patch;patch=1 \ file://init \ file://default \ + file://90-wifi-off \ file://apmd_proxy \ file://apmd_proxy.conf" @@ -49,6 +50,7 @@ do_install() { install -m 4755 ${S}/.libs/apm ${D}${bindir}/apm install -m 0755 ${S}/.libs/apmd ${D}${sbindir}/apmd + install -m 0755 ${WORKDIR}/90-wifi-off ${D}${sysconfdir}/apm/suspend.d install -m 0755 ${WORKDIR}/apmd_proxy ${D}${sysconfdir}/apm/ install -m 0644 ${WORKDIR}/apmd_proxy.conf ${D}${datadir}/apmd/ install -m 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/apmd diff --git a/packages/avetanabt/avetanabt_20060413.bb b/packages/avetanabt/avetanabt_20060413.bb index 54e3d845bb..5b408e6a71 100644 --- a/packages/avetanabt/avetanabt_20060413.bb +++ b/packages/avetanabt/avetanabt_20060413.bb @@ -1,6 +1,6 @@ DESCRIPTION = "avetanaBT: Bluetooth API implementation for Java (JSR-82)" SECTION = "devel" -DEPENDS = "findutils-native jikes-native kaffeh-native fastjar-native bluez-libs classpath" +DEPENDS = "findutils-native virtual/javac-native kaffeh-native fastjar-native bluez-libs classpath" LICENSE = "GPL" HOMEPAGE = "http://sourceforge.net/projects/avetanabt/" @@ -22,9 +22,8 @@ do_compile() { rm -fr build/* # generate classes - # javac -> jikes ${STAGING_BINDIR_NATIVE}/find {de,javax,com} -iname *.java > file.list - ${STAGING_BINDIR_NATIVE}/jikes -verbose --bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list + ${STAGING_BINDIR_NATIVE}/javac -verbose -bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list # create own version.xml (add version information available at runtime) head -n 4 version.xml >> build/version.xml diff --git a/packages/avetanabt/avetanabt_cvs.bb b/packages/avetanabt/avetanabt_cvs.bb index a8f795989b..08fe2e9b82 100644 --- a/packages/avetanabt/avetanabt_cvs.bb +++ b/packages/avetanabt/avetanabt_cvs.bb @@ -1,6 +1,6 @@ DESCRIPTION = "avetanaBT: Bluetooth API implementation for Java (JSR-82)" SECTION = "devel" -DEPENDS = "findutils-native jikes-native kaffeh-native fastjar-native bluez-libs classpath" +DEPENDS = "findutils-native virtual/javac-native kaffeh-native fastjar-native bluez-libs classpath" LICENSE = "GPL" HOMEPAGE = "http://sourceforge.net/projects/avetanabt/" @@ -25,9 +25,8 @@ do_compile() { rm -fr build/* # generate classes - # javac -> jikes ${STAGING_BINDIR_NATIVE}/find {de,javax,com} -iname *.java > file.list - ${STAGING_BINDIR_NATIVE}/jikes -verbose --bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list + ${STAGING_BINDIR_NATIVE}/javac -verbose -bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list # create own version.xml (add version information available at runtime) head -n 4 version.xml >> build/version.xml diff --git a/packages/jamvm/jamvm-1.3.0/.mtn2git_empty b/packages/base-files/base-files/openprotium/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/jamvm/jamvm-1.3.0/.mtn2git_empty +++ b/packages/base-files/base-files/openprotium/.mtn2git_empty diff --git a/packages/base-files/base-files/openprotium/fstab b/packages/base-files/base-files/openprotium/fstab new file mode 100644 index 0000000000..96b0e2adb8 --- /dev/null +++ b/packages/base-files/base-files/openprotium/fstab @@ -0,0 +1,11 @@ +rootfs / auto defaults 1 1 +proc /proc proc defaults 0 0 +devpts /dev/pts devpts mode=0620,gid=5 0 0 +usbfs /proc/bus/usb usbfs defaults 0 0 +#tmpfs /var/volatile tmpfs defaults 0 0 +tmpfs /dev/shm tmpfs mode=0777 0 0 +#tmpfs /media/ram tmpfs defaults 0 0 + +# uncomment this if your device has a SD/MMC/Transflash slot +#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0 + diff --git a/packages/cacao/cacao-cldc.inc b/packages/cacao/cacao-cldc.inc new file mode 100644 index 0000000000..86df369a32 --- /dev/null +++ b/packages/cacao/cacao-cldc.inc @@ -0,0 +1,64 @@ +DESCRIPTION = "Cacao-cldc is a Java Virtual Machine, which uses MIDPath CLDC as default Java core library" +HOMEPAGE = "http://www.cacaojvm.org/" +LICENSE = "GPL" +PRIORITY = "optional" +SECTION = "interpreters" + +DEPENDS = "zlib libtool classpath midpath-cldc cacaoh-cldc-native virtual/javac-native" + +# Avoid version number here, otherwise dpkg will expect a package name +# and cannot be satisfied with a package that provides classpath. +RDEPENDS = "midpath-cldc" + +PROVIDES = "cacao-cldc virtual/java-cldc" +RPROVIDES_cacao-cldc = "java-cldc-runtime" + +inherit autotools update-alternatives + +EXTRA_OECONF = "\ + ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \ + --enable-debug \ + --enable-jni \ + --disable-libjvm \ + --enable-java=cldc1.1 \ + --with-classpath=cldc1.1 \ + --with-classpath-classes=${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar \ + --with-target-classpath-classes=${datadir}/midpath-cldc/midpath-cldc1.1.jar \ + --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-cldc-${PV} \ + --with-classpath-libdir=${STAGING_LIBDIR}/classpath \ + --with-classpath-includedir=${STAGING_INCDIR}/classpath \ + --with-vm-zip=${datadir}/cacao-cldc/vm.zip \ + --libdir=${libdir}/cacao-cldc \ + --program-suffix=-cldc \ + " + +S = "${WORKDIR}/cacao-${PV}" + +PACKAGES = "${PN} ${PN}-doc ${PN}-dbg" + +FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}" +FILES_${PN}-doc = "${datadir}/man" +FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*" + +ALTERNATIVE_NAME = "java-cldc" +ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}" +ALTERNATIVE_PATH = "${bindir}/cacao-cldc" +ALTERNATIVE_PRIORITY = "10" + +do_configure_prepend() { + # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory + # configured in OE. + if [ -e src/vm/properties.c ]; then + sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c + fi + + if [ -e src/vm/properties.c ]; then + sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c + fi +} + +do_configure_append() { + # Fix the executable name in the wrapper script. + sed -i -e "s|exec cacao|exec cacao-cldc|" src/scripts/java.in +} + diff --git a/packages/cacao/cacao-cldc_0.98.bb b/packages/cacao/cacao-cldc_0.98.bb index 0f6af678f5..f5a48c40a9 100644 --- a/packages/cacao/cacao-cldc_0.98.bb +++ b/packages/cacao/cacao-cldc_0.98.bb @@ -1,35 +1,17 @@ +# Compatible with GNU Classpath 0.95 only! -require cacao.inc +require cacao-cldc.inc -SRC_URI +="file://midpath.patch;patch=1 \ - file://offsets_make.patch;patch=1 \ - file://classpath_var.patch;patch=1 \ - file://libmath.patch;patch=1 \ - file://arm_mmap.patch;patch=1 \ - " -SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1" - -DEPENDS = "cacaoh-cldc-native ecj-native classpath-minimal-native virtual/cldc-api-1.1 libtool zlib" -RDEPENDS = "virtual/cldc-api-1.1 libltdl" -RPROVIDES = "virtual/java" +PR = "r1" -EXTRA_OECONF += "--with-classpath-libdir=${STAGING_DATADIR}/classpath-minimal \ - --with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \ - --enable-jni \ - --enable-java=cldc1.1 \ - --with-classpath=cldc1.1 \ - --with-classpath-classes=${STAGING_DATADIR}/java/cldc1.1.jar \ - --with-target-classpath-classes=${datadir}/java/cldc1.1.jar \ - --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh \ - --disable-libjvm \ - " +SRC_URI += "\ + http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346 \ + file://midpath.patch;patch=1 \ + file://offsets_make.patch;patch=1 \ + file://classpath_var.patch;patch=1 \ + file://libmath.patch;patch=1 \ + file://arm_mmap.patch;patch=1 \ + " -PACKAGES = "${PN} ${PN}-doc ${PN}-dbg" - -FILES_${PN} = "${bindir}/cacao" -FILES_${PN}-doc = "${datadir}/man" -FILES_${PN}-dbg = "${bindir}/.debug" +SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1" -ALTERNATIVE_NAME = "java" -ALTERNATIVE_PATH = "${bindir}/cacao" -ALTERNATIVE_PRIORITY = "10" diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc index 9315babfb9..cc107abf27 100644 --- a/packages/cacao/cacao.inc +++ b/packages/cacao/cacao.inc @@ -1,16 +1,52 @@ -DESCRIPTION = "cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library" +DESCRIPTION = "Cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library" HOMEPAGE = "http://www.cacaojvm.org/" LICENSE = "GPL" PRIORITY = "optional" SECTION = "interpreters" -PR = "r1" -inherit autotools +DEPENDS = "zlib libtool classpath cacaoh-native virtual/javac-native" -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-0.98/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346" +# Avoid version number here, otherwise dpkg will expect a package name +# and cannot be satisfied with a package that provides classpath. +RDEPENDS = "classpath" -S = "${WORKDIR}/cacao-${PV}" +PROVIDES = "cacao virtual/java" +RPROVIDES_cacao = "java2-runtime" + +inherit autotools update-alternatives + +EXTRA_OECONF = "\ + ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \ + --enable-debug \ + --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-${PV} \ + --with-classpath-libdir=${STAGING_LIBDIR}/classpath \ + --with-classpath-includedir=${STAGING_INCDIR}/classpath \ + --with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \ + --with-target-classpath-classes=${datadir}/classpath/glibj.zip \ + --with-vm-zip=${datadir}/cacao/vm.zip \ + --with-classpath-libdir=${libdir} \ + " + +PACKAGES = "${PN} ${PN}-doc ${PN}-dbg" + +FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}" +FILES_${PN}-doc = "${datadir}/man" +FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*" + +ALTERNATIVE_NAME = "java" +ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}" +ALTERNATIVE_PATH = "${bindir}/cacao" +ALTERNATIVE_PRIORITY = "10" + +do_configure_prepend() { + # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory + # configured in OE. + if [ -e src/vm/properties.c ]; then + sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c + fi + + if [ -e src/vm/properties.c ]; then + sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c + fi +} -EXTRA_OECONF = "--disable-debug \ - ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \ - " diff --git a/packages/cacao/cacao_0.98+hg20071001.bb b/packages/cacao/cacao_0.98+hg20071001.bb new file mode 100644 index 0000000000..38fcb37b82 --- /dev/null +++ b/packages/cacao/cacao_0.98+hg20071001.bb @@ -0,0 +1,16 @@ +require cacao.inc + +PR = "r5" + +SRC_URI = "\ + http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518 \ + file://cacao-0.98+svn-libdir.diff;patch=1 \ + file://cacao-0.98+svn-classpath_var.patch;patch=1 \ + file://cacao-0.98+hg-arm-cacheflush-workaround.patch;patch=1 \ + file://cacao-0.98+hg-attachthread.patch;patch=1 \ + " + +EXTRA_OECONF += "\ + --enable-annotations \ + " + diff --git a/packages/cacao/cacaoh-cldc-native_0.98.bb b/packages/cacao/cacaoh-cldc-native_0.98.bb index 7ea7cad5dd..e2c92cc328 100644 --- a/packages/cacao/cacaoh-cldc-native_0.98.bb +++ b/packages/cacao/cacaoh-cldc-native_0.98.bb @@ -1,16 +1,19 @@ +require cacaoh-native.inc -require cacao.inc +DEPENDS += "midpath-cldc-native" -DEPENDS = "ecj-native classpath-minimal-native virtual/cldc-api-1.1-native libtool-native zlib-native" +SRC_URI = "\ + http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346 \ + " -inherit native - -EXTRA_OECONF += "--with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \ - --enable-jni \ - --enable-java=cldc1.1 \ - --with-classpath=cldc1.1 \ - --with-classpath-classes=${STAGING_DATADIR}/java/cldc1.1.jar \ - " +EXTRA_OECONF += "\ + --with-classpath-includedir=${STAGING_INCDIR}/classpath \ + --enable-jni \ + --enable-java=cldc1.1 \ + --with-classpath=cldc1.1 \ + --with-classpath-classes=${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar \ +" + do_stage() { - install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/ + install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/cacaoh-cldc-${PV} } diff --git a/packages/cacao/cacaoh-native.inc b/packages/cacao/cacaoh-native.inc new file mode 100644 index 0000000000..1f81672e7f --- /dev/null +++ b/packages/cacao/cacaoh-native.inc @@ -0,0 +1,28 @@ +DESCRIPTION = "Header generator for Cacao JVM - Needed for cross-compilation builds" +HOMEPAGE = "http://www.cacaojvm.org/" +LICENSE = "GPL" + +DEPENDS = "libtool-native zlib-native virtual/javac-native classpath-native" + +S = "${WORKDIR}/cacao-${PV}" + +PR = "r1" + +inherit autotools +inherit native + +EXTRA_OECONF = " \ + --with-classpath-includedir=${STAGING_INCDIR}/classpath \ + --with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \ + " + +do_compile() { + # Compile the header generator only (and what is needed for it). + oe_runmake -C src/toolbox libtoolbox.la + oe_runmake -C src/vmcore libvmcore.la + oe_runmake -C src/cacaoh cacaoh +} + +do_stage() { + install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/cacaoh-${PV} +} diff --git a/packages/cacao/cacaoh-native_0.98+hg20071001.bb b/packages/cacao/cacaoh-native_0.98+hg20071001.bb new file mode 100644 index 0000000000..cb552df827 --- /dev/null +++ b/packages/cacao/cacaoh-native_0.98+hg20071001.bb @@ -0,0 +1,5 @@ +require cacaoh-native.inc + +SRC_URI = "http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518" + + diff --git a/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch new file mode 100644 index 0000000000..813cb683f6 --- /dev/null +++ b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch @@ -0,0 +1,50 @@ +Index: cacao-0.98+hg7750/src/vm/jit/arm/asmpart.S +=================================================================== +--- cacao-0.98+hg7750.orig/src/vm/jit/arm/asmpart.S 2007-11-28 10:14:51.000000000 +0100 ++++ cacao-0.98+hg7750/src/vm/jit/arm/asmpart.S 2007-11-28 10:15:31.000000000 +0100 +@@ -302,35 +302,21 @@ + * * + *******************************************************************************/ + +-.equ sys_cacheflush,__ARM_NR_cacheflush /* syscall number for cache flushing */ +- ++.equ sys_cacheflush, 0x9f0002 + asm_cacheflush: +- add a1, a0, a1 +- mov a2, #0 +- +-#if defined(__ARM_EABI__) +- /* According to EABI, the syscall number should be passed via R7, +- see "http://wiki.debian.org/ArmEabiPort" for additional details. */ +- +- stmfd sp!, {r7} +- mov r7, #0x0f0000 +- add r7, r7, #0x000002 +-#endif ++ add a1, a0, a1 ++ mov a2, #0 + + #if 0 +- /* TWISTI: required on iyonix, maybe a linux-2.4 bug */ +- mov a0, #0x0 +- mov a1, #0xff000000 ++ /* TWISTI: required on iyonix, maybe a linux-2.4 bug */ ++ /* TODO: repeair this! */ ++ /* cacheflush is messed up beyond all repair! */ ++ mov a0, #0x0 ++ mov a1, #0xff000000 + #endif + +- swi sys_cacheflush +- +-#if defined(__ARM_EABI__) +- ldmfd sp!, {r7} +-#endif +- +- mov pc, lr +- ++ swi #sys_cacheflush ++ mov pc, lr + + /* disable exec-stacks ********************************************************/ + diff --git a/packages/cacao/files/cacao-0.98+hg-attachthread.patch b/packages/cacao/files/cacao-0.98+hg-attachthread.patch new file mode 100644 index 0000000000..b3dfabc625 --- /dev/null +++ b/packages/cacao/files/cacao-0.98+hg-attachthread.patch @@ -0,0 +1,12 @@ +diff -r d8fe2c3ba284 src/threads/native/threads.c +--- a/src/threads/native/threads.c Sun Dec 30 17:43:35 2007 +0100 ++++ b/src/threads/native/threads.c Wed Jan 02 16:41:57 2008 +0100 +@@ -1432,6 +1432,8 @@ bool threads_attach_current_thread(JavaV + + threads_thread_set_object(thread, (java_handle_t *) t); + ++ threads_set_current_threadobject(thread); ++ + /* thread is completely initialized */ + + threads_thread_state_runnable(thread); diff --git a/packages/cacao/files/cacao-0.98+svn-classpath_var.patch b/packages/cacao/files/cacao-0.98+svn-classpath_var.patch new file mode 100644 index 0000000000..255281d386 --- /dev/null +++ b/packages/cacao/files/cacao-0.98+svn-classpath_var.patch @@ -0,0 +1,56 @@ +Index: cacao-trunk/src/vm/properties.c +=================================================================== +--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:28:53.000000000 +0200 ++++ cacao-trunk/src/vm/properties.c 2007-09-03 00:36:14.000000000 +0200 +@@ -294,14 +294,14 @@ + len = + strlen(CACAO_VM_ZIP) + + strlen(":") + +- strlen(CLASSPATH_CLASSES) + ++ strlen(TARGET_CLASSPATH_CLASSES) + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcpy(boot_class_path, CACAO_VM_ZIP); + strcat(boot_class_path, ":"); +- strcat(boot_class_path, CLASSPATH_CLASSES); ++ strcat(boot_class_path, TARGET_CLASSPATH_CLASSES); + + # elif defined(WITH_CLASSPATH_SUN) + +Index: cacao-trunk/configure.ac +=================================================================== +--- cacao-trunk.orig/configure.ac 2007-08-31 13:22:03.000000000 +0200 ++++ cacao-trunk/configure.ac 2007-08-31 13:30:44.000000000 +0200 +@@ -851,6 +851,7 @@ + AC_CHECK_WITH_CLASSPATH + AC_CHECK_WITH_CLASSPATH_PREFIX + AC_CHECK_WITH_CLASSPATH_CLASSES ++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES + AC_CHECK_WITH_CLASSPATH_LIBDIR + AC_CHECK_WITH_CLASSPATH_INCLUDEDIR + +Index: cacao-trunk/m4/classpath.m4 +=================================================================== +--- cacao-trunk.orig/m4/classpath.m4 2007-08-31 13:22:21.000000000 +0200 ++++ cacao-trunk/m4/classpath.m4 2007-08-31 13:30:55.000000000 +0200 +@@ -98,6 +98,18 @@ + AC_SUBST(CLASSPATH_CLASSES) + ]) + ++dnl where are Java core library classes installed on the target ++ ++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[ ++AC_MSG_CHECKING(where Java core library classes are installed on the target) ++AC_ARG_WITH([target-classpath-classes], ++ [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])], ++ [TARGET_CLASSPATH_CLASSES=${withval}], ++ [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip]) ++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES}) ++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target]) ++AC_SUBST(TARGET_CLASSPATH_CLASSES) ++]) + + dnl where are Java core library native libraries installed + diff --git a/packages/cacao/files/cacao-0.98+svn-libdir.diff b/packages/cacao/files/cacao-0.98+svn-libdir.diff new file mode 100644 index 0000000000..f5cf9ba5a1 --- /dev/null +++ b/packages/cacao/files/cacao-0.98+svn-libdir.diff @@ -0,0 +1,30 @@ +Index: cacao-trunk/src/vm/properties.c +=================================================================== +--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:20:41.000000000 +0200 ++++ cacao-trunk/src/vm/properties.c 2007-09-04 14:54:19.000000000 +0200 +@@ -210,15 +210,22 @@ + + # if defined(WITH_CLASSPATH_GNU) + +- boot_library_path = CLASSPATH_LIBDIR"/classpath"; ++ boot_library_path = CLASSPATH_LIBDIR"/classpath:OE_LIBDIR_JNI"; + + # elif defined(WITH_CLASSPATH_SUN) + +- boot_library_path = CLASSPATH_LIBDIR; ++ boot_library_path = CLASSPATH_LIBDIR":OE_LIBDIR_JNI"; + + # elif defined(WITH_CLASSPATH_CLDC1_1) + +- /* No boot_library_path required. */ ++ /* No boot_library_path required. ++ Well, don't be that strict on Debian-like ++ environments. Setting this to /usr/lib/jni ++ makes it unneccessary to fumble with ++ LD_LIBRARY_PATH to get things like MIDPath ++ running. ++ */ ++ boot_library_path = "OE_LIBDIR_JNI"; + + # else + # error unknown classpath configuration diff --git a/packages/classpath/classpath-minimal_0.96.1.bb b/packages/classpath/classpath-minimal_0.96.1.bb new file mode 100644 index 0000000000..0597274915 --- /dev/null +++ b/packages/classpath/classpath-minimal_0.96.1.bb @@ -0,0 +1,17 @@ +require classpath.inc + +PR = "r3" + +SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0" + +PROVIDES = "${PN} classpath" + +EXTRA_OECONF += "\ + --enable-local-sockets \ + --disable-alsa \ + --disable-gconf-peer \ + --disable-gtk-peer \ + --disable-plugin \ + --disable-dssi \ + --disable-examples \ + " diff --git a/packages/classpath/classpath.inc b/packages/classpath/classpath.inc index d9498c99d5..97c081af89 100644 --- a/packages/classpath/classpath.inc +++ b/packages/classpath/classpath.inc @@ -3,28 +3,62 @@ HOMEPAGE = "http://www.gnu.org/software/classpath/" SECTION = "libs" PRIORITY = "optional" LICENSE = "Classpath" -PROVIDES = "classpath" -RPROVIDES = "classpath" +PBN = "classpath" -SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \ - file://gconf_version.patch;patch=1 \ - file://fix-endian-arm-floats.patch;patch=1" +DEPENDS = "virtual/javac-native fastjar-native zip-native" +RPROVIDES = "" + +RDEPENDS_${PN} = "${PBN}-common (>= ${PV})" + +RPROVIDES_${PN} = "${PBN}" +RPROVIDES_${PN}-gtk = "${PBN}-awt" + +SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz" + +S = "${WORKDIR}/${PBN}-${PV}" + +EXTRA_OECONF = "\ + --with-glibj \ + --with-ecj=javac \ + --with-fastjar=fastjar \ + --includedir=${includedir}/classpath \ + --with-vm=java \ + " inherit autotools do_stage() { install -d ${STAGING_INCDIR}/classpath - install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/ + install -m 0644 include/jni* ${STAGING_INCDIR}/classpath + install -m 0644 include/jni_md.h ${STAGING_INCDIR}/classpath/ + + install -d ${STAGING_DATADIR}/classpath + install -m 0644 lib/glibj.zip ${STAGING_DATADIR}/classpath } do_install() { autotools_do_install - mv ${D}${libdir}/security ${D}${libdir}/${PN} + mv ${D}${libdir}/security ${D}${libdir}/${PBN} } -PACKAGES =+ "classpath-common classpath-examples classpath-tools" -FILES_classpath-common += "${datadir}/classpath/glibj.zip" -FILES_classpath-examples += "${datadir}/classpath/examples" -FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools" -FILES_classpath-dev += "${libdir}/*.so" -FILES_classpath-dbg += "${libdir}/classpath/.debug" +PACKAGES =+ "${PBN}-common ${PN}-examples \ + ${PN}-tools ${PN}-tools-doc \ + ${PN}-gtk ${PN}-gconf " + +FILES_${PN}-dev += "${libdir}/${PBN}/*.la ${incdir}/${PBN}" + +FILES_${PBN}-common = "${datadir}/${PBN}/glibj.zip ${libdir}/logging.properties ${libdir}/${PBN}/security" +FILES_${PN}-examples = "${datadir}/${PBN}/examples" + +FILES_${PN}-tools = "${datadir}/${PBN}/tools.zip ${bindir}" +FILES_${PN}-tools-doc = "${mandir}" + +FILES_${PN}-dbg += "${libdir}/${PBN}/.debug" +FILES_${PN}-doc = "${infodir}" + +# gcjwebplugin - not built yet +#FILES_${PN}-gcjwebplugin = "${libdir}/${PBN}/libgcjwebplugin.so" +FILES_${PN}-gtk = "${libdir}/${PBN}/libgtkpeer.so ${libdir}/${PBN}/libjawt.so" +FILES_${PN}-gconf = "${libdir}/${PBN}/libgconfpeer.so" +FILES_${PN} = "${libdir}/${PBN}/lib*so*" + diff --git a/packages/classpath/classpath_0.95.bb b/packages/classpath/classpath_0.95.bb new file mode 100644 index 0000000000..6b167a2d47 --- /dev/null +++ b/packages/classpath/classpath_0.95.bb @@ -0,0 +1,20 @@ +require classpath.inc + +SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0" + +PR = "r2" + +DEPENDS += "gtk+ gconf libxtst" + +EXTRA_OECONF += "\ + --disable-alsa \ + --disable-dssi \ + --disable-qt4-peer \ + --disable-plugin \ + --enable-gconf-peer \ + --enable-gtk-peer \ + --enable-local-sockets \ + --with-vm=java \ + " + + diff --git a/packages/classpath/classpath_0.96.1.bb b/packages/classpath/classpath_0.96.1.bb new file mode 100644 index 0000000000..6b167a2d47 --- /dev/null +++ b/packages/classpath/classpath_0.96.1.bb @@ -0,0 +1,20 @@ +require classpath.inc + +SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0" + +PR = "r2" + +DEPENDS += "gtk+ gconf libxtst" + +EXTRA_OECONF += "\ + --disable-alsa \ + --disable-dssi \ + --disable-qt4-peer \ + --disable-plugin \ + --enable-gconf-peer \ + --enable-gtk-peer \ + --enable-local-sockets \ + --with-vm=java \ + " + + diff --git a/packages/dtnrg/dtn_2.5.0.bb b/packages/dtnrg/dtn_2.5.0.bb index 0b4043bbc2..5975a29e7c 100644 --- a/packages/dtnrg/dtn_2.5.0.bb +++ b/packages/dtnrg/dtn_2.5.0.bb @@ -4,6 +4,7 @@ SECTION = "libs" DEPENDS = "db openssl python-native xerces-c" LICENSE = "Apache" SRC_URI = "http://www.dtnrg.org/docs/code/dtn_${PV}.tgz" +PR = "r2" inherit autotools @@ -27,7 +28,7 @@ EXTRA_OECONF = "\ --with-openssl=${STAGING_DIR} \ " -def python_dir(d): +def dtn_python_dir(d): import os, bb staging_incdir = bb.data.getVar( "STAGING_INCDIR", d, 1 ) if os.path.exists( "%s/python2.5" % staging_incdir ): return "python2.5" @@ -35,10 +36,14 @@ def python_dir(d): if os.path.exists( "%s/python2.3" % staging_incdir ): return "python2.3" raise "No Python in STAGING_INCDIR. Forgot to build python-native ?" -PYTHON_DIR = "${@python_dir(d)}" +PYTHON_DIR = "${@dtn_python_dir(d)}" -export BUILD_SYS -export HOST_SYS +# use this syntax once everyone has at least bitbake 1.8.9 +#export BUILD_SYS +#export HOST_SYS + +export BUILD_SYS:="${BUILD_SYS}" +export HOST_SYS:="${HOST_SYS}" do_configure_prepend() { for i in aclocal/*.ac oasys/aclocal/*.ac; do @@ -52,9 +57,11 @@ do_install_append() { INCDIR=../.. LIBDIR=.. VERSION=${PV} python setup.py install --prefix=${D}/${prefix} --install-data=${D}/${datadir} } +PACKAGES =+ "${PN}-lib" +FILES_${PN}-lib = "${libdir}/*.so*" PACKAGES += "python-dtn" DESCRIPTION_python-dtn = "Python bindings to the DTN API" -PR_python-dtn = "ml1" +PR_python-dtn = "ml2" FILES_python-dtn = "${libdir}/${PYTHON_DIR}" -RDEPENDS_python-dtn = "python-core" +RDEPENDS_python-dtn = "python-core dtn-lib" FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/.debug" diff --git a/packages/jamvm/jamvm/.mtn2git_empty b/packages/e17/edje-viewer/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/jamvm/jamvm/.mtn2git_empty +++ b/packages/e17/edje-viewer/.mtn2git_empty diff --git a/packages/e17/edje-viewer/no-minimal-size.patch b/packages/e17/edje-viewer/no-minimal-size.patch new file mode 100644 index 0000000000..944447c03f --- /dev/null +++ b/packages/e17/edje-viewer/no-minimal-size.patch @@ -0,0 +1,27 @@ +--- A/src/bin/etk_gui.c 2008-01-13 20:08:45.000000000 +0100 ++++ B/src/bin/etk_gui.c.patched 2008-01-13 20:50:06.000000000 +0100 +@@ -147,21 +147,21 @@ + etk_tree_col_model_add(col2, etk_tree_model_checkbox_new()); + etk_tree_build(ETK_TREE(gui->tree)); + etk_tree_col_sort_set(col2, gui_visibility_col_sort_cb, NULL); +- etk_widget_size_request_set(gui->tree, 300, 0); ++ etk_widget_size_request_set(gui->tree, 0, 0); + etk_signal_connect_by_code(ETK_WIDGET_KEY_DOWN_SIGNAL, + ETK_OBJECT(gui->tree), + ETK_CALLBACK(_gui_tree_key_down_cb), gui); + etk_paned_child1_set(ETK_PANED(paned), gui->tree, ETK_FALSE); + + gui->canvas = etk_canvas_new(); +- etk_widget_size_request_set(gui->canvas, 500, 500); ++ etk_widget_size_request_set(gui->canvas, 50, 50); + etk_object_notification_callback_add(ETK_OBJECT(gui->canvas), "geometry", + canvas_resize_cb, NULL); + etk_paned_child2_set(ETK_PANED(paned), gui->canvas, ETK_TRUE); + + gui->output = etk_tree_new(); + etk_tree_headers_visible_set(ETK_TREE(gui->output), ETK_TRUE); +- col = etk_tree_col_new(ETK_TREE(gui->output), _("Output"), 200, 0.0); ++ col = etk_tree_col_new(ETK_TREE(gui->output), _("Output"), 100, 0.0); + etk_tree_col_model_add(col, etk_tree_model_text_new()); + etk_tree_col_expand_set(col, ETK_TRUE); + etk_tree_build(ETK_TREE(gui->output)); diff --git a/packages/e17/edje-viewer_cvs.bb b/packages/e17/edje-viewer_cvs.bb index 1a15746ca4..88d0df6016 100644 --- a/packages/e17/edje-viewer_cvs.bb +++ b/packages/e17/edje-viewer_cvs.bb @@ -2,11 +2,12 @@ DESCRIPTION = "Edje_Viewer is just that." DEPENDS = "etk" LICENSE = "MIT" PV = "0.0.0+cvs${SRCDATE}" -PR = "r0" +PR = "r3" inherit e -SRC_URI = "${E_CVS};module=e17/apps/edje_viewer" +SRC_URI = "${E_CVS};module=e17/apps/edje_viewer \ + file://no-minimal-size.patch;patch=1" S = "${WORKDIR}/edje_viewer" FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}" diff --git a/packages/e17/enna_svn.bb b/packages/e17/enna_cvs.bb index 49e1caeab0..7f2c6eb632 100644 --- a/packages/e17/enna_svn.bb +++ b/packages/e17/enna_cvs.bb @@ -2,15 +2,14 @@ DESCRIPTION = "Enna is a media center application based on EFL" LICENSE = "GPL" DEPENDS = "curl dbus eet evas edje ecore edbus emotion libmusicbrainz libxml2 taglibc" SECTION = "x11/multimedia" -PV = "0.2.0+svn${SRCDATE}" +PV = "0.2.0+cvs${SRCDATE}" inherit e -SRC_URI = "svn://enna.svn.sourceforge.net/svnroot/enna/trunk;module=enna;proto=http \ +SRC_URI = "${E_CVS};module=misc/enna \ file://locale-is-broken.patch;patch=1" S = "${WORKDIR}/enna" do_configure_prepend() { touch po/Makefile.in.in } - diff --git a/packages/ecj/ecj-native_3.2.2.bb b/packages/ecj/ecj-native_3.2.2.bb deleted file mode 100644 index 8afa2653ca..0000000000 --- a/packages/ecj/ecj-native_3.2.2.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "JDT Core Batch Compiler" -HOMEPAGE = "http://www.eclipse.org/" -PRIORITY = "optional" -SECTION = "devel" -LICENSE = "EPL" -PR = "r0" - -inherit native - -SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.2.2-200702121330/ecj.jar \ - file://ecj.sh" - -do_stage() { - install -d ${STAGING_BINDIR_NATIVE} - install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE} - install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj -} diff --git a/packages/ecj/ecj-native_3.3.bb b/packages/ecj/ecj-native_3.3.bb deleted file mode 100644 index ff2eb5f49e..0000000000 --- a/packages/ecj/ecj-native_3.3.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "JDT Core Batch Compiler" -HOMEPAGE = "http://www.eclipse.org/" -PRIORITY = "optional" -SECTION = "devel" -LICENSE = "EPL" -PR = "r0" - -inherit native - -SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.3-200706251500/ecj.jar \ - file://ecj.sh" - -do_stage() { - install -d ${STAGING_BINDIR_NATIVE} - install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE} - install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj -} diff --git a/packages/ecj/files/ecj.sh b/packages/ecj/files/ecj.sh deleted file mode 100644 index 75aa2c2287..0000000000 --- a/packages/ecj/files/ecj.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -java -Xmx512m -jar $0.jar "$@" diff --git a/packages/efl1/ecore.inc b/packages/efl1/ecore.inc index 28b8152964..eacde2d012 100644 --- a/packages/efl1/ecore.inc +++ b/packages/efl1/ecore.inc @@ -22,6 +22,8 @@ PACKAGES += "\ ${PN}-evas \ ${PN}-fb \ ${PN}-file \ + ${PN}-imf \ + ${PN}-imf-evas \ ${PN}-ipc \ ${PN}-job \ ${PN}-txt \ @@ -36,6 +38,8 @@ FILES_${PN}-sdl = "${libdir}/libecore_sdl.so.*" FILES_${PN}-evas = "${libdir}/libecore_evas.so.*" FILES_${PN}-fb = "${libdir}/libecore_fb.so.*" FILES_${PN}-file = "${libdir}/libecore_file.so.*" +FILES_${PN}-imf = "${libdir}/libecore_imf.so.*" +FILES_${PN}-imf-evas = "${libdir}/libecore_imf_evas.so.*" FILES_${PN}-ipc = "${libdir}/libecore_ipc.so.*" FILES_${PN}-job = "${libdir}/libecore_job.so.*" FILES_${PN}-txt = "${libdir}/libecore_txt.so.*" diff --git a/packages/efl1/ecore_cvs.bb b/packages/efl1/ecore_cvs.bb index e0aa9bf42b..6580957871 100644 --- a/packages/efl1/ecore_cvs.bb +++ b/packages/efl1/ecore_cvs.bb @@ -1,5 +1,5 @@ require ecore.inc -PR = "r0" +PR = "r1" EXTRA_OECONF = "\ --enable-ecore-txt \ diff --git a/packages/efl1/edbus_cvs.bb b/packages/efl1/edbus_cvs.bb index db1547c3d4..755efcb9ec 100644 --- a/packages/efl1/edbus_cvs.bb +++ b/packages/efl1/edbus_cvs.bb @@ -1,12 +1,18 @@ DESCRIPTION = "DBus and HAL convenience wrappers for EFL" DEPENDS = "dbus ecore" LICENSE = "MIT" -PR = "r0" +PR = "r1" inherit efl_library -SRC_URI = "${E_CVS};module=e17/proto/e_dbus" +SRC_URI = "${E_CVS};module=e17/libs/e_dbus" S = "${WORKDIR}/e_dbus" # TODO increase package granularity +PACKAGES =+ "${PN}-enotify ${PN}-edbus ${PN}-enm ${PN}-ehal" +FILES_${PN}-enotify = "${libdir}/libenotify.so.*" +FILES_${PN}-edbus = "${libdir}/libedbus.so.*" +FILES_${PN}-enm = "${libdir}/libenm.so.*" +FILES_${PN}-ehal = "${libdir}/libehal.so.*" + diff --git a/packages/efl1/epdf_cvs.bb b/packages/efl1/epdf_cvs.bb index 7ca33bf9d8..27c475c37d 100644 --- a/packages/efl1/epdf_cvs.bb +++ b/packages/efl1/epdf_cvs.bb @@ -1,11 +1,13 @@ DESCRIPTION = "Epdf is the glue between EFL and libpoppler" LICENSE = "BSD" -DEPENDS = "poppler evas ecore etk ewl" +DEPENDS = "poppler evas ecore etk" PV = "0.1.0+cvs${SRCDATE}" -PR = "r1" +PR = "r2" inherit efl_library +EXTRA_OECONF = "--disable-ewl" + SRC_URI = "${E_CVS};module=e17/proto/${SRCNAME} \ file://fix-plugin-path-check.patch;HACK=1;patch=1" diff --git a/packages/efl1/evas.inc b/packages/efl1/evas.inc index 608c897295..0dc8f2d0e8 100644 --- a/packages/efl1/evas.inc +++ b/packages/efl1/evas.inc @@ -42,6 +42,7 @@ RRECOMMENDS_${PN} = "\ libevas-engine-software-generic \ libevas-engine-software-x11 \ libevas-engine-software-16 \ + libevas-engine-software-16-x11 \ libevas-engine-xrender-x11 \ \ libevas-loader-png \ @@ -49,3 +50,4 @@ RRECOMMENDS_${PN} = "\ libevas-loader-eet \ libevas-loader-svg \ " + diff --git a/packages/efl1/evas_cvs.bb b/packages/efl1/evas_cvs.bb index cf7d4cbc2c..0734967992 100644 --- a/packages/efl1/evas_cvs.bb +++ b/packages/efl1/evas_cvs.bb @@ -1,5 +1,5 @@ require evas.inc -PR = "r0" +PR = "r1" EXTRA_OECONF = "\ --x-includes=${STAGING_INCDIR}/X11 \ diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/.mtn2git_empty b/packages/freesmartphone/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/.mtn2git_empty +++ b/packages/freesmartphone/.mtn2git_empty diff --git a/packages/freesmartphone/gsm0710muxd_svn.bb b/packages/freesmartphone/gsm0710muxd_svn.bb new file mode 100644 index 0000000000..4798863b24 --- /dev/null +++ b/packages/freesmartphone/gsm0710muxd_svn.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "gsm.07.10 muxer userspace daemon" +AUTHOR = "M. Dietrich" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPL" +PV = "0.0+svnr${SRCREV}" + +SRC_URI = "svn://projects.linuxtogo.org/svn/smartphones/trunk/software;module=gsm0710muxd" +S = "${WORKDIR}/gsm0710muxd" + +inherit autotools update-rc.d + +INITSCRIPT_NAME = "gsm0710muxd" +INITSCRIPT_PARAMS = "defaults 35" diff --git a/packages/gcc/gcc-4.2.2/fortran-libs-rpath-to-staging-hack.patch b/packages/gcc/gcc-4.2.2/fortran-libs-rpath-to-staging-hack.patch new file mode 100644 index 0000000000..bf319f8b0a --- /dev/null +++ b/packages/gcc/gcc-4.2.2/fortran-libs-rpath-to-staging-hack.patch @@ -0,0 +1,48 @@ +f951 (fortran) links to MPFR and GMP of our staging area but when executing +the command the libs can not be found. Use rpath like all the other apps in +our staging bin/ directory. + +Patch the configure to avoid the regeneration... + +Index: gcc-4.2.2/configure +=================================================================== +--- gcc-4.2.2.orig/configure 2008-01-15 23:23:41.000000000 +0100 ++++ gcc-4.2.2/configure 2008-01-15 23:25:20.000000000 +0100 +@@ -2278,14 +2278,14 @@ + + + if test "x$with_mpfr" != x; then +- gmplibs="-L$with_mpfr/lib $gmplibs" ++ gmplibs="-Wl,-rpath,$with_mpfr/lib -L$with_mpfr/lib $gmplibs" + gmpinc="-I$with_mpfr/include" + fi + if test "x$with_mpfr_include" != x; then + gmpinc="-I$with_mpfr_include" + fi + if test "x$with_mpfr_lib" != x; then +- gmplibs="-L$with_mpfr_lib $gmplibs" ++ gmplibs="-Wl,-rpath,$with_mpfr_lib -L$with_mpfr_lib $gmplibs" + fi + + # Specify a location for gmp +Index: gcc-4.2.2/configure.in +=================================================================== +--- gcc-4.2.2.orig/configure.in 2008-01-15 23:23:41.000000000 +0100 ++++ gcc-4.2.2/configure.in 2008-01-15 23:24:36.000000000 +0100 +@@ -1066,14 +1066,14 @@ + AC_ARG_WITH(mpfr_lib, [ --with-mpfr-lib=PATH Specify the directory for the installed MPFR library]) + + if test "x$with_mpfr" != x; then +- gmplibs="-L$with_mpfr/lib $gmplibs" ++ gmplibs="-Wl,-rpath,$with_mpfr/lib -L$with_mpfr/lib $gmplibs" + gmpinc="-I$with_mpfr/include" + fi + if test "x$with_mpfr_include" != x; then + gmpinc="-I$with_mpfr_include" + fi + if test "x$with_mpfr_lib" != x; then +- gmplibs="-L$with_mpfr_lib $gmplibs" ++ gmplibs="-Wl,-rpath,$with_mpfr_lib -L$with_mpfr_lib $gmplibs" + fi + + # Specify a location for gmp diff --git a/packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch b/packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch new file mode 100644 index 0000000000..736ac4b6b6 --- /dev/null +++ b/packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch @@ -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/gcc/gcc-cross_4.2.2.bb b/packages/gcc/gcc-cross_4.2.2.bb index ec169072af..fdb6d0e30d 100644 --- a/packages/gcc/gcc-cross_4.2.2.bb +++ b/packages/gcc/gcc-cross_4.2.2.bb @@ -5,7 +5,7 @@ inherit cross FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}" # NOTE: split PR. If the main .oe changes something that affects its *build* # remember to increment this one too. -PR = "r2" +PR = "r3" DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native" PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" @@ -15,6 +15,7 @@ require gcc3-build-cross.inc # cross packaging require gcc-package-cross.inc SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 " +SRC_URI_append = " file://fortran-libs-rpath-to-staging-hack.patch;patch=1 " # Do not build libssp libmudflap and libgomp # We might need them for some beefy targets EXTRA_OECONF += "--disable-libunwind-exceptions --disable-libssp \ diff --git a/packages/gcc/gcc_4.2.2.bb b/packages/gcc/gcc_4.2.2.bb index de3b65ce7f..91f4691208 100644 --- a/packages/gcc/gcc_4.2.2.bb +++ b/packages/gcc/gcc_4.2.2.bb @@ -1,4 +1,4 @@ -PR = "r2" +PR = "r3" DESCRIPTION = "The GNU cc and gcc C compilers." HOMEPAGE = "http://www.gnu.org/software/gcc/" SECTION = "devel" @@ -39,6 +39,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ 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 \ " diff --git a/packages/gpephone/addressbook_svn.bb b/packages/gpephone/addressbook_svn.bb index 663c38c09c..cb913bc663 100644 --- a/packages/gpephone/addressbook_svn.bb +++ b/packages/gpephone/addressbook_svn.bb @@ -3,7 +3,7 @@ DESCRIPTION = "LiPS address book" SECTION = "gpe" PRIORITY = "optional" PR = "r0" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/almmgrd_svn.bb b/packages/gpephone/almmgrd_svn.bb new file mode 100644 index 0000000000..70d02ff018 --- /dev/null +++ b/packages/gpephone/almmgrd_svn.bb @@ -0,0 +1,15 @@ +DESCRIPTION = "Alarm manager daemon" +SECTION = "gpephone" +PRIORITY = "required" +LICENSE = "LiPS" +DEPENDS = "glib-2.0 libiac sqlite3 libcalenabler2 libalmmgr" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +DEFAULT_PREFERENCE = "-1" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = "${WORKDIR}/${PN}" diff --git a/packages/gpephone/calendar2_svn.bb b/packages/gpephone/calendar2_svn.bb new file mode 100644 index 0000000000..a68b8824f3 --- /dev/null +++ b/packages/gpephone/calendar2_svn.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "Calendar application for GPE Phone Edition" +LICENSE = "LiPS" +SECTION = "gpe" +PRIORITY = "optional" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +DEPENDS = "gtk+ libgpewidget libgpephone libgemwidget dbus-glib libcalenabler2 libiac" + +inherit gpephone autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = ${WORKDIR}/${PN} + +FILES_${PN} += "${datadir}/database ${datadir}/res" diff --git a/packages/gpephone/contact_svn.bb b/packages/gpephone/contact_svn.bb index 0b785ac9f0..ef4d2707ab 100644 --- a/packages/gpephone/contact_svn.bb +++ b/packages/gpephone/contact_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpe" PRIORITY = "optional" LICENSE = "LiPS" DEPENDS = "gtk+ libgpephone dbus-glib libabenabler2 librecord2 libgemwidget" -PV = "0.0+svn-${SRCREV}" +PV = "0.0+svnr-${SRCREV}" PR = "r0" inherit gpephone autotools diff --git a/packages/gpephone/dialer_svn.bb b/packages/gpephone/dialer_svn.bb new file mode 100644 index 0000000000..7b1b883652 --- /dev/null +++ b/packages/gpephone/dialer_svn.bb @@ -0,0 +1,20 @@ +DESCRIPTION = "GPE Phone Edition phone dialer" +SECTION = "gpe" +PRIORITY = "optional" +LICENSE = "LiPS" +DEPENDS = "gtk+ libgpephone libgemwidget" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone autotools + +SRC_URI = ${GPEPHONE_SVN} + +EXTRA_OECONF = "--disable-hiker" + +S = "${WORKDIR}/${PN}" + + +FILES_${PN} += "${datadir}" + +DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/firewall_svn.bb b/packages/gpephone/firewall_svn.bb index 77b2122449..b3d7aee848 100644 --- a/packages/gpephone/firewall_svn.bb +++ b/packages/gpephone/firewall_svn.bb @@ -5,8 +5,6 @@ PRIORITY = "optional" PR = "r0" PV = "0.0+svnr-${SRCREV}" -SRCREV_pn-${PN} ?= "1400" - DEFAULT_PREFERENCE = "-1" DEPENDS = "gtk+ libmsgenabler libabenabler libiac libgpewidget libgpephone gconf-dbus" diff --git a/packages/gpephone/gpe-applauncher_svn.bb b/packages/gpephone/gpe-applauncher_svn.bb index 311d2eef60..9360c6f6d3 100644 --- a/packages/gpephone/gpe-applauncher_svn.bb +++ b/packages/gpephone/gpe-applauncher_svn.bb @@ -3,7 +3,7 @@ DESCRIPTION = "A cellphone application launcher." SECTION = "gpe" PRIORITY = "optional" PR = "r1" -PV = "0.11+svn-${SRCREV}" +PV = "0.11+svnr-${SRCREV}" SRC_URI_OVERRIDES_PACKAGE_ARCH = "0" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/libabenabler2_svn.bb b/packages/gpephone/libabenabler2_svn.bb index ea070092a2..004ba3ec46 100644 --- a/packages/gpephone/libabenabler2_svn.bb +++ b/packages/gpephone/libabenabler2_svn.bb @@ -3,15 +3,15 @@ SECTION = "gpe/libs" PRIORITY = "optional" LICENSE = "LGPL" DEPENDS = "glib-2.0 librecord2 gconf sqlite3" -PV = "0.0+svn-${SRCDATE}" +PV = "0.0+svnr-${SRCREV}" PR = "r0" +inherit gpephone pkgconfig autotools + SRC_URI = "${GPEPHONE_SVN}" S = "${WORKDIR}/${PN}" -inherit gpephone pkgconfig autotools - do_stage () { autotools_stage_all } diff --git a/packages/gpephone/libabenabler_svn.bb b/packages/gpephone/libabenabler_svn.bb index f362c853d6..4468c3580e 100644 --- a/packages/gpephone/libabenabler_svn.bb +++ b/packages/gpephone/libabenabler_svn.bb @@ -4,7 +4,7 @@ SECTION = "gpe/libs" PRIORITY = "optional" DEPENDS = "glib-2.0 librecord liblipsevent libim sqlite3" PR = "r0" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/libalmmgr_svn.bb b/packages/gpephone/libalmmgr_svn.bb new file mode 100644 index 0000000000..cbae037109 --- /dev/null +++ b/packages/gpephone/libalmmgr_svn.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "LiPS alarm framework library." +SECTION = "gpe/libs" +PRIORITY = "optional" +LICENSE = "LiPS" +DEPENDS = "glib-2.0 libiac" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = ${WORKDIR}/${PN} + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/libcalenabler2_svn.bb b/packages/gpephone/libcalenabler2_svn.bb index 6144e055de..e3bf129ab1 100644 --- a/packages/gpephone/libcalenabler2_svn.bb +++ b/packages/gpephone/libcalenabler2_svn.bb @@ -2,17 +2,16 @@ DESCRIPTION = "LiPS calendar API." SECTION = "gpe/libs" PRIORITY = "optional" LICENSE = "LiPS" -DEPENDS = "glib-2.0 sqlite3 libical" -PV = "0.0+svn-${SRCREV}" +DEPENDS = "glib-2.0 sqlite3 libical libalmmgr" +PV = "0.0+svnr-${SRCREV}" PR = "r0" -SRC_URI = "${GPEPHONE_SVN}" -S = "${WORKDIR}/${PN}" +inherit gpephone pkgconfig autotools -GPE_TARBALL_SUFFIX = "bz2" +SRC_URI = "${GPEPHONE_SVN}" -inherit gpephone pkgconfig autotools +S = "${WORKDIR}/${PN}" do_stage () { autotools_stage_all diff --git a/packages/gpephone/libgemwidget_svn.bb b/packages/gpephone/libgemwidget_svn.bb new file mode 100644 index 0000000000..f4e2e350d8 --- /dev/null +++ b/packages/gpephone/libgemwidget_svn.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Extended widget library for GPE phone environment." +LICENSE = "LiPS" +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "gtk+ libiac libgpephone gnome-vfs libxdamage libxcomposite libgpewidget" +PV = "1.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = ${WORKDIR}/${PN} + +FILES_${PN} += "${datadir}/gem" + +do_stage () { + autotools_stage_all +} diff --git a/packages/quilt/quilt-0.39/.mtn2git_empty b/packages/gpephone/libiac2/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/quilt/quilt-0.39/.mtn2git_empty +++ b/packages/gpephone/libiac2/.mtn2git_empty diff --git a/packages/gpephone/libiac2/disable-tests.patch b/packages/gpephone/libiac2/disable-tests.patch new file mode 100644 index 0000000000..5345d1cc97 --- /dev/null +++ b/packages/gpephone/libiac2/disable-tests.patch @@ -0,0 +1,25 @@ +--- Makefile.am~ 2008-01-10 17:43:18.000000000 +0100 ++++ Makefile.am 2008-01-10 17:43:18.000000000 +0100 +@@ -1,4 +1,4 @@ +-SUBDIRS = src include test po ++SUBDIRS = src include po + + if BUILD_DAEMON + SUBDIRS += daemon +--- configure.ac~ 2008-01-10 17:50:03.000000000 +0100 ++++ configure.ac 2008-01-10 17:50:03.000000000 +0100 +@@ -40,14 +40,11 @@ + AM_CONDITIONAL(BUILD_DAEMON, + test x$enable_daemon = xyes) + +-AM_PATH_CUNIT +- + AC_CONFIG_FILES([ + Makefile + daemon/Makefile + src/Makefile + include/Makefile +-test/Makefile + po/Makefile.in + libiac2.pc + ]) diff --git a/packages/gpephone/libiac2_svn.bb b/packages/gpephone/libiac2_svn.bb new file mode 100644 index 0000000000..7ae0c7b693 --- /dev/null +++ b/packages/gpephone/libiac2_svn.bb @@ -0,0 +1,20 @@ +DESCRIPTION = "LiPS IPC library." +SECTION = "gpe/libs" +PRIORITY = "optional" +LICENSE = "LiPS" +DEPENDS = "gtk+ gtk-doc dbus-glib" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN} \ + file://disable-tests.patch;patch=1;pnum=0" + +EXTRA_OECONF = "--enable-gui --enable-test=no --with-cuint=no" + +S = ${WORKDIR}/${PN} + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/libiac_svn.bb b/packages/gpephone/libiac_svn.bb new file mode 100644 index 0000000000..0cd1d6487d --- /dev/null +++ b/packages/gpephone/libiac_svn.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "LiPS IPC library." +SECTION = "gpe/libs" +PRIORITY = "optional" +LICENSE = "LiPS" +DEPENDS = "gtk+ gtk-doc" +PV = "1.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = ${WORKDIR}/${PN} + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/libim2/.mtn2git_empty b/packages/gpephone/libim2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/gpephone/libim2/.mtn2git_empty diff --git a/packages/gpephone/libim2/disable-tests.patch b/packages/gpephone/libim2/disable-tests.patch new file mode 100644 index 0000000000..c794abd777 --- /dev/null +++ b/packages/gpephone/libim2/disable-tests.patch @@ -0,0 +1,11 @@ +--- libim2/Makefile.am~ 2008-01-12 01:24:42.000000000 +0100 ++++ libim2/Makefile.am 2008-01-12 01:24:42.000000000 +0100 +@@ -2,7 +2,7 @@ + # have all needed files, that a GNU package needs + AUTOMAKE_OPTIONS = foreign 1.4 + +-SUBDIRS = src include test ++SUBDIRS = src include + + #servicesdir = @DBUS_SERVICES_DIR@ + #services_DATA = improxy.service diff --git a/packages/gpephone/libim2_svn.bb b/packages/gpephone/libim2_svn.bb new file mode 100644 index 0000000000..510877ce3e --- /dev/null +++ b/packages/gpephone/libim2_svn.bb @@ -0,0 +1,22 @@ +LICENSE = "LGPL" +DESCRIPTION = "LiPS instant messenger library." +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "glib-2.0 librecord2 libabenabler2 liblipsevent2 telepathy-glib telepathy-mission-control" +PV = "0.0+svnr-${SRCREV}" +PR = "r1" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN} \ + file://disable-tests.patch;patch=1" + +EXTRA_OECONF = "--enable-test=no" + +S = ${WORKDIR}/libim2 + +FILES_${PN} += " ${datadir}/dbus-1" + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/liblipsevent2_svn.bb b/packages/gpephone/liblipsevent2_svn.bb new file mode 100644 index 0000000000..5d2330c671 --- /dev/null +++ b/packages/gpephone/liblipsevent2_svn.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "LiPS event model library." +LICENSE = "LiPS" +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "glib-2.0" +PV = "0.0+svnr-${SRCREV}" +PR = "r0" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = ${WORKDIR}/${PN} + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/libmsgenabler2_svn.bb b/packages/gpephone/libmsgenabler2_svn.bb new file mode 100644 index 0000000000..4772b0c8e7 --- /dev/null +++ b/packages/gpephone/libmsgenabler2_svn.bb @@ -0,0 +1,21 @@ +LICENSE = "LiPS" +DESCRIPTION = "LiPS message backend library." +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "glib-2.0 dbus-glib librecord2 liblipsevent2 telepathy-mission-control libgsmd-lips" +PV = "0.0+svnr-${SRCREV}" +PR = "r1" + +DEFAULT_PREFERENCE = "-1" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +S = ${WORKDIR}/${PN} + +FILES_${PN} += "$(datadir)/libmsgenabler2" + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/libmsgenabler_1.0.bb b/packages/gpephone/libmsgenabler_1.0.bb index 0522507db0..b8d202a5dd 100644 --- a/packages/gpephone/libmsgenabler_1.0.bb +++ b/packages/gpephone/libmsgenabler_1.0.bb @@ -3,12 +3,14 @@ DESCRIPTION = "LiPS message backend library." SECTION = "gpe/libs" PRIORITY = "optional" DEPENDS = "glib-2.0 dbus-glib librecord sqlite3" -PR = "r0" +PR = "r1" GPE_TARBALL_SUFFIX = "bz2" inherit gpephone pkgconfig autotools +FILES_${PN} += "$(datadir)/libmsgenabler" + do_stage () { autotools_stage_all } diff --git a/packages/gpephone/libmsgenabler_svn.bb b/packages/gpephone/libmsgenabler_svn.bb new file mode 100644 index 0000000000..c8672e143e --- /dev/null +++ b/packages/gpephone/libmsgenabler_svn.bb @@ -0,0 +1,21 @@ +LICENSE = "LiPS" +DESCRIPTION = "LiPS message backend library." +SECTION = "gpe/libs" +PRIORITY = "optional" +DEPENDS = "glib-2.0 dbus-glib librecord sqlite3" +PV = "1.0+svnr-${SRCREV}" +PR = "r0" + +DEFAULT_PREFERENCE = "-1" + +inherit gpephone pkgconfig autotools + +SRC_URI = "${GPEPHONE_SVN}" + +FILES_${PN} += "$(datadir)/libmsgenabler" + +S = "${WORKDIR}/${PN}" + +do_stage () { + autotools_stage_all +} diff --git a/packages/gpephone/librecord2_svn.bb b/packages/gpephone/librecord2_svn.bb index 6580f6566f..378032dabf 100644 --- a/packages/gpephone/librecord2_svn.bb +++ b/packages/gpephone/librecord2_svn.bb @@ -4,7 +4,7 @@ SECTION = "gpe/libs" PRIORITY = "optional" DEPENDS = "glib-2.0 e2fsprogs-libs sqlite3" PR = "r0" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/libsettings_svn.bb b/packages/gpephone/libsettings_svn.bb index e436849d74..74e1190c5a 100644 --- a/packages/gpephone/libsettings_svn.bb +++ b/packages/gpephone/libsettings_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpe/libs" PRIORITY = "required" LICENSE = "LiPS" DEPENDS = "glib-2.0 gconf-dbus" -PV = "0.0+svn-${SRCDATE}" +PV = "0.0+svnr-${SRCREV}" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/machined_svn.bb b/packages/gpephone/machined_svn.bb index 5c96cfa97c..0c5ccfff51 100644 --- a/packages/gpephone/machined_svn.bb +++ b/packages/gpephone/machined_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpephone" PRIORITY = "required" LICENSE = "GPL" DEPENDS = "glib-2.0 dbus-glib gtk+" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" PR = "r0" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/ptim-engine_svn.bb b/packages/gpephone/ptim-engine_svn.bb index 37c99f7dd1..281ee72c26 100644 --- a/packages/gpephone/ptim-engine_svn.bb +++ b/packages/gpephone/ptim-engine_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpephone" PRIORITY = "optional" LICENSE = "LiPS" DEPENDS = "gtk+ ptim-headers" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" PR = "r1" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/ptim-headers_svn.bb b/packages/gpephone/ptim-headers_svn.bb index 304c103505..4384feccbd 100644 --- a/packages/gpephone/ptim-headers_svn.bb +++ b/packages/gpephone/ptim-headers_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpephone" PRIORITY = "optional" LICENSE = "LiPS" DEPENDS = "gtk+" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" inherit gpephone pkgconfig autotools diff --git a/packages/gpephone/ptim-helper_svn.bb b/packages/gpephone/ptim-helper_svn.bb index 3461de6225..71b004e92b 100644 --- a/packages/gpephone/ptim-helper_svn.bb +++ b/packages/gpephone/ptim-helper_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpephone" PRIORITY = "optional" LICENSE = "LiPS" DEPENDS = "gtk+ ptim-headers" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" PR = "r1" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/ptim-manager_svn.bb b/packages/gpephone/ptim-manager_svn.bb index 5c8042c5d5..da0f4e6af4 100644 --- a/packages/gpephone/ptim-manager_svn.bb +++ b/packages/gpephone/ptim-manager_svn.bb @@ -3,7 +3,7 @@ SECTION = "gpephone" PRIORITY = "optional" LICENSE = "LiPS" DEPENDS = "gtk+ ptim-headers libiac" -PV = "0.1+svn-${SRCDATE}" +PV = "0.1+svnr-${SRCREV}" PR = "r2" DEFAULT_PREFERENCE = "-1" diff --git a/packages/gpephone/quickdial_svn.bb b/packages/gpephone/quickdial_svn.bb index 4533bf4ee8..2a52510d86 100644 --- a/packages/gpephone/quickdial_svn.bb +++ b/packages/gpephone/quickdial_svn.bb @@ -5,11 +5,9 @@ PRIORITY = "optional" PR = "r0" PV = "0.0+svnr-${SRCREV}" -SRCREV_pn-${PN} ?= "1393" - DEFAULT_PREFERENCE = "-1" -DEPENDS = "gtk+ librecord2 libgpephone hiker" +DEPENDS = "gtk+ librecord2 libgpephone" inherit gpephone autotools pkgconfig @@ -17,5 +15,6 @@ SRC_URI = "${GPEPHONE_SVN}" S = "${WORKDIR}/${PN}" +EXTRA_OECONF = "--disable-hiker" FILES_${PN} += "${datadir}/qdial/database" diff --git a/packages/gpephone/useen_svn.bb b/packages/gpephone/useen_svn.bb index 93d180ba52..1a180683a7 100644 --- a/packages/gpephone/useen_svn.bb +++ b/packages/gpephone/useen_svn.bb @@ -5,8 +5,6 @@ PRIORITY = "optional" PR = "r0" PV = "0.0+svnr-${SRCREV}" -SRCREV_pn-${PN} ?= "1400" - DEFAULT_PREFERENCE = "-1" DEPENDS = "glib-2.0" diff --git a/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty b/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty diff --git a/packages/gpsdrive/gpsdrive-pda/makefile.patch b/packages/gpsdrive/gpsdrive-pda/makefile.patch new file mode 100644 index 0000000000..2ec4f6a6d8 --- /dev/null +++ b/packages/gpsdrive/gpsdrive-pda/makefile.patch @@ -0,0 +1,16 @@ +--- gpsdrive-2.10pre2-ipaq/Makefile 2007-11-11 13:29:10.000000000 +0300 ++++ gpsdrive-2.10pre2-ipaq.patched/Makefile 2008-01-12 19:18:46.000000000 +0300 +@@ -5,11 +5,11 @@ + STRIP = arm-linux-strip + + DEFS = -DLOCALEDIR=\"/usr/share/locale\" -DDATADIR=\"/usr/share\" +-INCLUDES = -I. -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo ++INCLUDES = -I. `pkg-config gtk+-2.0 --cflags` + + CFLAGS = -O2 -pipe + +-LIBRARIES = -L/usr/lib -lcrypt -lpthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lm -lc ++LIBRARIES = -lcrypt -lpthread -lm -lc `pkg-config gtk+-2.0 --libs` + LDFLAGS = + + SOURCES = gpsdrive.c speech_out.c track.c settings.c splash.c gpsserial.c gpsmisc.c \ diff --git a/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb b/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb new file mode 100644 index 0000000000..6350053768 --- /dev/null +++ b/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb @@ -0,0 +1,34 @@ +inherit autotools pkgconfig + +PR = "r1" +DESCRIPTION = "GPS navigation/map display software, PDA-optimized version" +HOMEPAGE = "http://www.gedanken.demon.co.uk/gpsdrive-ipaq/" +DEPENDS = "virtual/libc gtk+ libpcre gpsd" +RDEPENDS_${PN} = "gdk-pixbuf-loader-gif gpsd" +SECTION = "x11" +PRIORITY = "optional" +LICENSE = "GPL" + +inherit pkgconfig + +SRC_URI = "http://www.gedanken.demon.co.uk/gpsdrive-ipaq/gpsdrive-2.10pre2-ipaq-r4.tar.gz \ + file://makefile.patch;patch=1 " + +S = "${WORKDIR}/gpsdrive-2.10pre2-ipaq" + +FILES_${PN} = "${bindir}/gpsdrive ${datadir}/gpsdrive ${datadir}/pixmaps ${datadir}/applications" +FILES_${PN} += "${datadir}/${PN}" + +do_compile () { + oe_runmake "CC=${CC}" "LD=${CC}" "STRIP=${STRIP}" all +} + +do_install () { + mkdir -p ${D}${datadir} + cp -a ipkg-data/usr/share/* ${D}${datadir}/ + cp -a README.iPAQ.txt ${D}${datadir}/gpsdrive + cp -a COPYING ${D}${datadir}/gpsdrive + cp -a original-docs ${D}${datadir}/gpsdrive + mkdir -p ${D}${bindir} + install -m 0755 gpsdrive ${D}${bindir}/ +} diff --git a/packages/images/openprotium-image.bb b/packages/images/openprotium-image.bb index 818fd0b186..0f64ba2052 100644 --- a/packages/images/openprotium-image.bb +++ b/packages/images/openprotium-image.bb @@ -1,128 +1,28 @@ DESCRIPTION = "OpenProtium image" HOMEPAGE = "http://www.openprotium.com" -DEPENDS = "${MACHINE_TASK_PROVIDER}" -EXTRA_IMAGECMD_jffs2 = "--pad --big-endian --eraseblock=0x10000 -D ${SLUGOS_DEVICE_TABLE}" +DEPENDS = "task-openprotium" +IMAGE_INSTALL = "task-openprotium" IMAGE_LINGUAS = "" -# Setting USE_DEVFS prevents *any* entries being created initially -# in /dev -USE_DEVFS = "1" +IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DISTRO_VERSION}" +PACKAGE_REMOVE = "kernel-image-* task-openprotium" -# This is passed to the image command to build the correct /dev -# directory (because only the image program can make actual -# dev entries!) -SLUGOS_DEVICE_TABLE = "${@bb.which(bb.data.getVar('BBPATH', d, 1), 'files/device_table-slugos.txt')}" +USE_DEVFS = "1" +OPENPROTIUM_DEVICE_TABLE = "${@bb.which(bb.data.getVar('BBPATH', d, 1), 'files/device_table-minimal-add-md.txt')}" +EXTRA_IMAGECMD_jffs2 += " -D ${OPENPROTIUM_DEVICE_TABLE}" -# IMAGE_PREPROCESS_COMMAND is run before making the image. -# We use this to do a few things: -# . remove the uImage, which is in a separate part of the flash already. -# . adjust the default run level (sysvinit is 5 by default, we like 3) -# . set a default root password, which is no more secure than a blank one -# (since it is documented, in case you were wondering) -# . make the boot more verbose -# -IMAGE_PREPROCESS_COMMAND += "rm ${IMAGE_ROOTFS}/boot/uImage-*;" -IMAGE_PREPROCESS_COMMAND += "sed -i -es,^id:5:initdefault:,id:3:initdefault:, ${IMAGE_ROOTFS}/etc/inittab;" +IMAGE_PREPROCESS_COMMAND += "install -c -m 644 ${OPENPROTIUM_DEVICE_TABLE} ${IMAGE_ROOTFS}/etc/device_table;" +IMAGE_PREPROCESS_COMMAND += "sed -i -es,^id:5:initdefault:,id:3:initdefault:, ${IMAGE_ROOTFS}/etc/inittab;" IMAGE_PREPROCESS_COMMAND += "sed -i -es,^root::0,root:BTMzOOAQfESg6:0, ${IMAGE_ROOTFS}/etc/passwd;" IMAGE_PREPROCESS_COMMAND += "sed -i -es,^VERBOSE=no,VERBOSE=very, ${IMAGE_ROOTFS}/etc/default/rcS;" +IMAGE_PREPROCESS_COMMAND += "sed -i -es,^VOLATILE_ENABLE_CACHE=yes,VOLATILE_ENABLE_CACHE=no, ${IMAGE_ROOTFS}/etc/default/rcS;" +IMAGE_PREPROCESS_COMMAND += "sed -i -es,/dev/tty0,/dev/console, ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh;" +IMAGE_PREPROCESS_COMMAND += "echo /dev/md >> ${IMAGE_ROOTFS}/etc/udev/mount.blacklist;" +IMAGE_PREPROCESS_COMMAND += "echo /dev/hd >> ${IMAGE_ROOTFS}/etc/udev/mount.blacklist;" +IMAGE_PREPROCESS_COMMAND += "echo /dev/mtd3 0x30000 0x10000 0x10000 > ${IMAGE_ROOTFS}/etc/fw_env.config;" -# Always just make a new flash image. -PACK_IMAGE = 'storcenter_pack_image;' -IMAGE_POSTPROCESS_COMMAND += "${PACK_IMAGE}" -PACK_IMAGE_DEPENDS = "" -#EXTRA_IMAGEDEPENDS += "${PACK_IMAGE_DEPENDS}" - -# This hack removes '${MACHINE}' from the end of the arch.conf for ipk, -# preventing _mach.ipk (with no byte sex) taking precedence over everything -# else. -# but we want 'storcenter' in there so kernel modules work correctly. -# -#ROOTFS_POSTPROCESS_COMMAND += "sed -i '$d' '${IMAGE_ROOTFS}/etc/ipkg/arch.conf';" - -# These depends define native utilities - they do not get put in the flash and -# are not required to build the image. -IMAGE_TOOLS = "" -#EXTRA_IMAGEDEPENDS += "${IMAGE_TOOLS}" - -# CONFIG: -# SLUGOS_EXTRA_RDEPENDS: set in conf, things to add to the image -# SLUGOS_SUPPORT: set to here, see below, added to the image. -# SLUGOS_KERNEL: set here, kernel modules added to the image -# -# Do not override the last two unless you really know what you -# are doing - there is more information below. - -# diff, cpio and find are required for reflash and turnup ram. -# Removing these probably leaves the system bootable, but standard -# openslug and ucslugc stuff won't work, so only take these out in -# very non-standard turnkey slugos builds. -# -# udev is the default way of handling devices, there is no guarantee -# that the static device table is completely correct (it is just -# known to be sufficient for boot.) -# we'ere still on 2.6.12 devfs.... -#OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils udev" -# -OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils uboot-utils" - -# kernel-module-af-packet must be in the image for DHCP to work -# kernel-module-netconsole is here because it is small and is -# highly useful on minimal systems (which really don't have anywhere -# other than the network to output error messages!) -SLUGOS_KERNEL ?= "kernel-module-af-packet kernel-module-netconsole \ - kernel-module-mii " - -# this gets /lib/modules made.... -OPENPROTIUM_KERNEL = "kernel-module-dummy \ - kernel-module-af-packet " - -IMAGE_INSTALL = " \ - kernel base-files base-passwd netbase \ - busybox initscripts-openprotium openprotium-init \ - update-modules sysvinit tinylogin \ - module-init-tools-depmod modutils-initscripts \ - ipkg-collateral ipkg ipkg-link \ - libgcc1 \ - portmap \ - dropbear \ - e2fsprogs-blkid \ - mdadm \ - hdparm \ - mtd-utils \ - ${OPENPROTIUM_SUPPORT} \ - ${OPENPROTIUM_KERNEL} " -# ${SLUGOS_EXTRA_RDEPENDS}" - -inherit image +ROOTFS_POSTPROCESS_COMMAND += "ipkg-cl ${IPKG_ARGS} -force-depends \ + remove ${PACKAGE_REMOVE};" -storcenter_pack_image() { - # find latest kernel - KERNEL=`ls -tr ${DEPLOY_DIR_IMAGE}/uImage* | tail -1` - if [ -z "$KERNEL" ]; then - oefatal "No kernel found in ${DEPLOY_DIR_IMAGE}. Bitbake linux-storcenter to create one." - exit 1 - fi - ROOTFS=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 - OUTPUT=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flash.img - PADFILE=${DEPLOY_DIR_IMAGE}/padfile.zzz - HEX_MAX_KERN_SIZE=170000 - DEC_MAX_KERN_SIZE=`echo "ibase=16; $HEX_MAX_KERN_SIZE" | bc ` - HEX_MAX_ROOT_SIZE=590000 - DEC_MAX_ROOT_SIZE=`echo "ibase=16; $HEX_MAX_ROOT_SIZE" | bc ` - KERNEL_SIZE=`ls -l $KERNEL | awk '{print $5}'` - if [ $KERNEL_SIZE -gt $DEC_MAX_KERN_SIZE ]; then - oefatal "Kernel too large at $KERNEL_SIZE bytes. Max is $DEC_MAX_KERN_SIZE." - exit 1 - fi - ROOT_SIZE=`ls -l $ROOTFS | awk '{print $5}'` - if [ $ROOT_SIZE -gt $DEC_MAX_ROOT_SIZE ]; then - oefatal "Rootfs is too large at $ROOT_SIZE bytes. Max is $DEC_MAX_ROOT_SIZE." - exit 1 - fi - PAD_SIZE=`echo "$DEC_MAX_KERN_SIZE - $KERNEL_SIZE" | bc ` - dd if=/dev/zero of=$PADFILE bs=$PAD_SIZE count=1 2>>/dev/null - cat $KERNEL $PADFILE $ROOTFS > $OUTPUT - rm -f $PADFILE - ls -l $OUTPUT -} +inherit image concatenated-image diff --git a/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh b/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh index c69a773482..6b63b07188 100755 --- a/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh +++ b/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh @@ -205,7 +205,7 @@ then : > /etc/mtab fi mount -f -o remount / - mount -f /proc + grep -q '^proc /proc' /etc/mtab || mount -f /proc test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs" fi diff --git a/packages/initscripts/initscripts-1.0/openprotium/mountall.sh b/packages/initscripts/initscripts-1.0/openprotium/mountall.sh new file mode 100644 index 0000000000..94ea8217fd --- /dev/null +++ b/packages/initscripts/initscripts-1.0/openprotium/mountall.sh @@ -0,0 +1,27 @@ +# +# mountall.sh Mount all filesystems. +# +# Version: @(#)mountall.sh 2.83-2 01-Nov-2001 miquels@cistron.nl +# +. /etc/default/rcS + +# +# Mount local filesystems in /etc/fstab. For some reason, people +# might want to mount "proc" several times, and mount -v complains +# about this. So we mount "proc" filesystems without -v. +# +test "$VERBOSE" != no && echo "Mounting local filesystems..." +mount -at nonfs,nosmbfs,noncpfs 2>/dev/null + +# +# We might have mounted something over /dev, see if /dev/initctl is there. +# +if test ! -p /dev/initctl +then + rm -f /dev/initctl + mknod -m 600 /dev/initctl p +fi +kill -USR1 1 + +: exit 0 + diff --git a/packages/initscripts/initscripts-1.0/openprotium/umountfs b/packages/initscripts/initscripts-1.0/openprotium/umountfs new file mode 100755 index 0000000000..e489c4c1cd --- /dev/null +++ b/packages/initscripts/initscripts-1.0/openprotium/umountfs @@ -0,0 +1,27 @@ +#! /bin/sh +# +# umountfs Turn off swap and unmount all local filesystems. +# + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +echo "Deactivating swap..." +swapoff -a + +# We leave /proc mounted. +echo "Unmounting local filesystems..." +# umount anything not a pseudo file system, and not root +# doesn't work for nested mounts at a non-root mount point +while read device mountpt fstype options +do + echo "$device" | grep -q "^/" + if [ $? -eq 0 ]; then + if [ "$mountpt" != "/" ] && [ "$mountpt" != "/dev/" ]; then + umount $mountpt + fi + fi +done</proc/mounts + +mount -o remount,ro / + +: exit 0 diff --git a/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh b/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh new file mode 100644 index 0000000000..6ee0d50e84 --- /dev/null +++ b/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# umount the static dev - we'd probably never use it. +# +[ -d /dev/.static/dev ] && umount /dev/.static/dev +# +# if a root is found on an ext* filesystem, umount the old initrd +# +grep -q "/ ext" /proc/mounts +if [ $? -eq 0 ]; then + umount /initrd +fi diff --git a/packages/initscripts/initscripts-openprotium_1.0.bb b/packages/initscripts/initscripts-openprotium_1.0.bb index 83e89ef7a1..890bbd756c 100644 --- a/packages/initscripts/initscripts-openprotium_1.0.bb +++ b/packages/initscripts/initscripts-openprotium_1.0.bb @@ -24,16 +24,16 @@ SRC_URI += "file://openprotium/halt" SRC_URI += "file://openprotium/reboot" SRC_URI += "file://openprotium/flashclean" SRC_URI += "file://openprotium/checkroot.sh" +SRC_URI += "file://openprotium/mountall.sh" +SRC_URI += "file://openprotium/umountinitrd.sh" +SRC_URI += "file://openprotium/umountfs" # Without this it is not possible to patch checkroot.sh S = "${WORKDIR}" do_install_append() { - # the image build command now installs this for slugos - # except that mine doesn't. we don't need it, but we turnup - # expects it to at least exist - rm ${D}${sysconfdir}/device_table - touch ${D}${sysconfdir}/device_table + #rm ${D}${sysconfdir}/device_table + #touch ${D}${sysconfdir}/device_table # openprotium specific scripts # install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d @@ -44,6 +44,8 @@ do_install_append() { install -m 0755 ${WORKDIR}/openprotium/devices ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/openprotium/flashclean ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/openprotium/checkroot.sh ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/openprotium/mountall.sh ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/openprotium/umountinitrd.sh ${D}${sysconfdir}/init.d # Remove the do install links (this detects a change to the # initscripts .bb file - it will cause a build failure here.) @@ -130,7 +132,7 @@ do_install_append() { # slugos network syslog starts here (44) update-rc.d -r ${D} mountnfs.sh start 45 S . - update-rc.d -r ${D} bootmisc.sh start 55 S . + # update-rc.d -r ${D} bootmisc.sh start 55 S . # urandom is currently disabled from S 55 (and won't work with tmpfs /var) # ipkg-cl configure runs at S 98 @@ -158,7 +160,7 @@ do_install_append() { # This is the special, correct, slugos umountnfs.sh (it looks in # the /proc/mounts information, not /etc/fstab) update-rc.d -r ${D} umountnfs.sh start 31 0 6 . - update-rc.d -r ${D} save-rtc.sh start 25 0 6 . + # update-rc.d -r ${D} save-rtc.sh start 25 0 6 . # portmap stops at 32 # slugos network syslog stops here (39) # networking stops at 40 (nothing else does, believe me.) diff --git a/packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch b/packages/jamvm/files/jamvm-1.3.1-size-defaults.patch index a41beee982..a41beee982 100644 --- a/packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch +++ b/packages/jamvm/files/jamvm-1.3.1-size-defaults.patch diff --git a/packages/jamvm/jamvm.inc b/packages/jamvm/jamvm.inc new file mode 100644 index 0000000000..36378370c5 --- /dev/null +++ b/packages/jamvm/jamvm.inc @@ -0,0 +1,22 @@ +DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2." +HOMEPAGE = "http://jamvm.sourceforge.net/" +LICENSE = "GPL" + +DEPENDS = "zlib classpath virtual/javac-native" +RDEPENDS = "classpath" + +SRC_URI = "${SOURCEFORGE_MIRROR}/jamvm/jamvm-${PV}.tar.gz" + +RPROVIDES_jamvm = "java2-runtime" + +# This uses 32 bit arm, so force the instruction set to arm, not thumb +ARM_INSTRUCTION_SET = "arm" + +inherit autotools update-alternatives + +EXTRA_OECONF = "--with-classpath-install-dir=${prefix}" +CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB" + +ALTERNATIVE_NAME = "java" +ALTERNATIVE_PATH = "${bindir}/jamvm" +ALTERNATIVE_PRIORITY = "10" diff --git a/packages/jamvm/jamvm/sh3sh4-support.patch b/packages/jamvm/jamvm/sh3sh4-support.patch deleted file mode 100644 index 8fa0d8c161..0000000000 --- a/packages/jamvm/jamvm/sh3sh4-support.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- configure.ac_orig 2006-05-10 21:48:31.000000000 +0000 -+++ configure.ac 2006-05-10 21:49:56.000000000 +0000 -@@ -66,6 +66,8 @@ - arm*-*-linux*) host_cpu=arm host_os=linux ;; - arm*-*-openbsd*) host_cpu=arm host_os=linux libdl_needed=no ;; - arm*-*-freebsd*) host_cpu=arm host_os=linux libdl_needed=no ;; -+sh3-*-linux*) host_cpu=sh3 host_os=linux libdl_needed=no ;; -+sh4-*-linux*) host_cpu=sh4 host_os=linux libdl_needed=no ;; - powerpc*-*-linux*) host_cpu=powerpc host_os=linux ;; - powerpc*-*-openbsd*) host_cpu=powerpc host_os=linux libdl_needed=no ;; - powerpc*-*-freebsd*) host_cpu=powerpc host_os=linux libdl_needed=no ;; diff --git a/packages/jamvm/jamvm_1.4.5.bb b/packages/jamvm/jamvm_1.4.5.bb index 489b4fb94b..3cc0431266 100644 --- a/packages/jamvm/jamvm_1.4.5.bb +++ b/packages/jamvm/jamvm_1.4.5.bb @@ -1,24 +1,4 @@ -DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2." -HOMEPAGE = "http://jamvm.sourceforge.net/" -LICENSE = "GPL" -PRIORITY = "optional" -SECTION = "interpreters" +require jamvm.inc -DEPENDS = "zlib classpath" -RDEPENDS = "classpath (>= 0.18) classpath-common (>= 0.18)" +SRC_URI += "file://jamvm-1.3.1-size-defaults.patch;patch=1" -SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz \ - file://jamvm-1.3.1-size-defaults.patch;patch=1" - -# This uses 32 bit arm, so force the instruction set to arm, not thumb -ARM_INSTRUCTION_SET = "arm" - -inherit autotools update-alternatives - -EXTRA_OECONF = "--with-classpath-install-dir=${prefix}" -CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB" - -PROVIDES = "virtual/java" -ALTERNATIVE_NAME = "java" -ALTERNATIVE_PATH = "${bindir}/jamvm" -ALTERNATIVE_PRIORITY = "10" diff --git a/packages/jamvm/jamvm_1.5.0.bb b/packages/jamvm/jamvm_1.5.0.bb new file mode 100644 index 0000000000..efa959f0f9 --- /dev/null +++ b/packages/jamvm/jamvm_1.5.0.bb @@ -0,0 +1,5 @@ +require jamvm.inc + +PR = "r0" + + diff --git a/packages/kaffe/kaffe.inc b/packages/kaffe/kaffe.inc index 2d536b3dea..2ae0929a93 100644 --- a/packages/kaffe/kaffe.inc +++ b/packages/kaffe/kaffe.inc @@ -2,7 +2,7 @@ DESCRIPTION = "Kaffe is a clean room implementation of the Java Virtual Machine" HOMEPAGE = "http://www.kaffe.org/" LICENSE = "GPL LGPL W3C Classpath BSD" -DEPENDS = "jikes-native fastjar-native libffi zip-native" +DEPENDS = "virtual/javac-native fastjar-native libffi zip-native" RDEPENDS_${PN} = "${PN}-common (>= ${PV})" SRC_URI += "file://disable-automake-checks.patch;patch=1" diff --git a/packages/linux/linux-2.6.23/kallsyms-missing-include.patch b/packages/linux/linux-2.6.23/kallsyms-missing-include.patch new file mode 100644 index 0000000000..9c31b1fa9a --- /dev/null +++ b/packages/linux/linux-2.6.23/kallsyms-missing-include.patch @@ -0,0 +1,19 @@ +A missing include in kallsyms.h. + +Upstream this is fixed in the 2.6.24 rc series: + +http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5a75983eef1193c43caebde6643a218bd8d8390e + +Leon Woestenberg <leon.woestenberg@gmail.com> + +--- a/include/linux/kallsyms.h ++++ b/include/linux/kallsyms.h +@@ -6,6 +6,7 @@ + #define _LINUX_KALLSYMS_H + + #include <linux/errno.h> ++#include <linux/stddef.h> + + #define KSYM_NAME_LEN 128 + #define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \ + diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.23.12 b/packages/linux/linux-ixp4xx/defconfig-2.6.23.14 index efbd55195d..efbd55195d 100644 --- a/packages/linux/linux-ixp4xx/defconfig-2.6.23.12 +++ b/packages/linux/linux-ixp4xx/defconfig-2.6.23.14 diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.14 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.14 new file mode 100644 index 0000000000..cdd7ecdf0e --- /dev/null +++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.14 @@ -0,0 +1,1940 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.8 +# Wed Nov 21 22:15:10 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +# CONFIG_KALLSYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +CONFIG_ARCH_IXP4XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y + +# +# Intel IXP4xx Implementation Options +# + +# +# IXP4xx Platforms +# +CONFIG_MACH_NSLU2=y +CONFIG_MACH_AVILA=y +CONFIG_MACH_LOFT=y +# CONFIG_ARCH_ADI_COYOTE is not set +# CONFIG_MACH_GATEWAY7001 is not set +# CONFIG_MACH_WG302V2 is not set +CONFIG_ARCH_IXDP425=y +CONFIG_MACH_IXDPG425=y +# CONFIG_MACH_IXDP465 is not set +# CONFIG_MACH_KIXRP435 is not set +CONFIG_ARCH_IXCDP1100=y +# CONFIG_ARCH_PRPMC1100 is not set +CONFIG_MACH_NAS100D=y +CONFIG_MACH_DSMG600=y +CONFIG_ARCH_IXDP4XX=y +CONFIG_MACH_FSG=y +# CONFIG_MACH_GTWX5715 is not set + +# +# IXP4xx Options +# +CONFIG_DMABOUNCE=y +# CONFIG_IXP4XX_INDIRECT_PCI is not set +CONFIG_IXP4XX_QMGR=y +CONFIG_IXP4XX_NPE=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +CONFIG_PCI=y +CONFIG_PCI_SYSCALL=y +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +# CONFIG_PM is not set +CONFIG_SUSPEND_UP_POSSIBLE=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +# CONFIG_NF_CT_PROTO_UDPLITE is not set +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# Bridge: Netfilter Configuration +# +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +CONFIG_TIPC=m +# CONFIG_TIPC_ADVANCED is not set +# CONFIG_TIPC_DEBUG is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=m +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set +CONFIG_NET_CLS_ROUTE=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_RFKILL=m +# CONFIG_RFKILL_INPUT is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +CONFIG_NFTL=y +CONFIG_NFTL_RW=y +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +# CONFIG_MTD_CFI_NOSWAP is not set +CONFIG_MTD_CFI_BE_BYTE_SWAP=y +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IXP4XX=y +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=10240 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=m +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_SAS_LIBSAS is not set +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_SATA_AHCI is not set +# CONFIG_SATA_SVW is not set +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_ULI is not set +CONFIG_SATA_VIA=m +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +CONFIG_PATA_ARTOP=m +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SC1200 is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +# CONFIG_PATA_PLATFORM is not set +CONFIG_PATA_IXP4XX_CF=m +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_RAID5_RESHAPE=y +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_IXP4XX_ETH=y +# CONFIG_AX88796 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_FORCEDETH is not set +# CONFIG_DGRS is not set +# CONFIG_EEPRO100 is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_SC92031 is not set +CONFIG_NETDEV_1000=y +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_SK98LIN is not set +CONFIG_VIA_VELOCITY=m +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set +# CONFIG_QLA3XXX is not set +# CONFIG_ATL1 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set +# CONFIG_HERMES is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 is not set +CONFIG_USB_ZD1201=m +# CONFIG_HOSTAP is not set +# CONFIG_BCM43XX is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +CONFIG_NETCONSOLE=m +CONFIG_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_ISDN=m +# CONFIG_ISDN_I4L is not set +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +# CONFIG_ISDN_CAPI_MIDDLEWARE is not set +CONFIG_ISDN_CAPI_CAPI20=m + +# +# CAPI hardware drivers +# +# CONFIG_CAPI_AVM is not set +# CONFIG_CAPI_EICON is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +CONFIG_INPUT_IXP4XX_BEEPER=y +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +# CONFIG_INPUT_POWERMATE is not set +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_DIGIEPCA is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_MOXA_SMARTIO_NEW is not set +# CONFIG_ISI is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_SYNCLINK_GT is not set +CONFIG_N_HDLC=m +# CONFIG_RISCOM8 is not set +# CONFIG_SPECIALIX is not set +# CONFIG_SX is not set +# CONFIG_RIO is not set +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCI=m +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_RUNTIME_UARTS=2 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_IXP4XX_WATCHDOG=m + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_IXP4XX=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_GPIO=y +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_IOP3XX is not set +# CONFIG_I2C_IXP4XX is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +CONFIG_SENSORS_EEPROM=y +CONFIG_SENSORS_PCF8574=m +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +CONFIG_W1=m + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_MATROX is not set +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m +# CONFIG_W1_MASTER_DS1WM is not set + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +CONFIG_W1_SLAVE_DS2433_CRC=y +# CONFIG_W1_SLAVE_DS2760 is not set +CONFIG_HWMON=m +CONFIG_HWMON_VID=m +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +CONFIG_SENSORS_AD7418=m +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +CONFIG_SENSORS_W83781D=m +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_MISC_DEVICES=y +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_IXP4XX=y +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +# CONFIG_VIDEO_V4L1 is not set +# CONFIG_VIDEO_V4L1_COMPAT is not set +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA5249=m +# CONFIG_TUNER_TEA5761 is not set +CONFIG_VIDEO_SAA7134=m +# CONFIG_VIDEO_SAA7134_ALSA is not set +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +# CONFIG_VIDEO_CX88_BLACKBIRD is not set +# CONFIG_VIDEO_CAFE_CCIC is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_USBVISION is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_USB_SN9C102 is not set +# CONFIG_USB_ZC0301 is not set +CONFIG_USB_ZR364XX=m +# CONFIG_RADIO_ADAPTERS is not set +# CONFIG_DVB_CORE is not set +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_BUF=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_TVEEPROM=m +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +# CONFIG_FB is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# ALSA ARM devices +# + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_SPLIT_ISO=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=m +# CONFIG_USB_U132_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +CONFIG_USB_STORAGE_FREECOM=y +# CONFIG_USB_STORAGE_DPCM is not set +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_ONETOUCH=y +CONFIG_USB_STORAGE_KARMA=y +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +# CONFIG_USB_SERIAL_AIRPRIME is not set +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP2101=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +CONFIG_USB_ADUTUX=m +# CONFIG_USB_AUERSWALD is not set +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_BERRY_CHARGE=m +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +CONFIG_USB_PHIDGET=m +CONFIG_USB_PHIDGETKIT=m +CONFIG_USB_PHIDGETMOTORCONTROL=m +CONFIG_USB_PHIDGETSERVO=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +# CONFIG_USB_APPLEDISPLAY is not set +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_DS1672=y +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +CONFIG_RTC_DRV_ISL1208=y +CONFIG_RTC_DRV_X1205=y +CONFIG_RTC_DRV_PCF8563=y +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BIND34=y +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-ixp4xx_2.6.23.12.bb b/packages/linux/linux-ixp4xx_2.6.23.14.bb index 14b79ae7cb..b7c7682370 100644 --- a/packages/linux/linux-ixp4xx_2.6.23.12.bb +++ b/packages/linux/linux-ixp4xx_2.6.23.14.bb @@ -1,12 +1,8 @@ -# The new ethernet driver included in the 2.6.23 version of the nslu2-linux.org kernel patches -# has problems with providing the correct MAC address on the initial DHCP request. -DEFAULT_PREFERENCE = "-1" - require linux.inc require linux-ixp4xx.inc VANILLA_VERSION = "2.6.23" -KERNEL_RELEASE = "2.6.23.12" +KERNEL_RELEASE = "2.6.23.14" # If you use a rc, you will need to use this: #PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}" diff --git a/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb b/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb new file mode 100644 index 0000000000..4543979eb3 --- /dev/null +++ b/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb @@ -0,0 +1,59 @@ +require linux.inc +require linux-openmoko.inc + +DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko" +VANILLA_VERSION = "2.6.23" +KERNEL_RELEASE = "2.6.24-rc7" + +KERNEL_VERSION = "${KERNEL_RELEASE}" + +# If you use a rc, you will need to use this: +PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}" +PR = "r0" + +KERNEL_IMAGETYPE = "uImage" +UBOOT_ENTRYPOINT = "30008000" + +############################################################## +# source and patches +# +SRCREV_FORMAT = "patches-rconfig" + +SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=v2.6.24-rc7 \ + svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=patches;proto=http;name=patches \ + svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=config;proto=http;name=config " + +S = "${WORKDIR}/git" + +############################################################## +# kernel image resides on a seperate flash partition (for now) +# +FILES_kernel-image = "" +ALLOW_EMPTY = "1" + +COMPATIBLE_HOST = "arm.*-linux" +COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' + +CMDLINE = "unused -- bootloader passes ATAG list" + +############################################################### +# module configs specific to this kernel +# + +# usb +module_autoload_ohci-hcd = "ohci-hcd" +module_autoload_hci_usb = "hci_usb" +module_autoload_g_ether = "g_ether" +# audio +module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" +# sd/mmc +module_autoload_s3cmci = "s3cmci" + +do_prepatch() { + mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av + mv patches patches.openmoko + mv .pc .pc.old + mv ${WORKDIR}/config/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig +} + +addtask prepatch after do_unpack before do_patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/.mtn2git_empty b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/.mtn2git_empty diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/arm_pxa_20070923.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/arm_pxa_20070923.patch index ad4ce996df..ad4ce996df 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/arm_pxa_20070923.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/arm_pxa_20070923.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/binutils-buildid-arm.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/binutils-buildid-arm.patch index 68e35e89e1..68e35e89e1 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/binutils-buildid-arm.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/binutils-buildid-arm.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/connectplus-remove-ide-HACK.patch index 4414b21191..4414b21191 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/connectplus-remove-ide-HACK.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/connectplus-remove-ide-HACK.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-akita b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-akita index 59ec5c95b7..a299351698 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-akita +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-akita @@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set # CONFIG_AUDIT is not set @@ -677,8 +677,24 @@ CONFIG_MII=m # # Wireless LAN # -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_WLAN_PRE80211=y +# CONFIG_STRIP is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_NETWAVE is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +# CONFIG_ATMEL is not set +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m # # USB Network Adapters @@ -989,7 +1005,7 @@ CONFIG_FB_DEFERRED_IO=y CONFIG_FB_PXA=y CONFIG_FB_PXA_LCD_QVGA=y # CONFIG_FB_PXA_LCD_VGA is not set -# CONFIG_FB_PXA_OVERLAY is not set +CONFIG_FB_PXA_OVERLAY=y # CONFIG_FB_PXA_PARAMETERS is not set # CONFIG_FB_MBX is not set # CONFIG_FB_W100 is not set diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-bootcdx86 index 833f72ac9e..833f72ac9e 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-bootcdx86 +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-bootcdx86 diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-c7x0 b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-c7x0 index bd11500398..71e175c717 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-c7x0 +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-c7x0 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.23 -# Tue Oct 16 12:02:32 2007 +# Linux kernel version: 2.6.24-rc6 +# Mon Dec 31 17:45:51 2007 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -40,12 +40,17 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set # CONFIG_AUDIT is not set # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set CONFIG_SYSFS_DEPRECATED=y # CONFIG_RELAY is not set # CONFIG_BLK_DEV_INITRD is not set @@ -138,7 +143,7 @@ CONFIG_ARCH_PXA=y # CONFIG_ARCH_OMAP is not set # -# Intel PXA2xx Implementations +# Intel PXA2xx/PXA3xx Implementations # # CONFIG_ARCH_LUBBOCK is not set # CONFIG_MACH_LOGICPD_PXA270 is not set @@ -147,10 +152,11 @@ CONFIG_ARCH_PXA=y CONFIG_PXA_SHARPSL=y # CONFIG_MACH_TRIZEPS4 is not set # CONFIG_MACH_EM_X270 is not set -# CONFIG_MACH_HX2750 is not set -# CONFIG_MACH_HTCUNIVERSAL is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set CONFIG_PXA_SHARPSL_25x=y # CONFIG_PXA_SHARPSL_27x is not set +# CONFIG_MACH_HX2750 is not set # CONFIG_MACH_POODLE is not set CONFIG_MACH_CORGI=y CONFIG_MACH_SHEPHERD=y @@ -198,10 +204,6 @@ CONFIG_SHARP_SCOOP=y # # CONFIG_PCI_SYSCALL is not set # CONFIG_ARCH_SUPPORTS_MSI is not set - -# -# PCCARD (PCMCIA/CardBus) support -# CONFIG_PCCARD=m # CONFIG_PCMCIA_DEBUG is not set CONFIG_PCMCIA=m @@ -219,6 +221,7 @@ CONFIG_PCMCIA_PXA2XX=m CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y CONFIG_PREEMPT=y CONFIG_HZ=100 CONFIG_AEABI=y @@ -231,6 +234,7 @@ CONFIG_FLATMEM_MANUAL=y CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set CONFIG_SPLIT_PTLOCK_CPUS=4096 # CONFIG_RESOURCES_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 @@ -246,6 +250,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0 CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y CONFIG_CPU_FREQ_PXA25x=y # @@ -254,15 +259,17 @@ CONFIG_CPU_FREQ_PXA25x=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_DEBUG=y -CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT=m # CONFIG_CPU_FREQ_STAT_DETAILS is not set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m # # Floating point emulation @@ -326,6 +333,7 @@ CONFIG_INET_TUNNEL=m CONFIG_INET_XFRM_MODE_TRANSPORT=m CONFIG_INET_XFRM_MODE_TUNNEL=m CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m # CONFIG_TCP_CONG_ADVANCED is not set @@ -388,10 +396,6 @@ CONFIG_IP_NF_QUEUE=m # 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 # @@ -429,6 +433,8 @@ CONFIG_IRCOMM=m # Dongle support # # CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set # # Old SIR device drivers @@ -461,9 +467,11 @@ CONFIG_BT_HIDP=m # CONFIG_BT_HCIUSB=m # CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set CONFIG_BT_HCIUART=m CONFIG_BT_HCIUART_H4=y CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set CONFIG_BT_HCIBCM203X=m CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBFUSB=m @@ -496,6 +504,7 @@ CONFIG_IEEE80211_CRYPT_TKIP=m # # Generic Driver Options # +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y @@ -522,6 +531,7 @@ CONFIG_MTD_BLOCK=y # CONFIG_INFTL is not set # CONFIG_RFD_FTL is not set # CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set # # RAM/ROM/Flash chip drivers @@ -574,6 +584,7 @@ CONFIG_MTD_NAND_IDS=y CONFIG_MTD_NAND_SHARPSL=y # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set # CONFIG_MTD_ONENAND is not set # @@ -590,15 +601,17 @@ CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set -CONFIG_IDE=y +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_IDE=m CONFIG_IDE_MAX_HWIFS=4 -CONFIG_BLK_DEV_IDE=y +CONFIG_BLK_DEV_IDE=m # # Please see Documentation/ide.txt for help/info on IDE drives # # CONFIG_BLK_DEV_IDE_SATA is not set -CONFIG_BLK_DEV_IDEDISK=y +CONFIG_BLK_DEV_IDEDISK=m # CONFIG_IDEDISK_MULTI_MODE is not set CONFIG_BLK_DEV_IDECS=m # CONFIG_BLK_DEV_IDECD is not set @@ -611,10 +624,11 @@ CONFIG_IDE_PROC_FS=y # # IDE chipset support/bugfixes # -CONFIG_IDE_GENERIC=y -# CONFIG_IDEPCI_PCIBUS_ORDER is not set +CONFIG_IDE_GENERIC=m +# CONFIG_BLK_DEV_PLATFORM is not set # CONFIG_IDE_ARM is not set # CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y # CONFIG_BLK_DEV_HD is not set # @@ -654,6 +668,7 @@ CONFIG_SCSI_WAIT_SCAN=m # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set # CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set CONFIG_SCSI_LOWLEVEL=y # CONFIG_ISCSI_TCP is not set # CONFIG_SCSI_DEBUG is not set @@ -670,7 +685,9 @@ CONFIG_DM_ZERO=m CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_EMC=m # CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set # CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set CONFIG_NETDEVICES=y # CONFIG_NETDEVICES_MULTIQUEUE is not set # CONFIG_DUMMY is not set @@ -678,6 +695,7 @@ CONFIG_NETDEVICES=y # CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set CONFIG_TUN=m +# CONFIG_VETH is not set # CONFIG_PHYLIB is not set CONFIG_NET_ETHERNET=y CONFIG_MII=m @@ -685,6 +703,11 @@ CONFIG_MII=m # CONFIG_SMC91X is not set # CONFIG_DM9000 is not set # CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set # CONFIG_NETDEV_1000 is not set # CONFIG_NETDEV_10000 is not set @@ -696,9 +719,9 @@ CONFIG_WLAN_80211=y # CONFIG_PCMCIA_RAYCS is not set # CONFIG_LIBERTAS is not set CONFIG_HERMES=m -# CONFIG_ATMEL is not set CONFIG_PCMCIA_HERMES=m CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set # CONFIG_AIRO_CS is not set # CONFIG_PCMCIA_WL3501 is not set # CONFIG_USB_ZD1201 is not set @@ -714,7 +737,6 @@ CONFIG_USB_CATC=m CONFIG_USB_KAWETH=m CONFIG_USB_PEGASUS=m CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m CONFIG_USB_USBNET=m CONFIG_USB_NET_AX8817X=m CONFIG_USB_NET_CDCETHER=m @@ -769,7 +791,6 @@ CONFIG_INPUT_MOUSEDEV=m CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 # CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_TSDEV is not set CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set CONFIG_INPUT_POWER=y @@ -844,7 +865,6 @@ CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set # CONFIG_IPMI_HANDLER is not set -# CONFIG_WATCHDOG is not set CONFIG_HW_RANDOM=m # CONFIG_NVRAM is not set # CONFIG_R3964 is not set @@ -906,36 +926,18 @@ CONFIG_I2C_PXA=y # CONFIG_W1 is not set # CONFIG_POWER_SUPPLY is not set # CONFIG_HWMON is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -# CONFIG_HTC_ASIC3 is not set -# CONFIG_HTC_ASIC3_DS1WM is not set - -# -# Multi-Function Devices -# -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y +# CONFIG_WATCHDOG is not set # -# LED drivers +# Sonics Silicon Backplane # -CONFIG_LEDS_CORGI=y -# CONFIG_LEDS_TOSA is not set -# CONFIG_LEDS_GPIO is not set +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set # -# LED Triggers +# Multifunction device drivers # -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_IDE_DISK=y -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +# CONFIG_MFD_SM501 is not set # # Multimedia devices @@ -947,12 +949,12 @@ CONFIG_VIDEO_V4L2=y CONFIG_VIDEO_CAPTURE_DRIVERS=y # CONFIG_VIDEO_ADV_DEBUG is not set CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set # CONFIG_VIDEO_CPIA is not set # CONFIG_VIDEO_CPIA2 is not set # CONFIG_VIDEO_SAA5246A is not set # CONFIG_VIDEO_SAA5249 is not set # CONFIG_TUNER_3036 is not set -# CONFIG_TUNER_TEA5761 is not set CONFIG_V4L_USB_DRIVERS=y # CONFIG_VIDEO_PVRUSB2 is not set # CONFIG_VIDEO_EM28XX is not set @@ -981,15 +983,6 @@ CONFIG_USB_DABUSB=m # # Graphics support # -CONFIG_BACKLIGHT_LCD_SUPPORT=y -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_CORGI=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set # CONFIG_VGASTATE is not set CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_FB=y @@ -998,6 +991,7 @@ CONFIG_FIRMWARE_EDID=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set # CONFIG_FB_SYS_FILLRECT is not set # CONFIG_FB_SYS_COPYAREA is not set # CONFIG_FB_SYS_IMAGEBLIT is not set @@ -1017,6 +1011,15 @@ CONFIG_FB_DEFERRED_IO=y # CONFIG_FB_MBX is not set CONFIG_FB_W100=y # CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CORGI=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set # # Console display driver support @@ -1042,9 +1045,6 @@ CONFIG_LOGO=y # CONFIG_LOGO_LINUX_VGA16 is not set # CONFIG_LOGO_LINUX_CLUT224 is not set CONFIG_LOGO_OHAND_CLUT224=y -# CONFIG_LOGO_OZ240_CLUT224 is not set -# CONFIG_LOGO_OZ480_CLUT224 is not set -# CONFIG_LOGO_OZ640_CLUT224 is not set # # Sound @@ -1123,6 +1123,7 @@ CONFIG_AC97_BUS=m CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set +CONFIG_HIDRAW=y # # USB Input Devices @@ -1209,6 +1210,7 @@ CONFIG_USB_SERIAL_GENERIC=y # CONFIG_USB_SERIAL_AIRPRIME is not set # CONFIG_USB_SERIAL_ARK3116 is not set CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set # CONFIG_USB_SERIAL_WHITEHEAT is not set CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m # CONFIG_USB_SERIAL_CP2101 is not set @@ -1292,6 +1294,7 @@ CONFIG_USB_GADGET=y # CONFIG_USB_GADGET_DEBUG_FILES is not set CONFIG_USB_GADGET_SELECTED=y # CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set # CONFIG_USB_GADGET_FSL_USB2 is not set # CONFIG_USB_GADGET_NET2280 is not set CONFIG_USB_GADGET_PXA2XX=y @@ -1323,11 +1326,29 @@ CONFIG_MMC_UNSAFE_RESUME=y # CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set # # MMC/SD Host Controller Drivers # CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_CORGI=y +# CONFIG_LEDS_TOSA is not set +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_IDE_DISK=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y @@ -1347,6 +1368,7 @@ CONFIG_RTC_INTF_DEV=y # I2C RTC drivers # # CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set # CONFIG_RTC_DRV_DS1672 is not set # CONFIG_RTC_DRV_MAX6900 is not set # CONFIG_RTC_DRV_RS5C372 is not set @@ -1377,19 +1399,6 @@ CONFIG_RTC_INTF_DEV=y CONFIG_RTC_DRV_SA1100=y # -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# # File systems # CONFIG_EXT2_FS=y @@ -1438,7 +1447,6 @@ 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 # @@ -1454,6 +1462,7 @@ CONFIG_RAMFS=y CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set CONFIG_JFFS2_SUMMARY=y # CONFIG_JFFS2_FS_XATTR is not set # CONFIG_JFFS2_SYSFS is not set @@ -1467,19 +1476,12 @@ CONFIG_JFFS2_CMODE_PRIORITY=y # CONFIG_JFFS2_CMODE_SIZE is not set # CONFIG_JFFS2_CMODE_FAVOURLZO is not set CONFIG_CRAMFS=m -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_SQUASHFS_VMALLOC is not set # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set - -# -# Network File Systems -# +CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=m CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set @@ -1533,10 +1535,6 @@ CONFIG_MSDOS_PARTITION=y # CONFIG_KARMA_PARTITION is not set # CONFIG_EFI_PARTITION is not set # CONFIG_SYSV68_PARTITION is not set - -# -# Native Language Support -# CONFIG_NLS=y CONFIG_NLS_DEFAULT="cp437" CONFIG_NLS_CODEPAGE_437=y @@ -1577,22 +1575,17 @@ CONFIG_NLS_ISO8859_15=m CONFIG_NLS_KOI8_R=m CONFIG_NLS_KOI8_U=m CONFIG_NLS_UTF8=y - -# -# Distributed Lock Manager -# # CONFIG_DLM is not set - -# -# Profiling support -# +CONFIG_INSTRUMENTATION=y CONFIG_PROFILING=y CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set # # Kernel hacking # # CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_MAGIC_SYSRQ=y # CONFIG_UNUSED_SYMBOLS is not set @@ -1620,10 +1613,13 @@ CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set CONFIG_FRAME_POINTER=y # CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_RCU_TORTURE_TEST is not set # CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set # CONFIG_DEBUG_USER is not set CONFIG_DEBUG_ERRORS=y # CONFIG_DEBUG_LL is not set @@ -1633,6 +1629,7 @@ CONFIG_DEBUG_ERRORS=y # # CONFIG_KEYS is not set # CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set CONFIG_CRYPTO=y CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_BLKCIPHER=m @@ -1653,6 +1650,7 @@ CONFIG_CRYPTO_ECB=m CONFIG_CRYPTO_CBC=m CONFIG_CRYPTO_PCBC=m # CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set # CONFIG_CRYPTO_CRYPTD is not set CONFIG_CRYPTO_DES=m # CONFIG_CRYPTO_FCRYPT is not set @@ -1667,12 +1665,14 @@ CONFIG_CRYPTO_TEA=m CONFIG_CRYPTO_ARC4=m CONFIG_CRYPTO_KHAZAD=m CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_LZO is not set CONFIG_CRYPTO_MICHAEL_MIC=m CONFIG_CRYPTO_CRC32C=m # CONFIG_CRYPTO_CAMELLIA is not set CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set CONFIG_CRYPTO_HW=y # diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-collie b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-collie index eac257683a..9b3cb6ae34 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-collie +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-collie @@ -1,18 +1,12 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.23-git9 -# Fri Jan 11 16:13:34 2008 +# Linux kernel version: 2.6.20.4 +# Fri Apr 6 23:20:59 2007 # CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y -CONFIG_GENERIC_GPIO=y # CONFIG_GENERIC_TIME is not set -# CONFIG_GENERIC_CLOCKEVENTS is not set CONFIG_MMU=y -# CONFIG_NO_IOPORT is not set CONFIG_GENERIC_HARDIRQS=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_LOCKDEP_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_GENERIC_IRQ_PROBE=y @@ -21,36 +15,36 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y # CONFIG_ARCH_HAS_ILOG2_U64 is not set CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ZONE_DMA=y CONFIG_ARCH_MTD_XIP=y CONFIG_VECTORS_BASE=0xffff0000 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # -# General setup +# Code maturity level options # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_SWAP=y CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_IPC_NS is not set # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set +# CONFIG_UTS_NS is not set # CONFIG_AUDIT is not set # CONFIG_IKCONFIG is not set -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_FAIR_USER_SCHED=y # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set -# CONFIG_BLK_DEV_INITRD is not set +CONFIG_INITRAMFS_SOURCE="" CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_EMBEDDED=y @@ -65,29 +59,32 @@ CONFIG_BUG=y # CONFIG_ELF_CORE is not set CONFIG_BASE_FULL=y CONFIG_FUTEX=y -CONFIG_ANON_INODES=y CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set +CONFIG_VM_EVENT_COUNTERS=y CONFIG_RT_MUTEXES=y # CONFIG_TINY_SHMEM is not set CONFIG_BASE_SMALL=0 +# CONFIG_SLOB is not set + +# +# Loadable module support +# CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set CONFIG_KMOD=y + +# +# Block layer +# CONFIG_BLOCK=y # CONFIG_LBD is not set # CONFIG_BLK_DEV_IO_TRACE is not set # CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set # # IO Schedulers @@ -119,16 +116,13 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" # CONFIG_ARCH_NETX is not set # CONFIG_ARCH_H720X is not set # CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set # CONFIG_ARCH_IOP32X is not set # CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_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_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set # CONFIG_ARCH_PNX4008 is not set # CONFIG_ARCH_PXA is not set # CONFIG_ARCH_RPC is not set @@ -136,7 +130,6 @@ CONFIG_ARCH_SA1100=y # CONFIG_ARCH_S3C2410 is not set # CONFIG_ARCH_SHARK is not set # CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP is not set # @@ -158,14 +151,6 @@ CONFIG_SA1100_COLLIE=y # CONFIG_SA1100_SSP is not set # -# Boot options -# - -# -# Power management -# - -# # Processor Type # CONFIG_CPU_32=y @@ -183,25 +168,21 @@ CONFIG_CPU_CP15_MMU=y # # CONFIG_CPU_ICACHE_DISABLE is not set # CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_OUTER_CACHE is not set CONFIG_SHARP_LOCOMO=y CONFIG_SHARP_PARAM=y -CONFIG_SHARPSL_PM=y CONFIG_SHARP_SCOOP=y # # Bus support # CONFIG_ISA=y -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set # # PCCARD (PCMCIA/CardBus) support # -CONFIG_PCCARD=m +CONFIG_PCCARD=y # CONFIG_PCMCIA_DEBUG is not set -CONFIG_PCMCIA=m +CONFIG_PCMCIA=y CONFIG_PCMCIA_LOAD_CIS=y CONFIG_PCMCIA_IOCTL=y @@ -210,12 +191,11 @@ CONFIG_PCMCIA_IOCTL=y # # CONFIG_I82365 is not set # CONFIG_TCIC is not set -CONFIG_PCMCIA_SA1100=m +CONFIG_PCMCIA_SA1100=y # # Kernel Features # -# CONFIG_TICK_ONESHOT is not set CONFIG_PREEMPT=y CONFIG_NO_IDLE_HZ=y CONFIG_HZ=100 @@ -232,9 +212,6 @@ CONFIG_NEED_MULTIPLE_NODES=y # CONFIG_SPARSEMEM_STATIC is not set CONFIG_SPLIT_PTLOCK_CPUS=4096 # CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y # CONFIG_LEDS is not set CONFIG_ALIGNMENT_TRAP=y @@ -243,7 +220,6 @@ CONFIG_ALIGNMENT_TRAP=y # CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=64M fbcon=rotate:1 dyntick=enable debug" # CONFIG_XIP_KERNEL is not set CONFIG_KEXEC=y @@ -277,10 +253,8 @@ CONFIG_BINFMT_MISC=m CONFIG_PM=y # CONFIG_PM_LEGACY is not set # CONFIG_PM_DEBUG is not set -CONFIG_PM_SLEEP=y -CONFIG_SUSPEND_UP_POSSIBLE=y -CONFIG_SUSPEND=y -CONFIG_APM_EMULATION=y +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM=y # # Networking @@ -290,13 +264,13 @@ CONFIG_NET=y # # Networking options # +# CONFIG_NETDEBUG is not set CONFIG_PACKET=m CONFIG_PACKET_MMAP=y -CONFIG_UNIX=m +CONFIG_UNIX=y CONFIG_XFRM=y CONFIG_XFRM_USER=m # CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set # CONFIG_NET_KEY is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set @@ -311,22 +285,24 @@ CONFIG_SYN_COOKIES=y # CONFIG_INET_ESP is not set # CONFIG_INET_IPCOMP is not set # CONFIG_INET_XFRM_TUNNEL is not set -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -# CONFIG_INET_LRO is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m # CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set + +# +# IP: Virtual Server Configuration +# # CONFIG_IP_VS is not set CONFIG_IPV6=m # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set CONFIG_INET6_AH=m CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m @@ -349,23 +325,31 @@ CONFIG_NETFILTER=y # # CONFIG_NETFILTER_NETLINK is not set # CONFIG_NF_CONNTRACK_ENABLED is not set -# CONFIG_NF_CONNTRACK is not set # CONFIG_NETFILTER_XTABLES is not set # # IP: Netfilter Configuration # CONFIG_IP_NF_QUEUE=m -# CONFIG_IP_NF_IPTABLES is not set -# CONFIG_IP_NF_ARPTABLES is not set # # IPv6: Netfilter Configuration (EXPERIMENTAL) # # CONFIG_IP6_NF_QUEUE is not set -# CONFIG_IP6_NF_IPTABLES is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# # CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# # CONFIG_IP_SCTP is not set + +# +# TIPC Configuration (EXPERIMENTAL) +# # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_BRIDGE is not set @@ -419,9 +403,6 @@ CONFIG_IRTTY_SIR=m # Dongle support # # CONFIG_DONGLE is not set -# CONFIG_KINGSUN_DONGLE is not set -# CONFIG_KSDAZZLE_DONGLE is not set -# CONFIG_KS959_DONGLE is not set # # Old SIR device drivers @@ -464,22 +445,13 @@ CONFIG_BT_HCIBT3C=m CONFIG_BT_HCIBLUECARD=m CONFIG_BT_HCIBTUART=m CONFIG_BT_HCIVHCI=m -# CONFIG_AF_RXRPC is not set - -# -# Wireless -# -# CONFIG_CFG80211 is not set -CONFIG_WIRELESS_EXT=y -# CONFIG_MAC80211 is not set CONFIG_IEEE80211=m # CONFIG_IEEE80211_DEBUG is not set CONFIG_IEEE80211_CRYPT_WEP=m CONFIG_IEEE80211_CRYPT_CCMP=m CONFIG_IEEE80211_CRYPT_TKIP=m # CONFIG_IEEE80211_SOFTMAC is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set +CONFIG_WIRELESS_EXT=y # # Device Drivers @@ -488,14 +460,20 @@ CONFIG_IEEE80211_CRYPT_TKIP=m # # Generic Driver Options # -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y # CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set + +# +# 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 @@ -515,7 +493,6 @@ CONFIG_MTD_BLOCK=y # CONFIG_INFTL is not set # CONFIG_RFD_FTL is not set # CONFIG_SSFDC is not set -# CONFIG_MTD_OOPS is not set # # RAM/ROM/Flash chip drivers @@ -535,6 +512,7 @@ CONFIG_MTD_CFI_I2=y # CONFIG_MTD_RAM is not set CONFIG_MTD_ROM=y # CONFIG_MTD_ABSENT is not set +CONFIG_MTD_OBSOLETE_CHIPS=y CONFIG_MTD_SHARP=y # @@ -561,26 +539,43 @@ CONFIG_MTD_SA1100=y # CONFIG_MTD_DOC2000 is not set # CONFIG_MTD_DOC2001 is not set # CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# # CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# # CONFIG_MTD_ONENAND is not set # -# UBI - Unsorted block images +# Parallel port support # -# CONFIG_MTD_UBI is not set # CONFIG_PARPORT is not set + +# +# Plug and Play support +# # CONFIG_PNP is not set -CONFIG_BLK_DEV=y + +# +# Block devices +# # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_UB is not set # CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set + +# +# ATA/ATAPI/MFM/RLL support +# CONFIG_IDE=m CONFIG_IDE_MAX_HWIFS=4 CONFIG_BLK_DEV_IDE=m @@ -597,29 +592,15 @@ CONFIG_BLK_DEV_IDECS=m # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set # CONFIG_IDE_TASK_IOCTL is not set -CONFIG_IDE_PROC_FS=y # # IDE chipset support/bugfixes # # CONFIG_IDE_GENERIC is not set -# CONFIG_BLK_DEV_PLATFORM is not set # CONFIG_IDE_ARM is not set - -# -# Other IDE chipsets support -# - -# -# Note: most of these also require special kernel boot parameters -# -# CONFIG_BLK_DEV_4DRIVES is not set -# CONFIG_BLK_DEV_ALI14XX is not set -# CONFIG_BLK_DEV_DTC2278 is not set -# CONFIG_BLK_DEV_HT6560B is not set -# CONFIG_BLK_DEV_QD65XX is not set -# CONFIG_BLK_DEV_UMC8672 is not set +# CONFIG_IDE_CHIPSETS is not set # CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_IDEDMA_AUTO is not set # CONFIG_BLK_DEV_HD is not set # @@ -627,7 +608,6 @@ CONFIG_IDE_PROC_FS=y # # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=m -CONFIG_SCSI_DMA=y # CONFIG_SCSI_TGT is not set # CONFIG_SCSI_NETLINK is not set CONFIG_SCSI_PROC_FS=y @@ -650,7 +630,6 @@ CONFIG_SCSI_MULTI_LUN=y # CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_SCAN_ASYNC is not set -CONFIG_SCSI_WAIT_SCAN=m # # SCSI Transports @@ -658,13 +637,15 @@ CONFIG_SCSI_WAIT_SCAN=m # 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 -# CONFIG_SCSI_SRP_ATTRS is not set -CONFIG_SCSI_LOWLEVEL=y + +# +# SCSI low-level drivers +# # CONFIG_ISCSI_TCP is not set # CONFIG_SCSI_AHA152X is not set # CONFIG_SCSI_AIC7XXX_OLD is not set -# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_DTC3280 is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set @@ -677,8 +658,24 @@ CONFIG_SCSI_LOWLEVEL=y # CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_NINJA_SCSI is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set + +# +# Serial ATA (prod) and Parallel ATA (experimental) drivers +# # CONFIG_ATA is not set + +# +# Multi-device support (RAID and LVM) +# CONFIG_MD=y # CONFIG_BLK_DEV_MD is not set CONFIG_BLK_DEV_DM=m @@ -689,21 +686,44 @@ CONFIG_DM_MIRROR=m CONFIG_DM_ZERO=m CONFIG_DM_MULTIPATH=m CONFIG_DM_MULTIPATH_EMC=m -# CONFIG_DM_MULTIPATH_RDAC is not set -# CONFIG_DM_DELAY 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_NETDEVICES_MULTIQUEUE is not set # CONFIG_DUMMY is not set # CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set CONFIG_TUN=m -# CONFIG_VETH is not set + +# +# ARCnet devices +# # CONFIG_ARCNET is not set + +# +# PHY device support +# # CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# CONFIG_NET_ETHERNET=y CONFIG_MII=m -# CONFIG_AX88796 is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_SMC91X is not set @@ -713,47 +733,64 @@ CONFIG_MII=m # CONFIG_DEPCA is not set # CONFIG_HP100 is not set # CONFIG_NET_ISA is not set -# CONFIG_IBM_NEW_EMAC_ZMII is not set -# CONFIG_IBM_NEW_EMAC_RGMII is not set -# CONFIG_IBM_NEW_EMAC_TAH is not set -# CONFIG_IBM_NEW_EMAC_EMAC4 is not set # CONFIG_NET_PCI is not set -# CONFIG_B44 is not set -CONFIG_NETDEV_1000=y -CONFIG_NETDEV_10000=y + +# +# Ethernet (1000 Mbit) +# + +# +# Ethernet (10000 Mbit) +# + +# +# Token Ring devices +# # CONFIG_TR is not set # -# Wireless LAN +# Wireless LAN (non-hamradio) # -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set # -# USB Network Adapters +# Obsolete Wireless cards support (pre-802.11) +# +# CONFIG_STRIP is not set +# CONFIG_ARLAN is not set +# CONFIG_WAVELAN is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_PCMCIA_NETWAVE is not set + +# +# Wireless 802.11 Frequency Hopping cards support +# +# CONFIG_PCMCIA_RAYCS is not set + +# +# Wireless 802.11b ISA/PCI cards support +# +CONFIG_HERMES=m +# CONFIG_ATMEL is not set + +# +# Wireless 802.11b Pcmcia/Cardbus cards support +# +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_AIRO_CS is not set +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m +CONFIG_NET_WIRELESS=y + +# +# PCMCIA network device support # -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -# CONFIG_USB_NET_DM9601 is not set -# CONFIG_USB_NET_GL620A is not set -CONFIG_USB_NET_NET1080=m -# CONFIG_USB_NET_PLUSB is not set -# CONFIG_USB_NET_MCS7830 is not set -# CONFIG_USB_NET_RNDIS_HOST is not set -CONFIG_USB_NET_CDC_SUBSET=m -# CONFIG_USB_ALI_M5632 is not set -# CONFIG_USB_AN2720 is not set -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -# CONFIG_USB_EPSON2888 is not set -# CONFIG_USB_KC2190 is not set -CONFIG_USB_NET_ZAURUS=m CONFIG_NET_PCMCIA=y # CONFIG_PCMCIA_3C589 is not set # CONFIG_PCMCIA_3C574 is not set @@ -763,6 +800,10 @@ CONFIG_PCMCIA_PCNET=m # CONFIG_PCMCIA_SMC91C92 is not set # CONFIG_PCMCIA_XIRC2PS is not set # CONFIG_PCMCIA_AXNET is not set + +# +# Wan interfaces +# # CONFIG_WAN is not set CONFIG_PPP=m # CONFIG_PPP_MULTILINK is not set @@ -773,13 +814,16 @@ CONFIG_PPP_DEFLATE=m CONFIG_PPP_BSDCOMP=m # CONFIG_PPP_MPPE is not set # CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set # CONFIG_SLIP is not set CONFIG_SLHC=m # CONFIG_SHAPER is not set # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# # CONFIG_ISDN is not set # @@ -787,19 +831,19 @@ CONFIG_SLHC=m # CONFIG_INPUT=y # CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set # # Userland interfaces # -CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV=y # CONFIG_INPUT_MOUSEDEV_PSAUX is not set CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640 # CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set -CONFIG_INPUT_POWER=m +CONFIG_INPUT_POWER=y # # Input Device Drivers @@ -808,14 +852,12 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_LOCOMO=m +CONFIG_KEYBOARD_LOCOMO=y # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_GPIO is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set @@ -852,7 +894,15 @@ CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set + +# +# IPMI +# # CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# # CONFIG_WATCHDOG is not set CONFIG_HW_RANDOM=m # CONFIG_NVRAM is not set @@ -866,10 +916,16 @@ CONFIG_HW_RANDOM=m # CONFIG_CARDMAN_4000 is not set # CONFIG_CARDMAN_4040 is not set # CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# # CONFIG_TCG_TPM is not set -CONFIG_DEVPORT=y + +# +# I2C support +# CONFIG_I2C=m -CONFIG_I2C_BOARDINFO=y # CONFIG_I2C_CHARDEV is not set # @@ -883,13 +939,9 @@ CONFIG_I2C_BOARDINFO=y # I2C Hardware Bus support # # CONFIG_I2C_ELEKTOR is not set -# CONFIG_I2C_GPIO is not set # CONFIG_I2C_OCORES is not set # CONFIG_I2C_PARPORT_LIGHT is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set # CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set # CONFIG_I2C_PCA_ISA is not set # @@ -897,13 +949,11 @@ CONFIG_I2C_BOARDINFO=y # # CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set # CONFIG_SENSORS_EEPROM is not set # CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set @@ -925,23 +975,22 @@ CONFIG_SPI_LOCOMO=m # # SPI Protocol Masters # -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set + +# +# Dallas's 1-wire bus +# # CONFIG_W1 is not set -# CONFIG_POWER_SUPPLY is not set -# CONFIG_HWMON is not set # -# Sonics Silicon Backplane +# Hardware Monitoring support # -CONFIG_SSB_POSSIBLE=y -# CONFIG_SSB is not set +# CONFIG_HWMON is not set +# CONFIG_HWMON_VID is not set # -# Multifunction device drivers +# Misc devices # -# CONFIG_MFD_SM501 is not set +# CONFIG_TIFM_CORE is not set # # Multimedia Capabilities Port drivers @@ -949,31 +998,59 @@ CONFIG_SSB_POSSIBLE=y CONFIG_MCP=y CONFIG_MCP_SA11X0=y CONFIG_MCP_UCB1200=y -# CONFIG_MCP_UCB1200_AUDIO is not set CONFIG_MCP_UCB1200_TS=m -CONFIG_MCP_COLLIE_TS=m # # Multi-Function Devices # # +# LED devices +# +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_LOCOMO=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +# CONFIG_LEDS_TRIGGER_IDE_DISK is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=m + +# # Multimedia devices # CONFIG_VIDEO_DEV=m CONFIG_VIDEO_V4L1=y CONFIG_VIDEO_V4L1_COMPAT=y CONFIG_VIDEO_V4L2=y -CONFIG_VIDEO_CAPTURE_DRIVERS=y + +# +# Video Capture Adapters +# + +# +# Video Capture Adapters +# # CONFIG_VIDEO_ADV_DEBUG is not set CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set # CONFIG_VIDEO_PMS is not set # CONFIG_VIDEO_CPIA is not set # CONFIG_VIDEO_CPIA2 is not set # CONFIG_VIDEO_SAA5246A is not set # CONFIG_VIDEO_SAA5249 is not set # CONFIG_TUNER_3036 is not set -CONFIG_V4L_USB_DRIVERS=y + +# +# V4L USB devices +# # CONFIG_VIDEO_PVRUSB2 is not set # CONFIG_VIDEO_EM28XX is not set # CONFIG_VIDEO_USBVISION is not set @@ -990,8 +1067,10 @@ CONFIG_V4L_USB_DRIVERS=y # CONFIG_USB_STV680 is not set # CONFIG_USB_ZC0301 is not set # CONFIG_USB_PWC is not set -# CONFIG_USB_ZR364XX is not set -CONFIG_RADIO_ADAPTERS=y + +# +# Radio Adapters +# # CONFIG_RADIO_CADET is not set # CONFIG_RADIO_RTRACK is not set # CONFIG_RADIO_RTRACK2 is not set @@ -1004,46 +1083,25 @@ CONFIG_RADIO_ADAPTERS=y # CONFIG_RADIO_TYPHOON is not set # CONFIG_RADIO_ZOLTRIX is not set # CONFIG_USB_DSBR is not set -# CONFIG_DVB_CORE is not set -CONFIG_DAB=y -# CONFIG_USB_DABUSB is not set # -# Graphics support +# Digital Video Broadcasting Devices # -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=m -# CONFIG_LCD_LTV350QV is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_CORGI is not set -CONFIG_BACKLIGHT_LOCOMO=y +# CONFIG_DVB is not set +# CONFIG_USB_DABUSB is not set # -# Display device support +# Graphics support # -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=m -CONFIG_FB=y CONFIG_FIRMWARE_EDID=y -# CONFIG_FB_DDC is not set +CONFIG_FB=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set # CONFIG_FB_BACKLIGHT is not set # CONFIG_FB_MODE_HELPERS is not set # CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# CONFIG_FB_SA1100=y # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_VIRTUAL is not set @@ -1055,7 +1113,6 @@ CONFIG_FB_SA1100=y # CONFIG_MDA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_FONTS=y CONFIG_FONT_8x8=y @@ -1068,7 +1125,17 @@ CONFIG_FONT_8x8=y # CONFIG_FONT_SUN8x16 is not set # CONFIG_FONT_SUN12x22 is not set # CONFIG_FONT_10x18 is not set + +# +# Logo configuration +# # CONFIG_LOGO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DEVICE=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_DEVICE=y +CONFIG_BACKLIGHT_LOCOMO=y # # Sound @@ -1108,7 +1175,6 @@ CONFIG_SND_DUMMY=m # USB devices # # CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set # # PCMCIA devices @@ -1117,37 +1183,23 @@ CONFIG_SND_DUMMY=m # CONFIG_SND_PDAUDIOCF is not set # -# System on Chip audio support +# SoC audio support # # CONFIG_SND_SOC is not set # -# SoC Audio support for SuperH -# - -# # Open Sound System # # CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=m -# CONFIG_HID_DEBUG is not set -# CONFIG_HIDRAW is not set # -# USB Input Devices +# HID Devices # -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -# CONFIG_USB_HIDDEV is not set +CONFIG_HID=m # -# USB HID Boot Protocol drivers +# USB support # -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y # CONFIG_USB_ARCH_HAS_OHCI is not set # CONFIG_USB_ARCH_HAS_EHCI is not set @@ -1158,10 +1210,9 @@ CONFIG_USB=m # Miscellaneous USB options # CONFIG_USB_DEVICEFS=y -CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_BANDWIDTH is not set # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_SUSPEND is not set -# CONFIG_USB_PERSIST is not set # CONFIG_USB_OTG is not set # @@ -1170,7 +1221,6 @@ CONFIG_USB_DEVICE_CLASS=y # CONFIG_USB_ISP116X_HCD is not set CONFIG_USB_SL811_HCD=m CONFIG_USB_SL811_CS=m -# CONFIG_USB_R8A66597_HCD is not set # # USB Device Class drivers @@ -1200,10 +1250,60 @@ CONFIG_USB_STORAGE=m # CONFIG_USB_LIBUSUAL is not set # +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_ACECAD is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_TOUCHSCREEN is not set +# CONFIG_USB_YEALINK is not set +# CONFIG_USB_XPAD is not set +# CONFIG_USB_ATI_REMOTE is not set +# CONFIG_USB_ATI_REMOTE2 is not set +# CONFIG_USB_KEYSPAN_REMOTE is not set +# CONFIG_USB_APPLETOUCH is not set + +# # USB Imaging devices # # CONFIG_USB_MDC800 is not set # CONFIG_USB_MICROTEK is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +CONFIG_USB_NET_CDC_SUBSET=m +# CONFIG_USB_ALI_M5632 is not set +# CONFIG_USB_AN2720 is not set +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +# CONFIG_USB_EPSON2888 is not set +CONFIG_USB_NET_ZAURUS=m CONFIG_USB_MON=y # @@ -1219,7 +1319,6 @@ CONFIG_USB_SERIAL_GENERIC=y CONFIG_USB_SERIAL_AIRPRIME=m CONFIG_USB_SERIAL_ARK3116=m CONFIG_USB_SERIAL_BELKIN=m -# CONFIG_USB_SERIAL_CH341 is not set CONFIG_USB_SERIAL_WHITEHEAT=m CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m CONFIG_USB_SERIAL_CP2101=m @@ -1255,7 +1354,6 @@ CONFIG_USB_SERIAL_MCT_U232=m # CONFIG_USB_SERIAL_MOS7840 is not set # CONFIG_USB_SERIAL_NAVMAN is not set CONFIG_USB_SERIAL_PL2303=m -# CONFIG_USB_SERIAL_OTI6858 is not set CONFIG_USB_SERIAL_HP4X=m CONFIG_USB_SERIAL_SAFE=m # CONFIG_USB_SERIAL_SAFE_PADDED is not set @@ -1278,7 +1376,6 @@ CONFIG_USB_EZUSB=y # CONFIG_USB_RIO500 is not set # CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set -# CONFIG_USB_BERRY_CHARGE is not set # CONFIG_USB_LED is not set # CONFIG_USB_CYPRESS_CY7C63 is not set # CONFIG_USB_CYTHERM is not set @@ -1288,7 +1385,6 @@ CONFIG_USB_EZUSB=y # CONFIG_USB_APPLEDISPLAY is not set # CONFIG_USB_LD is not set # CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set # @@ -1299,39 +1395,36 @@ CONFIG_USB_EZUSB=y # USB Gadget Support # # CONFIG_USB_GADGET is not set -CONFIG_MMC=m -CONFIG_MMC_DEBUG=y -# CONFIG_MMC_UNSAFE_RESUME is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set # -# MMC/SD Card Drivers +# MMC/SD Card support # +CONFIG_MMC=m +CONFIG_MMC_DEBUG=y CONFIG_MMC_BLOCK=m -CONFIG_MMC_BLOCK_BOUNCE=y -# CONFIG_SDIO_UART is not set - -# -# MMC/SD Host Controller Drivers -# +# CONFIG_MMC_TIFM_SD is not set CONFIG_MMC_SPI=m -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=m +CONFIG_MMC_UNSAFE_RESUME=y -# -# LED drivers -# -CONFIG_LEDS_LOCOMO=m -# CONFIG_LEDS_GPIO is not set # -# LED Triggers +# Real Time Clock # -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=m -# CONFIG_LEDS_TRIGGER_IDE_DISK is not set -CONFIG_LEDS_TRIGGER_HEARTBEAT=m CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=m +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set # # RTC interfaces @@ -1340,57 +1433,27 @@ CONFIG_RTC_INTF_SYSFS=y CONFIG_RTC_INTF_PROC=y CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set # -# I2C RTC drivers +# RTC drivers # +# CONFIG_RTC_DRV_X1205 is not set # CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_DS1553 is not set # CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_PCF8563 is not set # CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set - -# -# SPI RTC drivers -# # CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_RS5C372 is not set # CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T59 is not set +CONFIG_RTC_DRV_SA1100=y +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_MAX6902 is not set # CONFIG_RTC_DRV_V3020 is not set # -# on-CPU RTC drivers -# -CONFIG_RTC_DRV_SA1100=m - -# -# DMA Engine support -# -# CONFIG_DMA_ENGINE is not set - -# -# DMA Clients -# - -# -# DMA Devices -# - -# # File systems # CONFIG_EXT2_FS=m @@ -1455,13 +1518,11 @@ CONFIG_RAMFS=y CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_FS_WBUF_VERIFY is not set # CONFIG_JFFS2_SUMMARY is not set # CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_SYSFS is not set # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set CONFIG_JFFS2_ZLIB=y -# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_LZO=y CONFIG_JFFS2_RTIME=y # CONFIG_JFFS2_RUBIN is not set CONFIG_CRAMFS=m @@ -1489,7 +1550,6 @@ CONFIG_LOCKD_V4=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=m CONFIG_SUNRPC_GSS=m -# CONFIG_SUNRPC_BIND34 is not set CONFIG_RPCSEC_GSS_KRB5=m # CONFIG_RPCSEC_GSS_SPKM3 is not set CONFIG_SMB_FS=m @@ -1504,6 +1564,7 @@ CONFIG_CIFS=m # 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 @@ -1525,14 +1586,13 @@ CONFIG_MSDOS_PARTITION=y # CONFIG_SUN_PARTITION is not set # CONFIG_KARMA_PARTITION is not set # CONFIG_EFI_PARTITION is not set -# CONFIG_SYSV68_PARTITION is not set # # Native Language Support # -CONFIG_NLS=m +CONFIG_NLS=y CONFIG_NLS_DEFAULT="cp437" -CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_737=m CONFIG_NLS_CODEPAGE_775=m CONFIG_NLS_CODEPAGE_850=m @@ -1556,7 +1616,7 @@ CONFIG_NLS_ISO8859_8=m CONFIG_NLS_CODEPAGE_1250=m CONFIG_NLS_CODEPAGE_1251=m CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_2=m CONFIG_NLS_ISO8859_3=m CONFIG_NLS_ISO8859_4=m @@ -1585,26 +1645,22 @@ CONFIG_NLS_UTF8=m # Kernel hacking # # CONFIG_PRINTK_TIME is not set -# CONFIG_ENABLE_MUST_CHECK is not set -# CONFIG_MAGIC_SYSRQ is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y # CONFIG_UNUSED_SYMBOLS is not set # CONFIG_DEBUG_FS is not set # CONFIG_HEADERS_CHECK is not set CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -# CONFIG_DETECT_SOFTLOCKUP is not set -# CONFIG_SCHED_DEBUG is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_DETECT_SOFTLOCKUP=y # CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set # CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_PREEMPT is not set # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RWSEMS is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_DEBUG_KOBJECT is not set @@ -1615,7 +1671,6 @@ CONFIG_DEBUG_KERNEL=y CONFIG_FRAME_POINTER=y # CONFIG_FORCED_INLINING is not set # CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_FAULT_INJECTION is not set # CONFIG_DEBUG_USER is not set CONFIG_DEBUG_ERRORS=y # CONFIG_DEBUG_LL is not set @@ -1625,11 +1680,15 @@ CONFIG_DEBUG_ERRORS=y # # CONFIG_KEYS is not set # CONFIG_SECURITY is not set + +# +# Cryptographic options +# CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_BLKCIPHER=m CONFIG_CRYPTO_HASH=m -CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_HMAC=m # CONFIG_CRYPTO_XCBC is not set CONFIG_CRYPTO_NULL=m @@ -1643,12 +1702,8 @@ CONFIG_CRYPTO_WP512=m # CONFIG_CRYPTO_GF128MUL is not set CONFIG_CRYPTO_ECB=m CONFIG_CRYPTO_CBC=m -# CONFIG_CRYPTO_PCBC is not set # CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_XTS is not set -# CONFIG_CRYPTO_CRYPTD is not set CONFIG_CRYPTO_DES=m -# CONFIG_CRYPTO_FCRYPT is not set CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_TWOFISH=m CONFIG_CRYPTO_TWOFISH_COMMON=m @@ -1660,15 +1715,15 @@ CONFIG_CRYPTO_TEA=m CONFIG_CRYPTO_ARC4=m CONFIG_CRYPTO_KHAZAD=m CONFIG_CRYPTO_ANUBIS=m -# CONFIG_CRYPTO_SEED is not set CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_LZO is not set CONFIG_CRYPTO_MICHAEL_MIC=m CONFIG_CRYPTO_CRC32C=m -# CONFIG_CRYPTO_CAMELLIA is not set CONFIG_CRYPTO_TEST=m -# CONFIG_CRYPTO_AUTHENC is not set -CONFIG_CRYPTO_HW=y + +# +# Hardware crypto devices +# # # Library routines @@ -1676,13 +1731,11 @@ CONFIG_CRYPTO_HW=y CONFIG_BITREVERSE=y CONFIG_CRC_CCITT=m CONFIG_CRC16=m -CONFIG_CRC_ITU_T=m CONFIG_CRC32=y -CONFIG_CRC7=m CONFIG_LIBCRC32C=m +CONFIG_LZO=y CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y +CONFIG_IOMAP_COPY=y +# CONFIG_SHARPSL_RC is not set diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-htcuniversal index 2b02621499..2b02621499 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-htcuniversal +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-htcuniversal diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-hx2000 b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-hx2000 index ee05db4e5a..ee05db4e5a 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-hx2000 +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-hx2000 diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-poodle b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-poodle index 387b5e9bff..5f62891410 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-poodle +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-poodle @@ -28,7 +28,7 @@ CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_SYSCTL=y # CONFIG_AUDIT is not set # CONFIG_IKCONFIG is not set diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemuarm b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-qemuarm index 35cf3f5b17..35cf3f5b17 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemuarm +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-qemuarm diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-qemux86 index e9eb83e2dd..e9eb83e2dd 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemux86 +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-qemux86 diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-spitz b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-spitz index 8e044e6a14..6116d5b215 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-spitz +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-spitz @@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_USER_NS is not set # CONFIG_AUDIT is not set diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-tosa b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-tosa index 74fc076608..8993aea052 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-tosa +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-tosa @@ -26,7 +26,7 @@ CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y -# CONFIG_BSD_PROCESS_ACCT_V3 is not set +CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_SYSCTL=y # CONFIG_AUDIT is not set # CONFIG_IKCONFIG is not set diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-zylonite b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-zylonite index 0321704a1f..0321704a1f 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-zylonite +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/defconfig-zylonite diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/hostap-monitor-mode.patch index 641fd19e50..641fd19e50 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/hostap-monitor-mode.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/hostap-monitor-mode.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni-acx.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/htcuni-acx.patch index 769674c935..769674c935 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni-acx.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/htcuni-acx.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/htcuni.patch index 4d746749c5..4d746749c5 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/htcuni.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/hx2750_base-r31.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/hx2750_base-r31.patch new file mode 100644 index 0000000000..5d58bcf55d --- /dev/null +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/hx2750_base-r31.patch @@ -0,0 +1,1094 @@ +--- + arch/arm/mach-pxa/Kconfig | 10 + arch/arm/mach-pxa/Makefile | 1 + arch/arm/mach-pxa/hx2750.c | 450 ++++++++++++++++++++++++++++++++++++++ + arch/arm/mach-pxa/hx2750_test.c | 433 ++++++++++++++++++++++++++++++++++++ + arch/arm/mach-pxa/pm.c | 5 + arch/arm/mach-pxa/pxa25x.c | 4 + arch/arm/mach-pxa/pxa27x.c | 4 + include/asm-arm/arch-pxa/hx2750.h | 90 +++++++ + 8 files changed, 995 insertions(+), 2 deletions(-) + +--- /dev/null ++++ linux-2.6.24-rc1/include/asm-arm/arch-pxa/hx2750.h +@@ -0,0 +1,90 @@ ++/* ++ * Hardware specific definitions for iPAQ hx2750 ++ * ++ * Copyright 2005 Openedhand Ltd. ++ * ++ * Author: Richard Purdie <richard@o-hand.com> ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++#ifndef __ASM_ARCH_HX2750_H ++#define __ASM_ARCH_HX2750_H 1 ++ ++/* ++ * HX2750 (Non Standard) GPIO Definitions ++ */ ++ ++#define HX2750_GPIO_KEYPWR (0) /* Power button */ ++#define HX2750_GPIO_BATTCOVER1 (9) /* Battery Cover Switch */ ++#define HX2750_GPIO_CF_IRQ (11) /* CF IRQ? */ ++#define HX2750_GPIO_USBCONNECT (12) /* USB Connected? */ ++#define HX2750_GPIO_CF_DETECT (13) /* CF Card Detect? */ ++#define HX2750_GPIO_EXTPWR (14) /* External Power Detect */ ++#define HX2750_GPIO_BATLVL (15) /* Battery Level Detect */ ++#define HX2750_GPIO_CF_PWR (17) /* CF Power? */ ++#define HX2750_GPIO_SR_STROBE (18) /* Shift Register Strobe */ ++#define HX2750_GPIO_CHARGE (22) /* Charging Enable (active low) */ ++#define HX2750_GPIO_TSC2101_SS (24) /* TSC2101 SS# */ ++#define HX2750_GPIO_BTPWR (27) /* Bluetooth Power? */ ++#define HX2750_GPIO_BATTCOVER2 (33) /* Battery Cover Switch */ ++#define HX2750_GPIO_SD_DETECT (38) /* MMC Card Detect */ ++#define HX2750_GPIO_SR_CLK1 (52) /* Shift Register Clock */ ++#define HX2750_GPIO_SR_CLK2 (53) ++#define HX2750_GPIO_CF_WIFIIRQ (54) /* CF Wifi IRQ? */ ++#define HX2750_GPIO_GPIO_DIN (88) /* Shift Register Data */ ++#define HX2750_GPIO_KEYLEFT (90) /* Left button */ ++#define HX2750_GPIO_KEYRIGHT (91) /* Right button */ ++#define HX2750_GPIO_KEYCAL (93) /* Calander button */ ++#define HX2750_GPIO_KEYTASK (94) /* Task button */ ++#define HX2750_GPIO_KEYSIDE (95) /* Side button */ ++#define HX2750_GPIO_KEYENTER (96) /* Enter Button*/ ++#define HX2750_GPIO_KEYCON (97) /* Contacts button */ ++#define HX2750_GPIO_KEYMAIL (98) /* Mail button */ ++#define HX2750_GPIO_BIOPWR (99) /* BIO Reader Power? */ ++#define HX2750_GPIO_KEYUP (100) /* Up button */ ++#define HX2750_GPIO_KEYDOWN (101) /* Down button*/ ++#define HX2750_GPIO_SD_READONLY (103) /* MMC/SD Write Protection */ ++#define HX2750_GPIO_LEDMAIL (106) /* Green Mail LED */ ++#define HX2750_GPIO_HP_JACK (108) /* Head Phone Jack Present */ ++#define HX2750_GPIO_PENDOWN (117) /* Touch Screen Pendown */ ++ ++ ++//#define HX2750_GPIO_ () /* */ ++ ++/* ++ * HX2750 Interrupts ++ */ ++#define HX2750_IRQ_GPIO_EXTPWR IRQ_GPIO(HX2750_GPIO_EXTPWR) ++#define HX2750_IRQ_GPIO_SD_DETECT IRQ_GPIO(HX2750_GPIO_SD_DETECT) ++#define HX2750_IRQ_GPIO_PENDOWN IRQ_GPIO(HX2750_GPIO_PENDOWN) ++#define HX2750_IRQ_GPIO_CF_DETECT IRQ_GPIO(HX2750_GPIO_CF_DETECT) ++#define HX2750_IRQ_GPIO_CF_IRQ IRQ_GPIO(HX2750_GPIO_CF_IRQ) ++#define HX2750_IRQ_GPIO_CF_WIFIIRQ IRQ_GPIO(HX2750_GPIO_CF_WIFIIRQ) ++ ++/* ++ * HX2750 Extra GPIO Definitions ++ */ ++ ++#define HX2750_EGPIO_WIFI_PWR (1 << 11) /* Wifi power */ ++#define HX2750_EGPIO_LCD_PWR (1 << 10) /* LCD Power */ ++#define HX2750_EGPIO_BL_PWR (1 << 9) /* Backlight LED Power */ ++#define HX2750_EGPIO_8 (1 << 8) /* */ ++#define HX2750_EGPIO_7 (1 << 7) /* */ ++#define HX2750_EGPIO_SD_PWR (1 << 6) /* SD Power */ ++#define HX2750_EGPIO_TSC_PWR (1 << 5) /* TS Power */ ++#define HX2750_EGPIO_CF0_RESET (1 << 4) /* CF0 Reset */ ++#define HX2750_EGPIO_CF1_RESET (1 << 3) /* CF1 Reset */ ++#define HX2750_EGPIO_2 (1 << 2) /* Power/Red LED Related?*/ ++#define HX2750_EGPIO_1 (1 << 1) /* Power/Red LED Related?*/ ++#define HX2750_EGPIO_PWRLED (1 << 0) /* Power/Red LED Related?*/ ++ ++ ++void hx2750_set_egpio(unsigned int gpio); ++void hx2750_clear_egpio(unsigned int gpio); ++ ++ ++#endif /* __ASM_ARCH_HX2750_H */ ++ +--- linux-2.6.24-rc1.orig/arch/arm/mach-pxa/Makefile ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/Makefile +@@ -22,6 +22,7 @@ + obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o + obj-$(CONFIG_MACH_TOSA) += tosa.o + obj-$(CONFIG_MACH_EM_X270) += em-x270.o ++obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o + + ifeq ($(CONFIG_MACH_ZYLONITE),y) + obj-y += zylonite.o +--- /dev/null ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/hx2750_test.c +@@ -0,0 +1,433 @@ ++/* ++ * HP iPAQ hx2750 Test Development Code ++ * ++ * Copyright 2005 Openedhand Ltd. ++ * ++ * Author: Richard Purdie <richard@o-hand.com> ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/ioport.h> ++#include <linux/device.h> ++#include <linux/input.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++ ++#include <asm/mach-types.h> ++#include <asm/hardware.h> ++#include <asm/mach/arch.h> ++ ++#include <asm/arch/hx2750.h> ++#include <asm/arch/pxa-regs.h> ++ ++ ++static int prodval; ++ ++/* ++ * Sysfs functions ++ */ ++static ssize_t test1_show(struct device *dev, char *buf) ++{ ++ unsigned long rp; ++ ++ asm ("mrc p15, 0, %0, cr1, cr0;\n" :"=r"(rp) ); ++ printk("%lx\n",rp); ++ ++ asm ("mrc p15, 0, %0, cr1, cr1;\n" :"=r"(rp) ); ++ printk("%lx\n",rp); ++ ++ asm ("mrc p15, 0, %0, cr2, cr0;\n" :"=r"(rp) ); ++ printk("%lx\n",rp); ++ ++ asm ("mrc p15, 0, %0, cr3, cr0;\n" :"=r"(rp) ); ++ printk("%lx\n",rp); ++ ++ asm ("mrc p15, 0, %0, cr13, cr0;\n" :"=r"(rp) ); ++ printk("%lx\n",rp); ++ ++ return sprintf(buf, "%d\n",prodval); ++} ++extern void tsc2101_print_miscdata(struct device *dev); ++extern struct platform_device tsc2101_device; ++ ++static ssize_t test1_store(struct device *dev, const char *buf, size_t count) ++{ ++ prodval = simple_strtoul(buf, NULL, 10); ++ ++ tsc2101_print_miscdata(&tsc2101_device.dev); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(test1, 0644, test1_show, test1_store); ++ ++static ssize_t test2_show(struct device *dev, char *buf) ++{ ++ printk(KERN_ERR "SSCR0_P2: %08x\n", SSCR0_P2); ++ printk(KERN_ERR "SSCR1_P2: %08x\n", SSCR1_P2); ++ printk(KERN_ERR "SSSR_P2: %08x\n", SSSR_P2); ++ printk(KERN_ERR "SSITR_P2: %08x\n", SSITR_P2); ++ printk(KERN_ERR "SSDR_P2: %08x\n", SSDR_P2); ++ printk(KERN_ERR "SSTO_P2: %08x\n", SSTO_P2); ++ printk(KERN_ERR "SSPSP_P2: %08x\n", SSPSP_P2); ++ ++ hx2750_ssp_init2(); ++ ++ printk(KERN_ERR "SSCR0_P2: %08x\n", SSCR0_P2); ++ printk(KERN_ERR "SSCR1_P2: %08x\n", SSCR1_P2); ++ printk(KERN_ERR "SSSR_P2: %08x\n", SSSR_P2); ++ printk(KERN_ERR "SSITR_P2: %08x\n", SSITR_P2); ++ printk(KERN_ERR "SSDR_P2: %08x\n", SSDR_P2); ++ printk(KERN_ERR "SSTO_P2: %08x\n", SSTO_P2); ++ printk(KERN_ERR "SSPSP_P2: %08x\n", SSPSP_P2); ++ ++ return sprintf(buf, "%d\n",0); ++} ++ ++static DEVICE_ATTR(test2, 0444, test2_show, NULL); ++ ++extern unsigned int hx2750_egpio_current; ++ ++static ssize_t setegpio_show(struct device *dev, char *buf) ++{ ++ return sprintf(buf, "%x\n",hx2750_egpio_current); ++} ++ ++static ssize_t setegpio_store(struct device *dev, const char *buf, size_t count) ++{ ++ unsigned int val = simple_strtoul(buf, NULL, 10); ++ ++ hx2750_set_egpio(1 << val); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(setegpio, 0644, setegpio_show, setegpio_store); ++ ++static ssize_t clregpio_show(struct device *dev, char *buf) ++{ ++ return sprintf(buf, "%x\n",hx2750_egpio_current); ++} ++ ++static ssize_t gpio_show(struct device *dev, char *buf) ++{ ++ int i; ++ ++ printk(KERN_ERR "GPIO# D S A INTER\n"); ++ ++ for (i=0;i<119;i++) { ++ printk(KERN_ERR " %3d: ",i); ++ if (GPDR(i) & GPIO_bit(i)) ++ printk("O "); ++ else ++ printk("I "); ++ printk("%d ",(GPLR(i) & GPIO_bit(i)) != 0); ++ printk("%d ",((GAFR(i) & (0x3 << (((i) & 0xf)*2)))) >> (((i) & 0xf)*2) ); ++ if (GEDR(i) & GPIO_bit(i)) ++ printk("ED "); ++ if (GRER(i) & GPIO_bit(i)) ++ printk("RE "); ++ if (GFER(i) & GPIO_bit(i)) ++ printk("FE "); ++ ++ printk("\n"); ++ } ++ return sprintf(buf, "EGPIO: %x\n",hx2750_egpio_current); ++} ++ ++static ssize_t clregpio_store(struct device *dev, const char *buf, size_t count) ++{ ++ unsigned int val = simple_strtoul(buf, NULL, 10); ++ ++ hx2750_clear_egpio(1 << val); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(clregpio, 0644, clregpio_show, clregpio_store); ++ ++ ++static ssize_t gpioclr_store(struct device *dev, const char *buf, size_t count) ++{ ++ int prod; ++ prod = simple_strtoul(buf, NULL, 10); ++ ++ GPCR(prod) = GPIO_bit(prod); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(gpioclr, 0644, gpio_show, gpioclr_store); ++ ++static ssize_t gpioset_store(struct device *dev, const char *buf, size_t count) ++{ ++ int prod; ++ prod = simple_strtoul(buf, NULL, 10); ++ ++ GPSR(prod) = GPIO_bit(prod); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(gpioset, 0644, gpio_show, gpioset_store); ++ ++ ++static ssize_t ssp2read_store(struct device *dev, const char *buf, size_t count) ++{ ++ unsigned int val = simple_strtoul(buf, NULL, 16); ++ ++ printk("Read: %08x\n",hx2750_ssp2_read(val)); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(ssp2read, 0200, NULL, ssp2read_store);
++
++static ssize_t ssp2write_store(struct device *dev, const char *buf, size_t count) ++{ ++ unsigned int val = simple_strtoul(buf, NULL, 16); ++ ++ printk("Write: %08x\n",hx2750_ssp2_write(val)); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(ssp2write, 0200, NULL, ssp2write_store); ++ ++ ++static ssize_t sspr_store(struct device *dev, const char *buf, size_t count) ++{ ++ unsigned long val,ret; ++ val = simple_strtoul(buf, NULL, 0); ++ ++ hx2750_tsc2101_send(1<<15,val,&ret,1); ++ ++ printk("Response: %x\n",ret); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(sspr, 0200, NULL, sspr_store); ++ ++static ssize_t sspw_store(struct device *dev, const char *buf, size_t count) ++{ ++ int val,ret; ++ sscanf(buf, "%lx %lx", &val, &ret); ++ ++ hx2750_tsc2101_send(0,val,&ret,1); ++ ++ return count; ++} ++ ++static DEVICE_ATTR(sspw, 0200, NULL, sspw_store); ++ ++ ++extern struct pm_ops pxa_pm_ops; ++extern void pxa_cpu_resume(void); ++extern unsigned long pxa_pm_pspr_value; ++ ++static int (*pxa_pm_enter_orig)(suspend_state_t state); ++ ++//static struct { ++// u32 ffier, fflcr, ffmcr, ffspr, ffisr, ffdll, ffdlh; ++//} sys_ctx; ++ ++u32 resstruct[20]; ++ ++static int hx2750_pxa_pm_enter(suspend_state_t state) ++{ ++ int i; ++ u32 save[10]; ++ ++ PWER = 0xC0000003;// | PWER_RTC; ++ PFER = 0x00000003; ++ PRER = 0x00000003; ++ ++ PGSR0=0x00000018; ++ PGSR1=0x00000380; ++ PGSR2=0x00800000; ++ PGSR3=0x00500400; ++ ++ //PVCR=0x494; or 0x14; ++ //PVCR=0x14; ++ //PCMD0=0x41f; ++ //i=PISR; ++ //PICR=0x00000062; ++ ++ //PCFR=0x457; ++ //PCFR=0x70; // Does not resume from sleep ++ PCFR=0x077; // was 0x477 ++ PSLR=0xff100004; ++ ++ resstruct[0]=0x0000b4e6; ++ resstruct[1]=0x00000001; ++ resstruct[2]=virt_to_phys(pxa_cpu_resume); ++ resstruct[3]=0xffffffff; //value for r0 ++ ++ resstruct[14]=0x00000078; //mcr 15, 0, r0, cr1, cr0, {0} ++ resstruct[15]=0x00000000; //mcr 15, 0, r0, cr1, cr1, {0} 0xffffffff
++ resstruct[16]=0xa0000000; //mcr 15, 0, r0, cr2, cr0, {0} 0xa0748000
++ resstruct[17]=0x00000001; //mcr 15, 0, r0, cr3, cr0, {0} 0x00000015
++ resstruct[18]=0x00000000; //mcr 15, 0, r0, cr13, cr0, {0} 0x00000000
++ ++ pxa_pm_pspr_value=virt_to_phys(&resstruct[0]); ++ ++ hx2750_send_egpio(3); ++ ++ pxa_gpio_mode(87 | GPIO_OUT | GPIO_DFLT_HIGH); ++ ++ //sys_ctx.ffier = FFIER; ++ //sys_ctx.fflcr = FFLCR; ++ //sys_ctx.ffmcr = FFMCR; ++ //sys_ctx.ffspr = FFSPR; ++ //sys_ctx.ffisr = FFISR; ++ //FFLCR |= 0x80; ++ //sys_ctx.ffdll = FFDLL; ++ //sys_ctx.ffdlh = FFDLH; ++ //FFLCR &= 0xef; ++ ++ pxa_pm_enter_orig(state); ++ ++ //FFMCR = sys_ctx.ffmcr; ++ //FFSPR = sys_ctx.ffspr; ++ //FFLCR = sys_ctx.fflcr; ++ //FFLCR |= 0x80; ++ //FFDLH = sys_ctx.ffdlh; ++ //FFDLL = sys_ctx.ffdll; ++ //FFLCR = sys_ctx.fflcr; ++ //FFISR = sys_ctx.ffisr; ++ //FFLCR = 0x07; ++ //FFIER = sys_ctx.ffier; ++ ++ return 0; ++} ++ ++static irqreturn_t hx2750_charge_int(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ if ((GPLR(HX2750_GPIO_EXTPWR) & GPIO_bit(HX2750_GPIO_EXTPWR)) == 0) { ++ printk("Charging On\n"); ++ GPCR(HX2750_GPIO_CHARGE); ++ } else { ++ printk("Charging Off\n"); ++ GPSR(HX2750_GPIO_CHARGE); ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++ ++ ++ ++static irqreturn_t hx2750_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ printk("Input %d changed.\n", irq-32); ++ ++ return IRQ_HANDLED; ++} ++ ++ ++static int __init hx2750_test_probe(struct device *dev) ++{ ++ pxa_gpio_mode(21 | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(HX2750_GPIO_CHARGE | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(83 | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(HX2750_GPIO_BIOPWR | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(116 | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(118 | GPIO_OUT | GPIO_DFLT_HIGH); ++ ++ ++ //pxa_gpio_mode(HX2750_GPIO_CF_PWR | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(HX2750_GPIO_CF_PWR | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(HX2750_GPIO_BTPWR | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(79 | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(85 | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(HX2750_GPIO_LEDMAIL | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(107 | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(114 | GPIO_OUT | GPIO_DFLT_LOW); ++ ++ pxa_gpio_mode(HX2750_GPIO_BATTCOVER1 | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_BATTCOVER2 | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_CF_IRQ | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_USBCONNECT | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_CF_DETECT | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_EXTPWR | GPIO_IN); ++ ++ pxa_gpio_mode(HX2750_GPIO_BATLVL | GPIO_IN); ++ //pxa_gpio_mode(HX2750_GPIO_CF_WIFIIRQ | GPIO_IN); ++ pxa_gpio_mode(80 | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_HP_JACK | GPIO_IN); ++ pxa_gpio_mode(115 | GPIO_IN); ++ pxa_gpio_mode(119 | GPIO_IN); ++ ++ request_irq(IRQ_GPIO(HX2750_GPIO_BATLVL), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ //request_irq(IRQ_GPIO(HX2750_GPIO_CF_WIFIIRQ), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ request_irq(IRQ_GPIO(80), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ request_irq(IRQ_GPIO(115), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ request_irq(IRQ_GPIO(119), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ request_irq(IRQ_GPIO(HX2750_GPIO_SR_CLK2), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ ++ //request_irq(IRQ_GPIO(10), hx2750_interrupt, SA_INTERRUPT, "hx2750test", NULL); ++ ++ set_irq_type(IRQ_GPIO(HX2750_GPIO_BATLVL),IRQT_BOTHEDGE); ++ //set_irq_type(IRQ_GPIO(HX2750_GPIO_CF_WIFIIRQ),IRQT_BOTHEDGE); ++ set_irq_type(IRQ_GPIO(80),IRQT_BOTHEDGE); ++ set_irq_type(IRQ_GPIO(115),IRQT_BOTHEDGE); ++ set_irq_type(IRQ_GPIO(119),IRQT_BOTHEDGE); ++ set_irq_type(IRQ_GPIO(HX2750_GPIO_SR_CLK2),IRQT_BOTHEDGE); ++ ++ //set_irq_type(IRQ_GPIO(10),IRQT_BOTHEDGE); ++ ++ printk("hx2750 Test Code Initialized.\n"); ++ device_create_file(dev, &dev_attr_test1); ++ device_create_file(dev, &dev_attr_test2); ++ device_create_file(dev, &dev_attr_setegpio); ++ device_create_file(dev, &dev_attr_clregpio); ++ device_create_file(dev, &dev_attr_gpioset); ++ device_create_file(dev, &dev_attr_gpioclr); ++ device_create_file(dev, &dev_attr_sspr); ++ device_create_file(dev, &dev_attr_sspw); ++ device_create_file(dev, &dev_attr_ssp2read); ++ device_create_file(dev, &dev_attr_ssp2write); ++ ++ request_irq(HX2750_IRQ_GPIO_EXTPWR, hx2750_charge_int, SA_INTERRUPT, "hx2750_extpwr", NULL); ++ set_irq_type(HX2750_IRQ_GPIO_EXTPWR, IRQT_BOTHEDGE); ++ ++ pxa_pm_enter_orig=pxa_pm_ops.enter; ++ pxa_pm_ops.enter=hx2750_pxa_pm_enter; ++ ++ return 0; ++} ++ ++static struct device_driver hx2750_test_driver = { ++ .name = "hx2750-test", ++ .bus = &platform_bus_type, ++ .probe = hx2750_test_probe, ++// .remove = hx2750_bl_remove, ++// .suspend = hx2750_bl_suspend, ++// .resume = hx2750_bl_resume, ++}; ++ ++ ++static int __init hx2750_test_init(void) ++{ ++ return driver_register(&hx2750_test_driver); ++} ++ ++ ++static void __exit hx2750_test_exit(void) ++{ ++ driver_unregister(&hx2750_test_driver); ++} ++ ++module_init(hx2750_test_init); ++module_exit(hx2750_test_exit); ++ ++MODULE_AUTHOR("Richard Purdie <richard@o-hand.com>"); ++MODULE_DESCRIPTION("iPAQ hx2750 Backlight Driver"); ++MODULE_LICENSE("GPLv2"); +--- linux-2.6.24-rc1.orig/arch/arm/mach-pxa/Kconfig ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/Kconfig +@@ -83,6 +83,15 @@ + bool "Sharp PXA270 models (SL-Cxx00)" + select PXA27x + ++config MACH_HX2750 ++ bool "HP iPAQ hx2750" ++ select PXA27x ++ select PXA_KEYS ++ select MFD_TSC2101 ++ select PXA_SSP ++ help ++ This enables support for the HP iPAQ HX2750 handheld. ++ + endchoice + + endif +@@ -181,3 +190,4 @@ + help + Enable support for PXA2xx SSP ports + endif ++ +--- /dev/null ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/hx2750.c +@@ -0,0 +1,450 @@ ++/* ++ * Machine definitions for HP iPAQ hx2750 ++ * ++ * Copyright 2005 Openedhand Ltd. ++ * ++ * Author: Richard Purdie <richard@o-hand.com> ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++ ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/ioport.h> ++#include <linux/platform_device.h> ++#include <linux/delay.h> ++#include <linux/input.h> ++#include <linux/irq.h> ++#include <linux/mmc/host.h> ++#include <linux/mfd/tsc2101.h> ++ ++#include <asm/mach-types.h> ++#include <asm/hardware.h> ++#include <asm/mach/arch.h> ++ ++#include <asm/arch/hx2750.h> ++#include <asm/arch/pxa-regs.h> ++#include <asm/arch/pxa_keys.h> ++#include <asm/mach/map.h> ++#include <asm/arch/udc.h> ++#include <asm/arch/mmc.h> ++#include <asm/arch/audio.h> ++#include <asm/arch/pxafb.h> ++#include <asm/arch/ssp.h> ++ ++#include "generic.h" ++ ++ ++/* ++ * Keys Support ++ */ ++static struct pxa_keys_button hx2750_button_table[] = { ++ { KEY_POWER, HX2750_GPIO_KEYPWR, PXAKEY_PWR_KEY }, ++ { KEY_LEFT, HX2750_GPIO_KEYLEFT, 0 }, ++ { KEY_RIGHT, HX2750_GPIO_KEYRIGHT, 0 }, ++ { KEY_KP0, HX2750_GPIO_KEYCAL, 0 }, ++ { KEY_KP1, HX2750_GPIO_KEYTASK, 0 }, ++ { KEY_KP2, HX2750_GPIO_KEYSIDE, 0 }, ++ { KEY_ENTER, HX2750_GPIO_KEYENTER, 0 }, ++ { KEY_KP3, HX2750_GPIO_KEYCON, 0 }, //KEY_CONTACTS ++ { KEY_MAIL, HX2750_GPIO_KEYMAIL, 0 }, ++ { KEY_UP, HX2750_GPIO_KEYUP, 0 }, ++ { KEY_DOWN, HX2750_GPIO_KEYDOWN, 0 }, ++}; ++ ++static struct pxa_keys_platform_data hx2750_pxa_keys_data = { ++ .buttons = hx2750_button_table, ++ .nbuttons = ARRAY_SIZE(hx2750_button_table), ++}; ++ ++static struct platform_device hx2750_pxa_keys = { ++ .name = "pxa2xx-keys", ++ .dev = { ++ .platform_data = &hx2750_pxa_keys_data, ++ }, ++}; ++ ++ ++/* ++ * Backlight Device ++ */ ++extern struct platform_device pxafb_device; ++ ++static struct platform_device hx2750_bl_device = { ++ .name = "hx2750-bl", ++ .id = -1, ++// .dev = { ++// .parent = &pxafb_device.dev, ++// } ++}; ++ ++ ++/* ++ * UDC/USB ++ */ ++static int hx2750_udc_is_connected (void) ++{ ++ return GPLR0 & GPIO_bit(HX2750_GPIO_USBCONNECT); ++} ++ ++//static void hx2750_udc_command (int cmd) ++//{ ++//} ++ ++static struct pxa2xx_udc_mach_info hx2750_udc_mach_info = { ++ .udc_is_connected = hx2750_udc_is_connected, ++// .udc_command = hx2750_udc_command, ++}; ++ ++ ++/* ++ * SSP Devices Setup ++ */ ++static struct ssp_dev hx2750_ssp_dev1; ++static struct ssp_dev hx2750_ssp_dev2; ++static struct ssp_dev hx2750_ssp_dev3; ++ ++void hx2750_ssp_init(void) ++{ ++ pxa_gpio_mode(HX2750_GPIO_TSC2101_SS | GPIO_OUT | GPIO_DFLT_HIGH); ++ ++ if (ssp_init(&hx2750_ssp_dev1, 1, 0)) ++ printk(KERN_ERR "Unable to register SSP1 handler!\n"); ++ else { ++ ssp_disable(&hx2750_ssp_dev1); ++ ssp_config(&hx2750_ssp_dev1, (SSCR0_Motorola | (SSCR0_DSS & 0x0f )), SSCR1_SPH, 0, SSCR0_SerClkDiv(6)); ++ ssp_enable(&hx2750_ssp_dev1); ++ hx2750_set_egpio(HX2750_EGPIO_TSC_PWR); ++ } ++ ++// if (ssp_init(&hx2750_ssp_dev2, 2, 0)) ++// printk(KERN_ERR "Unable to register SSP2 handler!\n"); ++// else { ++// ssp_disable(&hx2750_ssp_dev2); ++// ssp_config(&hx2750_ssp_dev2, (SSCR0_TI | (SSCR0_DSS & 0x09 )), 0, 0, SSCR0_SerClkDiv(140)); ++// ssp_enable(&hx2750_ssp_dev2); ++// } ++// ++ if (ssp_init(&hx2750_ssp_dev3, 3, 0)) ++ printk(KERN_ERR "Unable to register SSP3 handler!\n"); ++ else { ++ ssp_disable(&hx2750_ssp_dev3); ++ ssp_config(&hx2750_ssp_dev3, (SSCR0_Motorola | (SSCR0_DSS & 0x07 )), SSCR1_SPO | SSCR1_SPH, 0, SSCR0_SerClkDiv(166)); ++ ssp_enable(&hx2750_ssp_dev3); ++ } ++ ++ printk("SSP Devices Initialised\n"); ++ ++ return; ++} ++ ++struct ssp_state ssp1; ++ ++void hx2750_ssp_suspend(void) ++{ ++ ssp_disable(&hx2750_ssp_dev1); ++ ssp_save_state(&hx2750_ssp_dev1,&ssp1); ++ hx2750_clear_egpio(HX2750_EGPIO_TSC_PWR); ++} ++ ++void hx2750_ssp_resume(void) ++{ ++ hx2750_set_egpio(HX2750_EGPIO_TSC_PWR); ++ ssp_restore_state(&hx2750_ssp_dev1,&ssp1); ++ ssp_enable(&hx2750_ssp_dev1); ++} ++ ++void hx2750_ssp_init2(void) ++{ ++ printk("Stage 1: %x\n",CKEN); ++ if (ssp_init(&hx2750_ssp_dev2, 2, 0)) ++ printk(KERN_ERR "Unable to register SSP2 handler!\n"); ++ else { ++ printk("Stage 2: %x\n",CKEN); ++ ssp_disable(&hx2750_ssp_dev2); ++ printk("Stage 3: %x\n",CKEN); ++ ssp_config(&hx2750_ssp_dev2, (SSCR0_TI | (SSCR0_DSS & 0x09 )) | SSCR0_SSE, 0, 0, SSCR0_SerClkDiv(212)); ++ printk("Stage 4: %x\n",CKEN); ++ ssp_enable(&hx2750_ssp_dev2); ++ printk("Stage 5: %x\n",CKEN); ++ } ++ printk("SSP Device2 Initialised\n"); ++ ++ printk("Sent: 0x3ff\n"); ++ ssp_write_word(&hx2750_ssp_dev2,0x3ff); ++ ++ return; ++} ++ ++void hx2750_ssp2_reset(void) ++{ ++ ssp_write_word(&hx2750_ssp_dev2,0x000); ++ ssp_write_word(&hx2750_ssp_dev2,0x000); ++ ++} ++ ++unsigned long hx2750_ssp2_read(void) ++{ ++ u32 ret = 0; ++ ssp_read_word(&hx2750_ssp_dev2, &ret); ++ return ret; ++} ++ ++void hx2750_ssp2_write(unsigned long data) ++{ ++ ssp_write_word(&hx2750_ssp_dev2, data); ++} ++ ++ ++/* ++ * Extra hx2750 Specific GPIOs ++ */ ++void hx2750_send_egpio(unsigned int val) ++{ ++ int i; ++ ++ GPCR0 = GPIO_bit(HX2750_GPIO_SR_STROBE); ++ GPCR1 = GPIO_bit(HX2750_GPIO_SR_CLK1); ++ ++ for (i=0;i<12;i++) { ++ if (val & 0x01) ++ GPSR2 = GPIO_bit(HX2750_GPIO_GPIO_DIN); ++ else ++ GPCR2 = GPIO_bit(HX2750_GPIO_GPIO_DIN); ++ val >>= 1; ++ GPSR1 = GPIO_bit(HX2750_GPIO_SR_CLK1); ++ GPCR1 = GPIO_bit(HX2750_GPIO_SR_CLK1); ++ } ++ ++ GPSR0 = GPIO_bit(HX2750_GPIO_SR_STROBE); ++ GPCR0 = GPIO_bit(HX2750_GPIO_SR_STROBE); ++} ++ ++EXPORT_SYMBOL(hx2750_send_egpio); ++ ++unsigned int hx2750_egpio_current; ++ ++void hx2750_set_egpio(unsigned int gpio) ++{ ++ hx2750_egpio_current|=gpio; ++ ++ hx2750_send_egpio(hx2750_egpio_current); ++} ++EXPORT_SYMBOL(hx2750_set_egpio); ++ ++void hx2750_clear_egpio(unsigned int gpio) ++{ ++ hx2750_egpio_current&=~gpio; ++ ++ hx2750_send_egpio(hx2750_egpio_current); ++} ++EXPORT_SYMBOL(hx2750_clear_egpio); ++ ++ ++/* ++ * Touchscreen/Sound/Battery Status ++ */ ++void hx2750_tsc2101_send(int read, int command, int *values, int numval) ++{ ++ u32 ret = 0; ++ int i; ++ ++ GPCR0 = GPIO_bit(HX2750_GPIO_TSC2101_SS); ++ ++ ssp_write_word(&hx2750_ssp_dev1, command | read); ++ /* dummy read */ ++ ssp_read_word(&hx2750_ssp_dev1, &ret); ++ ++ for (i=0; i < numval; i++) { ++ if (read) { ++ ssp_write_word(&hx2750_ssp_dev1, 0); ++ ssp_read_word(&hx2750_ssp_dev1, &values[i]); ++ } else { ++ ssp_write_word(&hx2750_ssp_dev1, values[i]); ++ ssp_read_word(&hx2750_ssp_dev1, &ret); ++ } ++ } ++ ++ GPSR0 = GPIO_bit(HX2750_GPIO_TSC2101_SS); ++} ++ ++static int hx2750_tsc2101_pendown(void) ++{ ++ if ((GPLR(HX2750_GPIO_PENDOWN) & GPIO_bit(HX2750_GPIO_PENDOWN)) == 0) ++ return 1; ++ return 0; ++} ++ ++static struct tsc2101_platform_info hx2750_tsc2101_info = { ++ .send = hx2750_tsc2101_send, ++ .suspend = hx2750_ssp_suspend, ++ .resume = hx2750_ssp_resume, ++ .irq = HX2750_IRQ_GPIO_PENDOWN, ++ .pendown = hx2750_tsc2101_pendown, ++}; ++ ++struct platform_device tsc2101_device = { ++ .name = "tsc2101", ++ .dev = { ++ .platform_data = &hx2750_tsc2101_info, ++ //.parent = &corgissp_device.dev, ++ }, ++ .id = -1, ++}; ++ ++ ++/* ++ * MMC/SD Device ++ * ++ * The card detect interrupt isn't debounced so we delay it by 250ms ++ * to give the card a chance to fully insert/eject. ++ */ ++static struct pxamci_platform_data hx2750_mci_platform_data; ++ ++static int hx2750_mci_init(struct device *dev, irq_handler_t hx2750_detect_int, void *data) ++{ ++ int err; ++ ++ /* ++ * setup GPIO for PXA27x MMC controller ++ */ ++ pxa_gpio_mode(GPIO32_MMCCLK_MD); ++ pxa_gpio_mode(GPIO112_MMCCMD_MD); ++ pxa_gpio_mode(GPIO92_MMCDAT0_MD); ++ pxa_gpio_mode(GPIO109_MMCDAT1_MD); ++ pxa_gpio_mode(GPIO110_MMCDAT2_MD); ++ pxa_gpio_mode(GPIO111_MMCDAT3_MD); ++ pxa_gpio_mode(HX2750_GPIO_SD_DETECT | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_SD_READONLY | GPIO_IN); ++ ++ hx2750_mci_platform_data.detect_delay = msecs_to_jiffies(250); ++ ++ err = request_irq(HX2750_IRQ_GPIO_SD_DETECT, hx2750_detect_int, ++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, ++ "MMC card detect", data); ++ if (err) { ++ printk(KERN_ERR "hx2750_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static void hx2750_mci_setpower(struct device *dev, unsigned int vdd) ++{ ++ struct pxamci_platform_data* p_d = dev->platform_data; ++ ++ if (( 1 << vdd) & p_d->ocr_mask) ++ hx2750_set_egpio(HX2750_EGPIO_SD_PWR); ++ else ++ hx2750_clear_egpio(HX2750_EGPIO_SD_PWR); ++} ++ ++static void hx2750_mci_exit(struct device *dev, void *data) ++{ ++ free_irq(HX2750_IRQ_GPIO_SD_DETECT, data); ++} ++ ++static struct pxamci_platform_data hx2750_mci_platform_data = { ++ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, ++ .init = hx2750_mci_init, ++ .setpower = hx2750_mci_setpower, ++ .exit = hx2750_mci_exit, ++}; ++ ++ ++/* ++ * FrameBuffer ++ */ ++static struct pxafb_mode_info hx2750_pxafb_modes = { ++ .pixclock = 288462, ++ .xres = 240, ++ .yres = 320, ++ .bpp = 16, ++ .hsync_len = 20, ++ .left_margin = 42, ++ .right_margin = 18, ++ .vsync_len = 4, ++ .upper_margin = 3, ++ .lower_margin = 4, ++ .sync = 0, ++}; ++ ++static struct pxafb_mach_info hx2750_pxafb_info = { ++ .modes = &hx2750_pxafb_modes, ++ .num_modes = 1, ++ .fixed_modes = 1, ++ .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, ++ .lccr3 = LCCR3_PixFlEdg | LCCR3_OutEnH, ++ .pxafb_backlight_power = NULL, ++}; ++ ++ ++/* ++ * Test Device ++ */ ++static struct platform_device hx2750_test_device = { ++ .name = "hx2750-test", ++ .id = -1, ++}; ++ ++ ++/* Initialization code */ ++static struct platform_device *devices[] __initdata = { ++ &hx2750_bl_device, ++ &hx2750_test_device, ++ &hx2750_pxa_keys, ++ &tsc2101_device, ++}; ++ ++static void __init hx2750_init( void ) ++{ ++ PWER = 0xC0000003;// | PWER_RTC; ++ PFER = 0x00000003; ++ PRER = 0x00000003; ++ ++ PGSR0=0x00000018; ++ PGSR1=0x00000380; ++ PGSR2=0x00800000; ++ PGSR3=0x00500400; ++ ++ //PCFR |= PCFR_OPDE; ++ PCFR=0x77; ++ PSLR=0xff100000; ++ //PCFR=0x10; - does not return from suspend ++ ++ //PCFR= 0x00004040; ++ //PSLR= 0xff400f04; ++ ++ /* Setup Extra GPIO Bank access */ ++ pxa_gpio_mode(HX2750_GPIO_GPIO_DIN | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(HX2750_GPIO_SR_CLK1 | GPIO_OUT | GPIO_DFLT_LOW); ++ pxa_gpio_mode(HX2750_GPIO_SR_CLK2 | GPIO_IN); ++ pxa_gpio_mode(HX2750_GPIO_SR_STROBE | GPIO_OUT | GPIO_DFLT_LOW); ++ ++ /* Init Extra GPIOs - Bootloader reset default is 0x484 */ ++ /* This is 0xe84 */ ++ hx2750_set_egpio(HX2750_EGPIO_2 | HX2750_EGPIO_7 | HX2750_EGPIO_LCD_PWR | HX2750_EGPIO_BL_PWR | HX2750_EGPIO_WIFI_PWR); ++ ++ pxa_set_udc_info(&hx2750_udc_mach_info); ++ pxa_set_mci_info(&hx2750_mci_platform_data); ++ set_pxa_fb_info(&hx2750_pxafb_info); ++ hx2750_ssp_init(); ++ platform_add_devices (devices, ARRAY_SIZE (devices)); ++} ++ ++ ++MACHINE_START(HX2750, "HP iPAQ HX2750") ++ .phys_io = 0x40000000, ++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, ++ .boot_params = 0xa0000100, ++ .map_io = pxa_map_io, ++ .init_irq = pxa_init_irq, ++ .timer = &pxa_timer, ++ .init_machine = hx2750_init, ++MACHINE_END ++ +--- linux-2.6.24-rc1.orig/arch/arm/mach-pxa/pm.c ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/pm.c +@@ -17,6 +17,7 @@ + #include <linux/time.h> + + #include <asm/hardware.h> ++#include <asm/mach-types.h> + #include <asm/memory.h> + #include <asm/system.h> + #include <asm/arch/pm.h> +@@ -91,6 +92,9 @@ + .enter = pxa_pm_enter, + }; + ++unsigned long pxa_pm_pspr_value; ++extern void pxa_cpu_resume(void); ++ + static int __init pxa_pm_init(void) + { + if (!pxa_cpu_pm_fns) { +@@ -104,6 +108,7 @@ + return -ENOMEM; + } + ++ pxa_pm_pspr_value=virt_to_phys(pxa_cpu_resume); + suspend_set_ops(&pxa_pm_ops); + return 0; + } +--- linux-2.6.24-rc1.orig/arch/arm/mach-pxa/pxa27x.c ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/pxa27x.c +@@ -259,6 +259,8 @@ + RESTORE(PSTR); + } + ++extern unsigned long pxa_pm_pspr_value; ++ + void pxa27x_cpu_pm_enter(suspend_state_t state) + { + extern void pxa_cpu_standby(void); +@@ -281,7 +283,7 @@ + break; + case PM_SUSPEND_MEM: + /* set resume return address */ +- PSPR = virt_to_phys(pxa_cpu_resume); ++ PSPR = pxa_pm_pspr_value; + pxa27x_cpu_suspend(PWRMODE_SLEEP); + break; + } +--- linux-2.6.24-rc1.orig/arch/arm/mach-pxa/pxa25x.c ++++ linux-2.6.24-rc1/arch/arm/mach-pxa/pxa25x.c +@@ -200,6 +200,8 @@ + RESTORE(PSTR); + } + ++extern unsigned long pxa_pm_pspr_value; ++ + static void pxa25x_cpu_pm_enter(suspend_state_t state) + { + CKEN = 0; +@@ -207,7 +209,7 @@ + switch (state) { + case PM_SUSPEND_MEM: + /* set resume return address */ +- PSPR = virt_to_phys(pxa_cpu_resume); ++ PSPR = pxa_pm_pspr_value; + pxa25x_cpu_suspend(PWRMODE_SLEEP); + break; + } diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/mmcsd_no_scr_check-r2.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/mmcsd_no_scr_check-r2.patch index ac2245f088..ac2245f088 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/mmcsd_no_scr_check-r2.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/mmcsd_no_scr_check-r2.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pda-power.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pda-power.patch index face2f4ef2..face2f4ef2 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pda-power.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pda-power.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa-serial-hack.patch index bf20f46a05..bf20f46a05 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa-serial-hack.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa-serial-hack.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa27x_overlay-r8.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa27x_overlay-r8.patch new file mode 100644 index 0000000000..693ad20453 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa27x_overlay-r8.patch @@ -0,0 +1,2427 @@ + drivers/video/Kconfig | 18 + drivers/video/Makefile | 1 + drivers/video/pxafb.c | 305 +++++-- + drivers/video/pxafb.h | 65 + + drivers/video/pxafb_overlay.c | 1525 ++++++++++++++++++++++++++++++++++++ + include/asm-arm/arch-pxa/pxa-regs.h | 111 ++ + 6 files changed, 1969 insertions(+), 56 deletions(-) + +--- linux-2.6.24-rc1.orig/drivers/video/Kconfig ++++ linux-2.6.24-rc1/drivers/video/Kconfig +@@ -1718,6 +1718,24 @@ + + If unsure, say N. + ++choice ++ prompt "PXA LCD type" ++ depends on FB_PXA ++ ++config FB_PXA_LCD_QVGA ++ bool "QVGA(320x240)" ++ ++config FB_PXA_LCD_VGA ++ bool "VGA (640x480)" ++ ++endchoice ++ ++config FB_PXA_OVERLAY ++ tristate "PXA LCD overlay support" ++ depends on FB_PXA ++ ---help--- ++ Frame buffer overlay driver for PXA27x ++ + config FB_PXA_PARAMETERS + bool "PXA LCD command line parameters" + default n +--- linux-2.6.24-rc1.orig/drivers/video/Makefile ++++ linux-2.6.24-rc1/drivers/video/Makefile +@@ -96,6 +96,7 @@ + obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o + obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o + obj-$(CONFIG_FB_PXA) += pxafb.o ++obj-$(CONFIG_FB_PXA_OVERLAY) += pxafb_overlay.o + obj-$(CONFIG_FB_W100) += w100fb.o + obj-$(CONFIG_FB_AU1100) += au1100fb.o + obj-$(CONFIG_FB_AU1200) += au1200fb.o +--- linux-2.6.24-rc1.orig/drivers/video/pxafb.c ++++ linux-2.6.24-rc1/drivers/video/pxafb.c +@@ -59,17 +59,49 @@ + #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB) + #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP) + ++wait_queue_head_t fcs_wait_eof; ++int fcs_in_eof; ++static DECLARE_MUTEX(fcs_lcd_sem); ++ + static void (*pxafb_backlight_power)(int); + static void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *); + + static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *); +-static void set_ctrlr_state(struct pxafb_info *fbi, u_int state); ++void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state); + + #ifdef CONFIG_FB_PXA_PARAMETERS + #define PXAFB_OPTIONS_SIZE 256 + static char g_options[PXAFB_OPTIONS_SIZE] __devinitdata = ""; + #endif + ++static struct pxafb_rgb def_rgb_8 = { ++ red: { offset: 0, length: 8, }, ++ green: { offset: 0, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgb_16 = { ++ red: { offset: 11, length: 5, }, ++ green: { offset: 5, length: 6, }, ++ blue: { offset: 0, length: 5, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgb_18 = { ++ red: { offset: 12, length: 6, }, ++ green: { offset: 6, length: 6, }, ++ blue: { offset: 0, length: 6, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgb_24 = { ++ red: { offset: 16, length: 8, }, ++ green: { offset: 8, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ + static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state) + { + unsigned long flags; +@@ -209,6 +241,10 @@ + case 4: ret = LCCR3_4BPP; break; + case 8: ret = LCCR3_8BPP; break; + case 16: ret = LCCR3_16BPP; break; ++ case 18: ret = LCCR3_18BPP; break; ++ case 19: ret = LCCR3_19BPP; break; ++ case 24: ret = LCCR3_24BPP; break; ++ case 25: ret = LCCR3_25BPP; break; + } + return ret; + } +@@ -320,18 +356,34 @@ + * The pixel packing format is described on page 7-11 of the + * PXA2XX Developer's Manual. + */ +- if (var->bits_per_pixel == 16) { +- var->red.offset = 11; var->red.length = 5; +- var->green.offset = 5; var->green.length = 6; +- var->blue.offset = 0; var->blue.length = 5; +- var->transp.offset = var->transp.length = 0; +- } else { +- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0; +- var->red.length = 8; +- var->green.length = 8; +- var->blue.length = 8; +- var->transp.length = 0; +- } ++ switch (var->bits_per_pixel) { ++ case 16: ++ /* 2 pixels per line */ ++ var->red = def_rgb_16.red; ++ var->green = def_rgb_16.green; ++ var->blue = def_rgb_16.blue; ++ var->transp = def_rgb_16.transp; ++ break; ++ case 18: ++ case 19: ++ var->red = def_rgb_18.red; ++ var->green = def_rgb_18.green; ++ var->blue = def_rgb_18.blue; ++ var->transp = def_rgb_18.transp; ++ break; ++ case 24: ++ case 25: ++ var->red = def_rgb_24.red; ++ var->green = def_rgb_24.green; ++ var->blue = def_rgb_24.blue; ++ var->transp = def_rgb_24.transp; ++ break; ++ default: ++ var->red = def_rgb_8.red; ++ var->green = def_rgb_8.green; ++ var->blue = def_rgb_8.blue; ++ var->transp = def_rgb_8.transp; ++ } + + #ifdef CONFIG_CPU_FREQ + pr_debug("pxafb: dma period = %d ps, clock = %d kHz\n", +@@ -345,7 +397,7 @@ + static inline void pxafb_set_truecolor(u_int is_true_color) + { + pr_debug("pxafb: true_color = %d\n", is_true_color); +- // do your machine-specific setup if needed ++ /* do your machine-specific setup if needed */ + } + + /* +@@ -360,7 +412,8 @@ + + pr_debug("pxafb: set_par\n"); + +- if (var->bits_per_pixel == 16) ++ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19 ++ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) + fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; + else if (!fbi->cmap_static) + fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; +@@ -373,12 +426,25 @@ + fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR; + } + +- fbi->fb.fix.line_length = var->xres_virtual * +- var->bits_per_pixel / 8; +- if (var->bits_per_pixel == 16) +- fbi->palette_size = 0; +- else +- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; ++ switch (var->bits_per_pixel) { ++ case 16: ++ fbi->fb.fix.line_length = var->xres_virtual * 2; ++ fbi->palette_size = 0; ++ break; ++ case 18: ++ case 19: ++ fbi->fb.fix.line_length = var->xres_virtual * 3; ++ fbi->palette_size = 0; ++ break; ++ case 24: ++ case 25: ++ fbi->fb.fix.line_length = var->xres_virtual * 4; ++ fbi->palette_size = 0; ++ break; ++ default: ++ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; ++ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel; ++ } + + if ((fbi->lccr4 & LCCR4_PAL_FOR_MASK) == LCCR4_PAL_FOR_0) + palette_mem_size = fbi->palette_size * sizeof(u16); +@@ -395,7 +461,8 @@ + */ + pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR); + +- if (fbi->fb.var.bits_per_pixel == 16) ++ if (fbi->fb.var.bits_per_pixel == 16 || fbi->fb.var.bits_per_pixel == 18 ||fbi->fb.var.bits_per_pixel == 19 ++ || fbi->fb.var.bits_per_pixel == 24 || fbi->fb.var.bits_per_pixel == 25) + fb_dealloc_cmap(&fbi->fb.cmap); + else + fb_alloc_cmap(&fbi->fb.cmap, 1<<fbi->fb.var.bits_per_pixel, 0); +@@ -441,7 +508,7 @@ + * 16 bpp mode does not really use the palette, so this will not + * blank the display in all modes. + */ +-static int pxafb_blank(int blank, struct fb_info *info) ++int pxafb_blank(int blank, struct fb_info *info) + { + struct pxafb_info *fbi = (struct pxafb_info *)info; + int i; +@@ -458,19 +525,20 @@ + for (i = 0; i < fbi->palette_size; i++) + pxafb_setpalettereg(i, 0, 0, 0, 0, info); + +- pxafb_schedule_work(fbi, C_DISABLE); +- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); ++ pxafb_schedule_work(fbi, C_BLANK); ++ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */ + break; + + case FB_BLANK_UNBLANK: +- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); ++ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */ + if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR || + fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) + fb_set_cmap(&fbi->fb.cmap, info); +- pxafb_schedule_work(fbi, C_ENABLE); ++ pxafb_schedule_work(fbi, C_UNBLANK); + } + return 0; + } ++EXPORT_SYMBOL(pxafb_blank); + + static int pxafb_mmap(struct fb_info *info, + struct vm_area_struct *vma) +@@ -606,6 +674,10 @@ + case 4: + case 8: + case 16: ++ case 18: ++ case 19: ++ case 24: ++ case 25: + break; + default: + printk(KERN_ERR "%s: invalid bit depth %d\n", +@@ -637,7 +709,10 @@ + + new_regs.lccr0 = fbi->lccr0 | + (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM | +- LCCR0_QDM | LCCR0_BM | LCCR0_OUM); ++#ifdef CONFIG_PXA27x /* Enable overlay for PXA27x */ ++ LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM | ++#endif ++ LCCR0_QDM | LCCR0_BM | LCCR0_OUM); + + new_regs.lccr1 = + LCCR1_DisWdth(var->xres) + +@@ -696,7 +771,7 @@ + + fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma; + fbi->dmadesc_fbhigh_cpu->fidr = 0; +- fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL; ++ fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL | LDCMD_EOFINT; + + fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma; + fbi->dmadesc_palette_cpu->fidr = 0; +@@ -708,7 +783,8 @@ + sizeof(u32); + fbi->dmadesc_palette_cpu->ldcmd |= LDCMD_PAL; + +- if (var->bits_per_pixel == 16) { ++ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19 ++ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) { + /* palette shouldn't be loaded in true-color mode */ + fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma; + fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */ +@@ -763,8 +839,8 @@ + } + + /* +- * NOTE! The following functions are purely helpers for set_ctrlr_state. +- * Do not call them directly; set_ctrlr_state does the correct serialisation ++ * NOTE! The following functions are purely helpers for pxafb_set_ctrlr_state. ++ * Do not call them directly; pxafb_set_ctrlr_state does the correct serialisation + * to ensure that things happen in the right way 100% of time time. + * -- rmk + */ +@@ -786,7 +862,8 @@ + + static void pxafb_setup_gpio(struct pxafb_info *fbi) + { +- int gpio, ldd_bits; ++ int gpio; ++ int ldd_bits = 0; + unsigned int lccr0 = fbi->lccr0; + + /* +@@ -796,28 +873,56 @@ + /* 4 bit interface */ + if ((lccr0 & LCCR0_CMS) == LCCR0_Mono && + (lccr0 & LCCR0_SDS) == LCCR0_Sngl && +- (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) ++ (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) { + ldd_bits = 4; +- ++ } + /* 8 bit interface */ + else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono && + ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) || + ((lccr0 & LCCR0_CMS) == LCCR0_Color && +- (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) ++ (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) { + ldd_bits = 8; +- ++ } + /* 16 bit interface */ +- else if ((lccr0 & LCCR0_CMS) == LCCR0_Color && +- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) +- ldd_bits = 16; ++ else if ((lccr0 & LCCR0_CMS) == LCCR0_Color && ++ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) { ++ switch (fbi->fb.var.bits_per_pixel) { ++ case 16: ++#ifdef CONFIG_PXA27x ++ /* bits 58-77 */ ++ GPDR1 |= (0x3f << 26); ++ GPDR2 |= 0x00003fff; + ++ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20); ++ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa; ++#endif ++ ldd_bits = 16; ++ break; ++ case 18: ++ case 19: ++ case 24: ++ case 25: ++#ifdef CONFIG_PXA27x ++ /* bits 58-77 and 86, 87 */ ++ GPDR1 |= (0x3f << 26); ++ GPDR2 |= 0x00c03fff; ++ ++ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20); ++ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa; ++ GAFR2_U = (GAFR2_U & 0xffff0fff) | 0xa000; ++#endif ++ ldd_bits = 25; ++ break; ++ } ++ } + else { + printk(KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n"); + return; + } + +- for (gpio = 58; ldd_bits; gpio++, ldd_bits--) ++ for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) { + pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT); ++ } + pxa_gpio_mode(GPIO74_LCD_FCLK_MD); + pxa_gpio_mode(GPIO75_LCD_LCLK_MD); + pxa_gpio_mode(GPIO76_LCD_PCLK_MD); +@@ -837,6 +942,7 @@ + /* enable LCD controller clock */ + clk_enable(fbi->clk); + ++ down(&fcs_lcd_sem); + /* Sequence from 11.7.10 */ + LCCR3 = fbi->reg_lccr3; + LCCR2 = fbi->reg_lccr2; +@@ -847,6 +953,8 @@ + FDADR1 = fbi->fdadr1; + LCCR0 |= LCCR0_ENB; + ++ up(&fcs_lcd_sem); ++ + pr_debug("FDADR0 0x%08x\n", (unsigned int) FDADR0); + pr_debug("FDADR1 0x%08x\n", (unsigned int) FDADR1); + pr_debug("LCCR0 0x%08x\n", (unsigned int) LCCR0); +@@ -862,6 +970,7 @@ + + pr_debug("pxafb: disabling LCD controller\n"); + ++ down(&fcs_lcd_sem); + set_current_state(TASK_UNINTERRUPTIBLE); + add_wait_queue(&fbi->ctrlr_wait, &wait); + +@@ -871,6 +980,7 @@ + + schedule_timeout(200 * HZ / 1000); + remove_wait_queue(&fbi->ctrlr_wait, &wait); ++ up(&fcs_lcd_sem); + + /* disable LCD controller clock */ + clk_disable(fbi->clk); +@@ -888,6 +998,11 @@ + LCCR0 |= LCCR0_LDM; + wake_up(&fbi->ctrlr_wait); + } ++ if (lcsr & LCSR_EOF && fcs_in_eof) { ++ LCCR0 |= LCCR0_EFM; ++ fcs_in_eof = 0; ++ wake_up(&fcs_wait_eof); ++ } + + LCSR = lcsr; + return IRQ_HANDLED; +@@ -898,7 +1013,7 @@ + * sleep when disabling the LCD controller, or if we get two contending + * processes trying to alter state. + */ +-static void set_ctrlr_state(struct pxafb_info *fbi, u_int state) ++void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state) + { + u_int old_state; + +@@ -920,7 +1035,9 @@ + */ + if (old_state != C_DISABLE && old_state != C_DISABLE_PM) { + fbi->state = state; +- //TODO __pxafb_lcd_power(fbi, 0); ++ /* TODO __pxafb_lcd_power(fbi, 0); */ ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); + pxafb_disable_controller(fbi); + } + break; +@@ -934,6 +1051,8 @@ + fbi->state = state; + __pxafb_backlight_power(fbi, 0); + __pxafb_lcd_power(fbi, 0); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); + if (old_state != C_DISABLE_CLKCHANGE) + pxafb_disable_controller(fbi); + } +@@ -947,7 +1066,9 @@ + if (old_state == C_DISABLE_CLKCHANGE) { + fbi->state = C_ENABLE; + pxafb_enable_controller(fbi); +- //TODO __pxafb_lcd_power(fbi, 1); ++ /* TODO __pxafb_lcd_power(fbi, 1); */ ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); + } + break; + +@@ -959,9 +1080,13 @@ + */ + if (old_state == C_ENABLE) { + __pxafb_lcd_power(fbi, 0); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE); + pxafb_disable_controller(fbi); + pxafb_setup_gpio(fbi); + pxafb_enable_controller(fbi); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); + __pxafb_lcd_power(fbi, 1); + } + break; +@@ -987,11 +1112,46 @@ + pxafb_enable_controller(fbi); + __pxafb_lcd_power(fbi, 1); + __pxafb_backlight_power(fbi, 1); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE); + } + break; ++ ++ case C_BLANK: ++ /* ++ * Disable controller, blank overlays if exist. ++ */ ++ if ((old_state != C_DISABLE) && (old_state != C_BLANK)) { ++ fbi->state = state; ++ __pxafb_backlight_power(fbi, 0); ++ __pxafb_lcd_power(fbi, 0); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_BLANK); ++ if (old_state != C_DISABLE_CLKCHANGE) ++ pxafb_disable_controller(fbi); ++ } ++ break; ++ ++ case C_UNBLANK: ++ /* ++ * Power up the LCD screen, enable controller, and ++ * turn on the backlight, unblank overlays if exist. ++ */ ++ if ((old_state != C_ENABLE) && (old_state != C_UNBLANK)) { ++ fbi->state = C_UNBLANK; ++ pxafb_setup_gpio(fbi); ++ pxafb_enable_controller(fbi); ++ __pxafb_lcd_power(fbi, 1); ++ __pxafb_backlight_power(fbi, 1); ++ if(fbi->set_overlay_ctrlr_state) ++ fbi->set_overlay_ctrlr_state(fbi, C_UNBLANK); ++ } ++ break; ++ + } + up(&fbi->ctrlr_sem); + } ++EXPORT_SYMBOL(pxafb_set_ctrlr_state); + + /* + * Our LCD controller task (which is called when we blank or unblank) +@@ -1003,7 +1163,7 @@ + container_of(work, struct pxafb_info, task); + u_int state = xchg(&fbi->task_state, -1); + +- set_ctrlr_state(fbi, state); ++ pxafb_set_ctrlr_state(fbi, state); + } + + #ifdef CONFIG_CPU_FREQ +@@ -1018,19 +1178,29 @@ + pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data) + { + struct pxafb_info *fbi = TO_INF(nb, freq_transition); +- //TODO struct cpufreq_freqs *f = data; ++ /* TODO struct cpufreq_freqs *f = data; */ ++ struct cpufreq_freqs *clkinfo; + u_int pcd; ++ u_int lccr3; + + switch (val) { + case CPUFREQ_PRECHANGE: +- set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); ++ pxafb_set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE); + break; + + case CPUFREQ_POSTCHANGE: +- pcd = get_pcd(fbi, fbi->fb.var.pixclock); ++ clkinfo = (struct cpufreq_freqs *)data; ++ /* If leaving a 13kHz state with the LCD sustained */ ++ if ((clkinfo->old == 13000)) ++ break; ++ ++ pcd = get_pcd(fbi->fb.var.pixclock); ++ lccr3 = fbi->reg_lccr3; + set_hsync_time(fbi, pcd); + fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd); +- set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); ++ pxafb_set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE); ++ if (lccr3 != fbi->reg_lccr3 && !((LCCR0 & LCCR0_DIS) || !(LCCR0 & LCCR0_ENB))) ++ LCCR3 = fbi->reg_lccr3; + break; + } + return 0; +@@ -1049,7 +1219,7 @@ + printk(KERN_DEBUG "min dma period: %d ps, " + "new clock %d kHz\n", pxafb_display_dma_period(var), + policy->max); +- // TODO: fill in min/max values ++ /* TODO: fill in min/max values */ + break; + #if 0 + case CPUFREQ_NOTIFY: +@@ -1075,7 +1245,7 @@ + { + struct pxafb_info *fbi = platform_get_drvdata(dev); + +- set_ctrlr_state(fbi, C_DISABLE_PM); ++ pxafb_set_ctrlr_state(fbi, C_DISABLE_PM); + return 0; + } + +@@ -1083,7 +1253,11 @@ + { + struct pxafb_info *fbi = platform_get_drvdata(dev); + +- set_ctrlr_state(fbi, C_ENABLE_PM); ++ pxafb_set_ctrlr_state(fbi, C_ENABLE_PM); ++//RP#ifdef CONFIG_PXA27x ++//RP LCCR4 |= (1 << 31); /* Disable the PCD Divisor, PCDDIV */ ++//RP LCCR4 |= (5 << 17); /* Undocumented feature */ ++//RP#endif + return 0; + } + #else +@@ -1197,11 +1371,21 @@ + fbi->task_state = (u_char)-1; + + for (i = 0; i < inf->num_modes; i++) { +- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; ++ if (mode[i].bpp <= 16) { /* 8, 16 bpp */ ++ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8; ++ } else if ( mode[i].bpp > 19 ) { /* 24, 25 bpp */ ++ smemlen = mode[i].xres * mode[i].yres * 4; ++ } else { /* 18, 19 bpp */ ++ /* packed format */ ++ smemlen = mode[i].xres * mode[i].yres * 3; ++ } ++ + if (smemlen > fbi->fb.fix.smem_len) + fbi->fb.fix.smem_len = smemlen; + } + ++ fbi->set_overlay_ctrlr_state = NULL; ++ + init_waitqueue_head(&fbi->ctrlr_wait); + INIT_WORK(&fbi->task, pxafb_task); + init_MUTEX(&fbi->ctrlr_sem); +@@ -1268,6 +1452,10 @@ + case 4: + case 8: + case 16: ++ case 18: ++ case 19: ++ case 24: ++ case 25: + inf->modes[0].bpp = bpp; + dev_info(dev, "overriding bit depth: %d\n", bpp); + break; +@@ -1416,7 +1604,7 @@ + fbi = pxafb_init_fbinfo(&dev->dev); + if (!fbi) { + dev_err(&dev->dev, "Failed to initialize framebuffer device\n"); +- ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc ++ ret = -ENOMEM; /* only reason for pxafb_init_fbinfo to fail is kmalloc */ + goto failed; + } + +@@ -1451,7 +1639,7 @@ + } + + #ifdef CONFIG_PM +- // TODO ++ /* TODO */ + #endif + + #ifdef CONFIG_CPU_FREQ +@@ -1464,7 +1652,12 @@ + /* + * Ok, now enable the LCD controller + */ +- set_ctrlr_state(fbi, C_ENABLE); ++ pxafb_set_ctrlr_state(fbi, C_ENABLE); ++//#ifdef CONFIG_PXA27x ++// LCCR4 |= (1 << 31); /* Disabel the PCD Divisor, PCDDIV */ ++// LCCR4 |= (5 << 17); /* Undocumented feature */ ++//#endif ++ init_waitqueue_head(&fcs_wait_eof); + + return 0; + +--- linux-2.6.24-rc1.orig/drivers/video/pxafb.h ++++ linux-2.6.24-rc1/drivers/video/pxafb.h +@@ -29,6 +29,60 @@ + unsigned int lccr3; + }; + ++struct pxafb_rgb { ++ struct fb_bitfield red; ++ struct fb_bitfield green; ++ struct fb_bitfield blue; ++ struct fb_bitfield transp; ++}; ++ ++#ifdef CONFIG_PXA27x ++/* PXA Overlay Framebuffer Support */ ++struct overlayfb_info ++{ ++ struct fb_info fb; ++ ++ struct fb_var_screeninfo old_var; ++ ++ struct semaphore mutex; ++ unsigned long refcount; ++ ++ struct pxafb_info *basefb; ++ ++ unsigned long map_cpu; ++ unsigned long screen_cpu; ++ unsigned long palette_cpu; ++ unsigned long map_size; ++ unsigned long palette_size; ++ ++ dma_addr_t screen_dma; ++ dma_addr_t map_dma; ++ dma_addr_t palette_dma; ++ ++ volatile u_char state; ++ ++ /* overlay specific info */ ++ unsigned long xpos; /* screen position (x, y)*/ ++ unsigned long ypos; ++ unsigned long format; ++ ++ /* additional */ ++ union { ++ struct pxafb_dma_descriptor *dma0; ++ struct pxafb_dma_descriptor *dma1; ++ struct { ++ struct pxafb_dma_descriptor *dma2; ++ struct pxafb_dma_descriptor *dma3; ++ struct pxafb_dma_descriptor *dma4; ++ }; ++ struct { ++ struct pxafb_dma_descriptor *dma5_pal; ++ struct pxafb_dma_descriptor *dma5_frame; ++ }; ++ }; ++}; ++#endif ++ + /* PXA LCD DMA descriptor */ + struct pxafb_dma_descriptor { + unsigned int fdadr; +@@ -90,6 +144,14 @@ + wait_queue_head_t ctrlr_wait; + struct work_struct task; + ++#ifdef CONFIG_PXA27x ++ /* PXA Overlay Framebuffer Support */ ++ struct overlayfb_info *overlay1fb; ++ struct overlayfb_info *overlay2fb; ++ struct overlayfb_info *cursorfb; ++#endif ++ void (*set_overlay_ctrlr_state)(struct pxafb_info *, u_int); ++ + #ifdef CONFIG_CPU_FREQ + struct notifier_block freq_transition; + struct notifier_block freq_policy; +@@ -109,6 +171,9 @@ + #define C_DISABLE_PM (5) + #define C_ENABLE_PM (6) + #define C_STARTUP (7) ++#define C_BLANK (8) ++#define C_UNBLANK (9) ++ + + #define PXA_NAME "PXA" + +--- /dev/null ++++ linux-2.6.24-rc1/drivers/video/pxafb_overlay.c +@@ -0,0 +1,1525 @@ ++/* ++ * linux/drivers/video/pxafb_overlay.c ++ * ++ * Copyright (c) 2004, Intel Corporation ++ * ++ * Code Status: ++ * 2004/10/28: <yan.yin@intel.com> ++ * - Ported to 2.6 kernel ++ * - Made overlay driver a loadable module ++ * - Merged overlay optimized patch ++ * 2004/03/10: <stanley.cai@intel.com> ++ * - Fixed Bugs ++ * - Added workaround for overlay1&2 ++ * 2003/08/27: <yu.tang@intel.com> ++ * - Added Overlay 1 & Overlay2 & Hardware Cursor support ++ * ++ * ++ * This software program is licensed subject to the GNU Lesser General ++ * Public License (LGPL). Version 2.1, February 1999, available at ++ * http://www.gnu.org/copyleft/lesser.html ++ * ++ * Intel PXA27x LCD Controller Frame Buffer Overlay Driver ++ * ++ * ++ */ ++ ++#include <linux/module.h> ++#include <linux/moduleparam.h> ++#include <linux/kernel.h> ++#include <linux/sched.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/interrupt.h> ++#include <linux/slab.h> ++#include <linux/fb.h> ++#include <linux/delay.h> ++#include <linux/init.h> ++#include <linux/ioport.h> ++#include <linux/cpufreq.h> ++#include <linux/device.h> ++#include <linux/platform_device.h> ++#include <linux/dma-mapping.h> ++ ++#include <asm/hardware.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/uaccess.h> ++#include <asm/arch/bitfield.h> ++#include <asm/arch/pxafb.h> ++#include <asm/arch/pxa-regs.h> ++ ++#include "pxafb.h" ++ ++/* LCD enhancement : Overlay 1 & 2 & Hardware Cursor */ ++ ++/* ++ * LCD enhancement : Overlay 1 ++ * ++ * Features: ++ * - support 16bpp (No palette) ++ */ ++/* ++ * debugging? ++ */ ++#define DEBUG 0 ++ ++#ifdef DEBUG ++#define dbg(fmt,arg...) printk(KERN_ALERT "%s(): " fmt "\n", __FUNCTION__, ##arg) ++#else ++#define dbg(fmt,arg...) ++#endif ++ ++static int overlay1fb_enable(struct fb_info *info); ++static int overlay2fb_enable(struct fb_info *info); ++static int cursorfb_enable(struct fb_info *info); ++ ++static int overlay1fb_disable(struct fb_info *info); ++static int overlay2fb_disable(struct fb_info *info); ++static int cursorfb_disable(struct fb_info *info); ++ ++static int overlay1fb_blank(int blank, struct fb_info *info); ++static int overlay2fb_blank(int blank, struct fb_info *info); ++static int cursorfb_blank(int blank, struct fb_info *info); ++ ++extern void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state); ++extern int pxafb_blank(int blank, struct fb_info *info); ++ ++static struct pxafb_rgb def_rgb_18 = { ++ red: { offset: 12, length: 6, }, ++ green: { offset: 6, length: 6, }, ++ blue: { offset: 0, length: 6, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_16 = { ++ red: { offset: 10, length: 5, }, ++ green: { offset: 5, length: 5, }, ++ blue: { offset: 0, length: 5, }, ++ transp: { offset: 15, length: 1, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_19 = { ++ red: { offset: 12, length: 6, }, ++ green: { offset: 6, length: 6, }, ++ blue: { offset: 0, length: 6, }, ++ transp: { offset: 18, length: 1, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_24 = { ++ red: { offset: 16, length: 7, }, ++ green: { offset: 8, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 0, length: 0, }, ++}; ++ ++static struct pxafb_rgb def_rgbt_25 = { ++ red: { offset: 16, length: 8, }, ++ green: { offset: 8, length: 8, }, ++ blue: { offset: 0, length: 8, }, ++ transp: { offset: 24, length: 1, }, ++}; ++ ++#define CLEAR_LCD_INTR(reg, intr) do { \ ++ reg = (intr); \ ++}while(0) ++ ++#define WAIT_FOR_LCD_INTR(reg,intr,timeout) ({ \ ++ int __done =0; \ ++ int __t = timeout; \ ++ while (__t) { \ ++ __done = (reg) & (intr); \ ++ if (__done) break; \ ++ mdelay(10); \ ++ __t--; \ ++ } \ ++ if (!__t) dbg("wait " #intr " timeount");\ ++ __done; \ ++}) ++ ++#define DISABLE_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \ ++ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \ ++ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \ ++ cursorfb_disable((struct fb_info*)fbi->cursorfb); \ ++ } \ ++}while(0) ++ ++#define ENABLE_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_DISABLE)) { \ ++ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_DISABLE)) { \ ++ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_DISABLE)) { \ ++ cursorfb_enable((struct fb_info*)fbi->cursorfb); \ ++ } \ ++}while(0) ++ ++#define BLANK_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \ ++ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \ ++ fbi->overlay1fb->state = C_BLANK; \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \ ++ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \ ++ fbi->overlay2fb->state = C_BLANK; \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \ ++ cursorfb_disable((struct fb_info*)fbi->cursorfb); \ ++ fbi->cursorfb->state = C_BLANK; \ ++ } \ ++}while(0) ++ ++#define UNBLANK_OVERLAYS(fbi) do { \ ++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_BLANK)) { \ ++ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \ ++ fbi->overlay1fb->state = C_ENABLE; \ ++ } \ ++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_BLANK)) { \ ++ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \ ++ fbi->overlay2fb->state = C_ENABLE; \ ++ } \ ++ if (fbi->cursorfb && (fbi->cursorfb->state == C_BLANK)) { \ ++ cursorfb_enable((struct fb_info*)fbi->cursorfb); \ ++ fbi->cursorfb->state = C_ENABLE; \ ++ } \ ++}while(0) ++ ++static int overlay1fb_open(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int ret = 0; ++ ++/* If basefb is disable, enable fb. */ ++ if (fbi->basefb && fbi->basefb->state != C_ENABLE) ++ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb)); ++ ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ ret = -EACCES; ++ else ++ fbi->refcount ++; ++ ++ up(&fbi->mutex); ++ ++ /* Initialize the variables in overlay1 framebuffer. */ ++ fbi->fb.var.xres = fbi->fb.var.yres = 0; ++ fbi->fb.var.bits_per_pixel = 0; ++ ++ return ret; ++} ++ ++static int overlay1fb_release(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ fbi->refcount --; ++ ++ up(&fbi->mutex); ++ /* disable overlay when released */ ++ overlay1fb_blank(1, info); ++ ++ return 0; ++} ++ ++static int overlay1fb_map_video_memory(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ ++ if (fbi->map_cpu) ++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); ++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); ++ ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ ++ if (!fbi->map_cpu) return -ENOMEM; ++ ++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; ++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; ++ ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ ++ /* setup dma descriptor */ ++ fbi->dma1 = (struct pxafb_dma_descriptor*) ++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); ++ ++ fbi->dma1->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma1->fsadr = fbi->screen_dma; ++ fbi->dma1->fidr = 0; ++ fbi->dma1->ldcmd = fbi->fb.fix.smem_len; ++ ++ return 0; ++} ++ ++static int overlay1fb_enable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ unsigned long bpp1; ++ ++ if (!fbi->map_cpu) return -EINVAL; ++ ++ switch (fbi->fb.var.bits_per_pixel) { ++ case 16: ++ bpp1 = 0x4; ++ break; ++ case 18: ++ bpp1 = 0x6; ++ break; ++ case 19: ++ bpp1 = 0x8; ++ break; ++ case 24: ++ bpp1 = 0x9; ++ break; ++ case 25: ++ bpp1 = 0xa; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* disable branch/start/end of frame interrupt */ ++ LCCR5 |= (LCCR5_IUM1 | LCCR5_BSM1 | LCCR5_EOFM1 | LCCR5_SOFM1); ++ ++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) ++ FDADR1 = (fbi->dma1->fdadr); ++ else ++ FBR1 = fbi->dma1->fdadr | 0x1; ++ ++ /* enable overlay 1 window */ ++ OVL1C2 = (fbi->ypos << 10) | fbi->xpos; ++ OVL1C1 = OVL1C1_O1EN | (bpp1 << 20) | ((fbi->fb.var.yres-1)<<10) | (fbi->fb.var.xres-1); ++ ++ fbi->state = C_ENABLE; ++ ++ return 0; ++} ++ ++static int overlay1fb_disable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*)info; ++ int done; ++ ++ if ((fbi->state == C_DISABLE) || (fbi->state == C_BLANK)) ++ return 0; ++ ++ fbi->state = C_DISABLE; ++ ++ /* clear O1EN */ ++ OVL1C1 &= ~OVL1C1_O1EN; ++ ++ CLEAR_LCD_INTR(LCSR1, LCSR1_BS1); ++ FBR1 = 0x3; ++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS1, 100); ++ ++ if (!done) { ++ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__); ++ return -1; ++ } ++ return 0; ++} ++ ++static int overlay1fb_blank(int blank, struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int err=0; ++ ++ switch (blank) { ++ case 0: ++ err = overlay1fb_enable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ case 1: ++ err = overlay1fb_disable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ default: ++ break; ++ } ++ ++ return err; ++} ++ ++static int overlay1fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int xpos, ypos; ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ ++ /* must in base frame */ ++ xpos = (var->nonstd & 0x3ff); ++ ypos = ((var->nonstd>>10) & 0x3ff); ++ ++ if ( (xpos + var->xres) > fbi->basefb->fb.var.xres ) ++ return -EINVAL; ++ ++ if ( (ypos + var->yres) > fbi->basefb->fb.var.yres ) ++ return -EINVAL; ++ ++ switch (var->bits_per_pixel) { ++ case 16: ++ if ( var->xres & 0x1 ) { ++ printk("xres should be a multiple of 2 pixels!\n"); ++ return -EINVAL; ++ } ++ break; ++ case 18: ++ case 19: ++ if ( var->xres & 0x7 ) { ++ printk("xres should be a multiple of 8 pixels!\n"); ++ return -EINVAL; ++ } ++ break; ++ default: ++ break; ++ } ++ ++ fbi->old_var=*var; ++ ++ var->activate=FB_ACTIVATE_NOW; ++ ++ return 0; ++} ++ ++ ++static int overlay1fb_set_par(struct fb_info *info) ++{ ++ int nbytes=0, err=0, pixels_per_line=0; ++ ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ ++ info->flags &= ~FBINFO_MISC_USEREVENT; ++ ++ if (fbi->state == C_BLANK) ++ return 0; ++ ++ if (fbi->state == C_DISABLE) ++ goto out1; ++ ++ /* only xpos & ypos change */ ++ if ( (var->xres == fbi->old_var.xres) && ++ (var->yres == fbi->old_var.yres) && ++ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) ) ++ goto out2; ++ ++out1: ++ switch(var->bits_per_pixel) { ++ case 16: ++ /* 2 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1); ++ nbytes = 2; ++ ++ var->red = def_rgbt_16.red; ++ var->green = def_rgbt_16.green; ++ var->blue = def_rgbt_16.blue; ++ var->transp = def_rgbt_16.transp; ++ ++ break; ++ case 18: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgb_18.red; ++ var->green = def_rgb_18.green; ++ var->blue = def_rgb_18.blue; ++ var->transp = def_rgb_18.transp; ++ ++ break; ++ case 19: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgbt_19.red; ++ var->green = def_rgbt_19.green; ++ var->blue = def_rgbt_19.blue; ++ var->transp = def_rgbt_19.transp; ++ ++ break; ++ case 24: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_24.red; ++ var->green = def_rgbt_24.green; ++ var->blue = def_rgbt_24.blue; ++ var->transp = def_rgbt_24.transp; ++ ++ break; ++ case 25: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_25.red; ++ var->green = def_rgbt_25.green; ++ var->blue = def_rgbt_25.blue; ++ var->transp = def_rgbt_25.transp; ++ ++ break; ++ } ++ ++ fbi->fb.fix.line_length = nbytes * pixels_per_line; ++ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres; ++ ++ err= overlay1fb_map_video_memory((struct fb_info*)fbi); ++ ++ if (err) ++ return err; ++ ++out2: ++ fbi->xpos = var->nonstd & 0x3ff; ++ fbi->ypos = (var->nonstd>>10) & 0x3ff; ++ ++ overlay1fb_enable(info); ++ ++ return 0; ++ ++} ++ ++static struct fb_ops overlay1fb_ops = { ++ .owner = THIS_MODULE, ++ .fb_open = overlay1fb_open, ++ .fb_release = overlay1fb_release, ++ .fb_check_var = overlay1fb_check_var, ++ .fb_set_par = overlay1fb_set_par, ++ .fb_blank = overlay1fb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++}; ++ ++ /* ++ * LCD enhancement : Overlay 2 ++ * ++ * Features: ++ * - support planar YCbCr420/YCbCr422/YCbCr444; ++ */ ++static int overlay2fb_open(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int ret = 0; ++ ++ /* if basefb is disable, enable fb. */ ++ if (fbi->basefb && fbi->basefb->state != C_ENABLE) ++ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb)); ++ ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ ret = -EACCES; ++ else ++ fbi->refcount ++; ++ ++ up(&fbi->mutex); ++ fbi->fb.var.xres = fbi->fb.var.yres = 0; ++ ++ return ret; ++} ++ ++static int overlay2fb_release(struct fb_info *info, int user) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ ++ down(&fbi->mutex); ++ ++ if (fbi->refcount) ++ fbi->refcount --; ++ ++ up(&fbi->mutex); ++ ++ /* disable overlay when released */ ++ overlay2fb_blank(1, info); ++ ++ return 0; ++} ++ ++static int overlay2fb_map_YUV_memory( struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ unsigned int ylen, cblen, crlen, aylen, acblen, acrlen; ++ unsigned int yoff, cboff, croff; ++ unsigned int xres,yres; ++ unsigned int nbytes; ++ ++ ylen = cblen = crlen = aylen = acblen = acrlen = 0; ++ yoff = cboff = croff = 0; ++ ++ if (fbi->map_cpu) ++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); ++ ++ yres = fbi->fb.var.yres; ++ ++ switch(fbi->format) { ++ case 0x4: /* YCbCr 4:2:0 planar */ ++ pr_debug("420 planar\n"); ++ /* 16 pixels per line */ ++ xres = (fbi->fb.var.xres + 0xf) & (~0xf); ++ fbi->fb.fix.line_length = xres; ++ ++ nbytes = xres * yres; ++ ylen = nbytes; ++ cblen = crlen = (nbytes/4); ++ ++ break; ++ case 0x3: /* YCbCr 4:2:2 planar */ ++ /* 8 pixles per line */ ++ pr_debug("422 planar\n"); ++ xres = (fbi->fb.var.xres + 0x7) & (~0x7); ++ fbi->fb.fix.line_length = xres; ++ ++ nbytes = xres * yres; ++ ylen = nbytes; ++ cblen = crlen = (nbytes/2); ++ ++ break; ++ case 0x2: /* YCbCr 4:4:4 planar */ ++ /* 4 pixels per line */ ++ pr_debug("444 planar\n"); ++ xres = (fbi->fb.var.xres + 0x3) & (~0x3); ++ fbi->fb.fix.line_length = xres; ++ ++ nbytes = xres * yres; ++ ylen = cblen = crlen = nbytes; ++ break; ++ } ++ ++ /* 16-bytes alignment for DMA */ ++ aylen = (ylen + 0xf) & (~0xf); ++ acblen = (cblen + 0xf) & (~0xf); ++ acrlen = (crlen + 0xf) & (~0xf); ++ ++ fbi->fb.fix.smem_len = aylen + acblen + acrlen; ++ ++ /* alloc memory */ ++ ++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ ++ if (!fbi->map_cpu) return -ENOMEM; ++ ++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; ++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; ++ ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ ++ /* setup dma for Planar format */ ++ fbi->dma2 = (struct pxafb_dma_descriptor*) ++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma3 = fbi->dma2 - 1; ++ fbi->dma4 = fbi->dma3 - 1; ++ ++ /* offset */ ++ yoff = 0; ++ cboff = aylen; ++ croff = cboff + acblen; ++ ++ /* Y vector */ ++ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma2->fsadr = fbi->screen_dma + yoff; ++ fbi->dma2->fidr = 0; ++ fbi->dma2->ldcmd = ylen; ++ ++ /* Cb vector */ ++ fbi->dma3->fdadr = (fbi->dma2->fdadr - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma3->fsadr = (fbi->screen_dma + cboff); ++ fbi->dma3->fidr = 0; ++ fbi->dma3->ldcmd = cblen; ++ ++ /* Cr vector */ ++ ++ fbi->dma4->fdadr = (fbi->dma3->fdadr - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma4->fsadr = (fbi->screen_dma + croff); ++ fbi->dma4->fidr = 0; ++ fbi->dma4->ldcmd = crlen; ++ ++ /* adjust for user */ ++ fbi->fb.var.red.length = ylen; ++ fbi->fb.var.red.offset = yoff; ++ fbi->fb.var.green.length = cblen; ++ fbi->fb.var.green.offset = cboff; ++ fbi->fb.var.blue.length = crlen; ++ fbi->fb.var.blue.offset = croff; ++ ++ return 0; ++}; ++ ++static int overlay2fb_map_RGB_memory( struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ int pixels_per_line=0 , nbytes=0; ++ ++ if (fbi->map_cpu) ++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma); ++ ++ switch(var->bits_per_pixel) { ++ case 16: ++ /* 2 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1); ++ nbytes = 2; ++ ++ var->red = def_rgbt_16.red; ++ var->green = def_rgbt_16.green; ++ var->blue = def_rgbt_16.blue; ++ var->transp = def_rgbt_16.transp; ++ break; ++ ++ case 18: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgb_18.red; ++ var->green = def_rgb_18.green; ++ var->blue = def_rgb_18.blue; ++ var->transp = def_rgb_18.transp; ++ ++ break; ++ case 19: ++ /* 8 pixels per line */ ++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7); ++ nbytes = 3; ++ ++ var->red = def_rgbt_19.red; ++ var->green = def_rgbt_19.green; ++ var->blue = def_rgbt_19.blue; ++ var->transp = def_rgbt_19.transp; ++ ++ break; ++ case 24: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_24.red; ++ var->green = def_rgbt_24.green; ++ var->blue = def_rgbt_24.blue; ++ var->transp = def_rgbt_24.transp; ++ ++ break; ++ ++ case 25: ++ pixels_per_line = fbi->fb.var.xres; ++ nbytes = 4; ++ ++ var->red = def_rgbt_25.red; ++ var->green = def_rgbt_25.green; ++ var->blue = def_rgbt_25.blue; ++ var->transp = def_rgbt_25.transp; ++ ++ break; ++ } ++ ++ fbi->fb.fix.line_length = nbytes * pixels_per_line; ++ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres; ++ ++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE); ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ ++ if (!fbi->map_cpu) return -ENOMEM; ++ ++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE; ++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE; ++ ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ ++ /* setup dma descriptor */ ++ fbi->dma2 = (struct pxafb_dma_descriptor*) ++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor)); ++ ++ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor)); ++ fbi->dma2->fsadr = fbi->screen_dma; ++ fbi->dma2->fidr = 0; ++ fbi->dma2->ldcmd = fbi->fb.fix.smem_len; ++ ++ return 0; ++} ++ ++static int overlay2fb_enable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ unsigned long bpp2; ++ unsigned int xres, yres; ++ ++ if (!fbi->map_cpu) return -EINVAL; ++ ++ switch(fbi->fb.var.bits_per_pixel) { ++ case 16: ++ bpp2 = 0x4; ++ break; ++ case 18: ++ bpp2 = 0x6; ++ break; ++ case 19: ++ bpp2 = 0x8; ++ break; ++ case 24: ++ bpp2 = 0x9; ++ break; ++ case 25: ++ bpp2 = 0xa; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* disable branch/start/end of frame interrupt */ ++ LCCR5 |= (LCCR5_IUM4 | LCCR5_IUM3 | LCCR5_IUM2 | ++ LCCR5_BSM4 | LCCR5_BSM3 | LCCR5_BSM2 | ++ LCCR5_EOFM4 | LCCR5_EOFM3 | LCCR5_EOFM2 | ++ LCCR5_SOFM4 | LCCR5_SOFM3 | LCCR5_SOFM2); ++ ++ if (fbi->format == 0) { ++ /* overlay2 RGB resolution, RGB and YUV have different xres value*/ ++ xres = fbi->fb.var.xres; ++ yres = fbi->fb.var.yres; ++ ++ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos; ++ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1); ++ /* setup RGB DMA */ ++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) ++ FDADR2 = fbi->dma2->fdadr; ++ else ++ FBR2 = fbi->dma2->fdadr | 0x1; ++ } else { ++ /* overlay2 YUV resolution */ ++ xres = fbi->fb.fix.line_length; ++ yres = fbi->fb.var.yres; ++ ++ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos; ++ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1); ++ ++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) { ++ FDADR2 = fbi->dma2->fdadr; ++ FDADR3 = fbi->dma3->fdadr; ++ FDADR4 = fbi->dma4->fdadr; ++ } else { ++ FBR2 = fbi->dma2->fdadr | 0x01; ++ FBR3 = fbi->dma3->fdadr | 0x01; ++ FBR4 = fbi->dma4->fdadr | 0x01; ++ } ++ } ++ ++ fbi->state = C_ENABLE; ++ return 0; ++} ++ ++static int overlay2fb_disable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*)info; ++ int done; ++ ++ if (fbi->state == C_DISABLE) ++ return 0; ++ if (fbi->state == C_BLANK) { ++ fbi->state = C_DISABLE; ++ return 0; ++ } ++ ++ fbi->state = C_DISABLE; ++ ++ /* clear O2EN */ ++ OVL2C1 &= ~OVL2C1_O2EN; ++ ++ /* Make overlay2 can't disable/enable ++ * correctly sometimes. ++ */ ++ CLEAR_LCD_INTR(LCSR1, LCSR1_BS2); ++ ++ if (fbi->format == 0) ++ FBR2 = 0x3; ++ else { ++ FBR2 = 0x3; ++ FBR3 = 0x3; ++ FBR4 = 0x3; ++ } ++ ++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS2, 100); ++ ++ if (!done) { ++ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__); ++ return -1; ++ } ++ return 0; ++} ++ ++static int overlay2fb_blank(int blank, struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ int err=0; ++ ++ switch(blank) ++ { ++ case 0: ++ err = overlay2fb_enable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ case 1: ++ err = overlay2fb_disable(info); ++ if (err) { ++ fbi->state = C_DISABLE; ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ } ++ break; ++ default: ++ /* reserved */ ++ break; ++ } ++ ++ return err; ++} ++ ++ ++static int overlay2fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int xpos, ypos, xres, yres; ++ int format; ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ ++ xres=yres=0; ++ ++ xpos = (var->nonstd & 0x3ff); ++ ypos = (var->nonstd >> 10) & 0x3ff; ++ format = (var->nonstd >>20) & 0x7; ++ ++ ++ /* Palnar YCbCr444, YCbCr422, YCbCr420 */ ++ if ( (format != 0x4) && (format != 0x3) && (format != 0x2) && (format !=0x0)) ++ return -EINVAL; ++ ++ /* dummy pixels */ ++ switch(format) { ++ case 0x0: /* RGB */ ++ xres = var->xres; ++ break; ++ case 0x2: /* 444 */ ++ xres = (var->xres + 0x3) & ~(0x3); ++ break; ++ case 0x3: /* 422 */ ++ xres = (var->xres + 0x7) & ~(0x7); ++ break; ++ case 0x4: /* 420 */ ++ xres = (var->xres + 0xf) & ~(0xf); ++ break; ++ } ++ yres = var->yres; ++ ++ if ( (xpos + xres) > fbi->basefb->fb.var.xres ) ++ return -EINVAL; ++ ++ if ( (ypos + yres) > fbi->basefb->fb.var.yres ) ++ return -EINVAL; ++ ++ fbi->old_var=*var; ++ ++ var->activate=FB_ACTIVATE_NOW; ++ ++ return 0; ++ ++} ++ ++ ++/* ++ * overlay2fb_set_var() ++ * ++ * var.nonstd is used as YCbCr format. ++ * var.red/green/blue is used as (Y/Cb/Cr) vector ++ */ ++ ++static int overlay2fb_set_par(struct fb_info *info) ++{ ++ unsigned int xpos, ypos; ++ int format, err; ++ ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ ++ info->flags &= ~FBINFO_MISC_USEREVENT; ++ ++ if (fbi->state == C_BLANK) ++ return 0; ++ ++ if (fbi->state == C_DISABLE) ++ goto out1; ++ ++ if ( (var->xres == fbi->old_var.xres) && ++ (var->yres == fbi->old_var.yres) && ++ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) && ++ (((var->nonstd>>20) & 0x7) == fbi->format) ) ++ goto out2; ++ ++out1: ++ xpos = var->nonstd & 0x3ff; ++ ypos = (var->nonstd>>10) & 0x3ff; ++ format = (var->nonstd>>20) & 0x7; ++ ++ ++ fbi->format = format; ++ if ( fbi->format==0 ) ++ err = overlay2fb_map_RGB_memory(info); ++ else ++ err = overlay2fb_map_YUV_memory(info); ++ ++ if (err) return err; ++ ++out2: ++ /* position */ ++ fbi->xpos = var->nonstd & 0x3ff; ++ fbi->ypos = (var->nonstd>>10) & 0x3ff; ++ ++ overlay2fb_enable(info); ++ ++ return 0; ++} ++ ++static struct fb_ops overlay2fb_ops = { ++ .owner = THIS_MODULE, ++ .fb_open = overlay2fb_open, ++ .fb_release = overlay2fb_release, ++ .fb_check_var = overlay2fb_check_var, ++ .fb_set_par = overlay2fb_set_par, ++ .fb_blank = overlay2fb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++}; ++ ++/* Hardware cursor */ ++ ++/* Bulverde Cursor Modes */ ++struct cursorfb_mode{ ++ int xres; ++ int yres; ++ int bpp; ++}; ++ ++static struct cursorfb_mode cursorfb_modes[]={ ++ { 32, 32, 2}, ++ { 32, 32, 2}, ++ { 32, 32, 2}, ++ { 64, 64, 2}, ++ { 64, 64, 2}, ++ { 64, 64, 2}, ++ {128, 128, 1}, ++ {128, 128, 1} ++}; ++ ++static int cursorfb_enable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ ++ if (!fbi->map_cpu) return -EINVAL; ++ ++ CCR &= ~CCR_CEN; ++ ++ /* set palette format ++ * ++ * FIXME: if only cursor uses palette ++ */ ++ LCCR4 = (LCCR4 & (~(0x3<<15))) | (0x1<<15); ++ ++ /* disable branch/start/end of frame interrupt */ ++ LCCR5 |= (LCCR5_IUM5 | LCCR5_BSM5 | LCCR5_EOFM5 | LCCR5_SOFM5); ++ ++ /* load palette and frame data */ ++ if (fbi->state == C_DISABLE) { ++ FDADR5 = fbi->dma5_pal->fdadr; ++ udelay(1); ++ FDADR5 = fbi->dma5_frame->fdadr; ++ udelay(1); ++ ++ } ++ else { ++ FBR5 = fbi->dma5_pal->fdadr | 0x1; ++ udelay(1); ++ FBR5 = fbi->dma5_frame->fdadr | 0x1; ++ udelay(1); ++ } ++ ++ CCR = CCR_CEN | (fbi->ypos << 15) | (fbi->xpos << 5) | (fbi->format); ++ ++ fbi->state = C_ENABLE; ++ ++ return 0; ++} ++ ++static int cursorfb_disable(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*)info; ++ int done, ret = 0; ++ ++ fbi->state = C_DISABLE; ++ ++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS5, 100); ++ if (!done) ret = -1; ++ ++ CCR &= ~CCR_CEN; ++ ++ return ret; ++} ++ ++static int cursorfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int trans, struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info *)info; ++ u_int val, ret = 1; ++ u_int *pal=(u_int*) fbi->palette_cpu; ++ ++ /* 25bit with Transparcy for 16bpp format */ ++ if (regno < fbi->palette_size) { ++ val = ((trans << 24) & 0x1000000); ++ val |= ((red << 16) & 0x0ff0000); ++ val |= ((green << 8 ) & 0x000ff00); ++ val |= ((blue << 0) & 0x00000ff); ++ ++ pal[regno] = val; ++ ret = 0; ++ } ++ return ret; ++} ++ ++int cursorfb_blank(int blank, struct fb_info *info) ++{ ++ switch(blank) ++ { ++ case 0: ++ cursorfb_enable(info); ++ break; ++ case 1: ++ cursorfb_disable(info); ++ break; ++ default: ++ /* reserved */ ++ break; ++ } ++ return 0; ++} ++ ++static int cursorfb_check_var( struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int xpos, ypos, xres, yres; ++ int mode; ++ struct cursorfb_mode *cursor; ++ struct overlayfb_info *fbi=(struct overlayfb_info*)info; ++ ++ mode = var->nonstd & 0x7; ++ xpos = (var->nonstd>>5) & 0x3ff; ++ ypos = (var->nonstd>>15) & 0x3ff; ++ ++ if (mode>7 || mode <0 ) ++ return -EINVAL; ++ ++ cursor = cursorfb_modes + mode; ++ ++ xres = cursor->xres; ++ yres = cursor->yres; ++ ++ if ( (xpos + xres) > fbi->basefb->fb.var.xres ) ++ return -EINVAL; ++ ++ if ( (ypos + yres) > fbi->basefb->fb.var.yres ) ++ return -EINVAL; ++ ++ return 0; ++ ++} ++ ++static int cursorfb_set_par(struct fb_info *info) ++{ ++ struct overlayfb_info *fbi = (struct overlayfb_info*) info; ++ struct fb_var_screeninfo *var = &fbi->fb.var; ++ struct cursorfb_mode *cursor; ++ int mode, xpos, ypos; ++ int err; ++ ++ info->flags &= ~FBINFO_MISC_USEREVENT; ++ ++ mode = var->nonstd & 0x7; ++ xpos = (var->nonstd>>5) & 0x3ff; ++ ypos = (var->nonstd>>15) & 0x3ff; ++ ++ if (mode != fbi->format) { ++ cursor = cursorfb_modes + mode; ++ ++ /* update "var" info */ ++ fbi->fb.var.xres = cursor->xres; ++ fbi->fb.var.yres = cursor->yres; ++ fbi->fb.var.bits_per_pixel = cursor->bpp; ++ ++ /* alloc video memory ++ * ++ * 4k is engouh for 128x128x1 cursor, ++ * - 2k for cursor pixels, ++ * - 2k for palette data, plus 2 dma descriptor ++ */ ++ if (!fbi->map_cpu) { ++ fbi->map_size = PAGE_SIZE; ++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size, ++ &fbi->map_dma, GFP_KERNEL ); ++ if (!fbi->map_cpu) return -ENOMEM; ++ } ++ ++ cursor = cursorfb_modes + mode; ++ ++ /* update overlay & fix "info" */ ++ fbi->screen_cpu = fbi->map_cpu; ++ fbi->palette_cpu = fbi->map_cpu + (PAGE_SIZE/2); ++ fbi->screen_dma = fbi->map_dma; ++ fbi->palette_dma = fbi->map_dma + (PAGE_SIZE/2); ++ ++ fbi->format = mode; ++ fbi->palette_size = (1<<cursor->bpp); ++ fbi->fb.fix.smem_start = fbi->screen_dma; ++ fbi->fb.fix.smem_len = cursor->xres * cursor->yres * cursor->bpp / 8; ++ fbi->fb.fix.line_length = cursor->xres * cursor->bpp / 8; ++ ++ fbi->dma5_pal = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 16 ); ++ fbi->dma5_pal->fdadr = (fbi->map_dma + PAGE_SIZE - 16); ++ fbi->dma5_pal->fsadr = fbi->palette_dma; ++ fbi->dma5_pal->fidr = 0; ++ fbi->dma5_pal->ldcmd = (fbi->palette_size<<2) | LDCMD_PAL; ++ ++ fbi->dma5_frame = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 32 ); ++ fbi->dma5_frame->fdadr = (fbi->map_dma + PAGE_SIZE - 32); ++ fbi->dma5_frame->fsadr = fbi->screen_dma; ++ fbi->dma5_frame->fidr = 0; ++ fbi->dma5_frame->ldcmd = fbi->fb.fix.smem_len; ++ ++ /* alloc & set default cmap */ ++ err = fb_alloc_cmap(&fbi->fb.cmap, fbi->palette_size, 0); ++ if (err) return err; ++ err = fb_set_cmap(&fbi->fb.cmap, info); ++ if (err) return err; ++ } ++ ++ /* update overlay info */ ++ if ( (xpos != fbi->xpos) || (ypos != fbi->ypos) ) { ++ fbi->xpos = xpos; ++ fbi->ypos = ypos; ++ } ++ ++ cursorfb_enable(info); ++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE); ++ ++ return 0; ++} ++ ++static struct fb_ops cursorfb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = cursorfb_check_var, ++ .fb_set_par = cursorfb_set_par, ++ .fb_blank = cursorfb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_setcolreg = cursorfb_setcolreg, ++}; ++ ++static struct overlayfb_info * __init overlay1fb_init_fbinfo(void) ++{ ++ struct overlayfb_info *fbi; ++ ++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); ++ if (!fbi) ++ return NULL; ++ ++ memset(fbi, 0, sizeof(struct overlayfb_info) ); ++ ++ fbi->refcount = 0; ++ init_MUTEX(&fbi->mutex); ++ ++ strcpy(fbi->fb.fix.id, "overlay1"); ++ ++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; ++ fbi->fb.fix.type_aux = 0; ++ fbi->fb.fix.xpanstep = 0; ++ fbi->fb.fix.ypanstep = 0; ++ fbi->fb.fix.ywrapstep = 0; ++ fbi->fb.fix.accel = FB_ACCEL_NONE; ++ ++ fbi->fb.var.nonstd = 0; ++ fbi->fb.var.activate = FB_ACTIVATE_NOW; ++ fbi->fb.var.height = -1; ++ fbi->fb.var.width = -1; ++ fbi->fb.var.accel_flags = 0; ++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; ++ ++ ++ fbi->fb.fbops = &overlay1fb_ops; ++ fbi->fb.flags = FBINFO_FLAG_DEFAULT; ++ fbi->fb.node = -1; ++ fbi->fb.pseudo_palette = NULL; ++ ++ fbi->xpos = 0; ++ fbi->ypos = 0; ++ fbi->format = -1; ++ fbi->state = C_DISABLE; ++ ++ return fbi; ++} ++ ++static struct overlayfb_info * __init overlay2fb_init_fbinfo(void) ++{ ++ struct overlayfb_info *fbi; ++ ++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); ++ if (!fbi) ++ return NULL; ++ ++ memset(fbi, 0, sizeof(struct overlayfb_info) ); ++ ++ fbi->refcount = 0; ++ init_MUTEX(&fbi->mutex); ++ ++ strcpy(fbi->fb.fix.id, "overlay2"); ++ ++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; ++ fbi->fb.fix.type_aux = 0; ++ fbi->fb.fix.xpanstep = 0; ++ fbi->fb.fix.ypanstep = 0; ++ fbi->fb.fix.ywrapstep = 0; ++ fbi->fb.fix.accel = FB_ACCEL_NONE; ++ ++ fbi->fb.var.nonstd = 0; ++ fbi->fb.var.activate = FB_ACTIVATE_NOW; ++ fbi->fb.var.height = -1; ++ fbi->fb.var.width = -1; ++ fbi->fb.var.accel_flags = 0; ++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; ++ ++ fbi->fb.fbops = &overlay2fb_ops; ++ fbi->fb.flags = FBINFO_FLAG_DEFAULT; ++ fbi->fb.node = -1; ++ fbi->fb.pseudo_palette = NULL; ++ ++ fbi->xpos = 0; ++ fbi->ypos = 0; ++ fbi->format = -1; ++ fbi->state = C_DISABLE; ++ ++ return fbi; ++} ++ ++static struct overlayfb_info * __init cursorfb_init_fbinfo(void) ++{ ++ struct overlayfb_info *fbi; ++ ++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL); ++ if (!fbi) ++ return NULL; ++ ++ memset(fbi, 0, sizeof(struct overlayfb_info) ); ++ ++ fbi->refcount = 0; ++ init_MUTEX(&fbi->mutex); ++ ++ strcpy(fbi->fb.fix.id, "cursor"); ++ ++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS; ++ fbi->fb.fix.type_aux = 0; ++ fbi->fb.fix.xpanstep = 0; ++ fbi->fb.fix.ypanstep = 0; ++ fbi->fb.fix.ywrapstep = 0; ++ fbi->fb.fix.accel = FB_ACCEL_NONE; ++ ++ fbi->fb.var.nonstd = 0; ++ fbi->fb.var.activate = FB_ACTIVATE_NOW; ++ fbi->fb.var.height = -1; ++ fbi->fb.var.width = -1; ++ fbi->fb.var.accel_flags = 0; ++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED; ++ ++ fbi->fb.fbops = &cursorfb_ops; ++ fbi->fb.flags = FBINFO_FLAG_DEFAULT; ++ fbi->fb.node = -1; ++ fbi->fb.pseudo_palette = NULL; ++ ++ ++ fbi->xpos = 0; ++ fbi->ypos = 0; ++ fbi->format = -1; ++ fbi->state = C_DISABLE; ++ ++ return fbi; ++} ++ ++ ++void pxa_set_overlay_ctrlr_state(struct pxafb_info *fbi, u_int state) ++{ ++ switch (state) { ++ case C_DISABLE: ++ DISABLE_OVERLAYS(fbi); ++ break; ++ case C_ENABLE: ++ ENABLE_OVERLAYS(fbi); ++ break; ++ case C_BLANK: ++ BLANK_OVERLAYS(fbi); ++ break; ++ case C_UNBLANK: ++ UNBLANK_OVERLAYS(fbi); ++ break; ++ default: ++ break; ++ } ++} ++ ++static int is_pxafb_device(struct device * dev, void * data) ++{ ++ struct platform_device *pdev = container_of(dev, struct platform_device, dev); ++ ++ return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0); ++} ++ ++static int __devinit pxafb_overlay_init(void) ++{ ++ int ret; ++ struct overlayfb_info *overlay1fb, *overlay2fb, *cursorfb; ++ struct pxafb_info *fbi; ++ struct device *dev; ++ ++ ret = -1; ++ overlay1fb = overlay2fb = cursorfb = NULL; ++ fbi = NULL; ++ ++ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); ++ if (!dev) { ++ printk(KERN_INFO "Base framebuffer not exists, failed to load overlay driver!\n"); ++ return ret; ++ } ++ ++ fbi = dev_get_drvdata(dev); ++ if (fbi == NULL) { ++ printk(KERN_INFO "Base framebuffer not initialized, failed to load overlay driver!\n"); ++ return ret; ++ } ++ ++ /* Overlay 1 windows */ ++ overlay1fb = overlay1fb_init_fbinfo(); ++ ++ if (!overlay1fb) { ++ ret = -ENOMEM; ++ printk("overlay1fb_init_fbinfo failed\n"); ++ goto failed; ++ } ++ ++ ret = register_framebuffer(&overlay1fb->fb); ++ if (ret < 0) ++ goto failed; ++ ++ /* Overlay 2 window */ ++ overlay2fb = overlay2fb_init_fbinfo(); ++ ++ if (!overlay2fb) { ++ ret = -ENOMEM; ++ printk("overlay2fb_init_fbinfo failed\n"); ++ goto failed; ++ } ++ ++ ret = register_framebuffer(&overlay2fb->fb); ++ if (ret < 0) goto failed; ++ ++ /* Hardware cursor window */ ++ cursorfb = cursorfb_init_fbinfo(); ++ ++ if (!cursorfb) { ++ ret = -ENOMEM; ++ printk("cursorfb_init_fbinfo failed\n"); ++ goto failed; ++ } ++ ++ ret = register_framebuffer(&cursorfb->fb); ++ if (ret < 0) goto failed; ++ ++ ++ /* set refernce to Overlays */ ++ fbi->overlay1fb = overlay1fb; ++ fbi->overlay2fb = overlay2fb; ++ fbi->cursorfb = cursorfb; ++ fbi->set_overlay_ctrlr_state=pxa_set_overlay_ctrlr_state; ++ ++ /* set refernce to BaseFrame */ ++ overlay1fb->basefb = fbi; ++ overlay2fb->basefb = fbi; ++ cursorfb->basefb = fbi; ++ ++ printk(KERN_INFO "Load PXA Overlay driver successfully!\n"); ++ ++ return 0; ++ ++failed: ++ if (overlay1fb) ++ kfree(overlay1fb); ++ if (overlay2fb) ++ kfree(overlay2fb); ++ if (cursorfb) ++ kfree(cursorfb); ++ printk(KERN_INFO "Load PXA Overlay driver failed!\n"); ++ return ret; ++} ++ ++static void __exit pxafb_overlay_exit(void) ++{ ++ struct pxafb_info *fbi; ++ struct device *dev; ++ ++ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); ++ if (!dev) ++ return; ++ ++ fbi = dev_get_drvdata(dev); ++ if (!fbi) ++ return; ++ ++ if (fbi->overlay1fb) { ++ unregister_framebuffer(&(fbi->overlay1fb->fb)); ++ kfree(fbi->overlay1fb); ++ fbi->overlay1fb = NULL; ++ } ++ ++ if (fbi->overlay2fb) { ++ unregister_framebuffer(&(fbi->overlay2fb->fb)); ++ kfree(fbi->overlay2fb); ++ fbi->overlay2fb = NULL; ++ } ++ ++ if (fbi->cursorfb) { ++ unregister_framebuffer(&(fbi->cursorfb->fb)); ++ kfree(fbi->cursorfb); ++ fbi->cursorfb = NULL; ++ } ++ ++ fbi->set_overlay_ctrlr_state = NULL; ++ ++ printk(KERN_INFO "Unload PXA Overlay driver successfully!\n"); ++ return; ++} ++ ++ ++module_init(pxafb_overlay_init); ++module_exit(pxafb_overlay_exit); ++ ++MODULE_DESCRIPTION("Loadable framebuffer overlay driver for PXA"); ++MODULE_LICENSE("GPL"); ++ +--- linux-2.6.24-rc1.orig/include/asm-arm/arch-pxa/pxa-regs.h ++++ linux-2.6.24-rc1/include/asm-arm/arch-pxa/pxa-regs.h +@@ -789,11 +789,18 @@ + #define UDC_INT_PACKETCMP (0x1) + + #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2)) ++/* Older defines, do not use. */ + #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */ + #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */ + #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */ + #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */ + #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */ ++/* New defines. */ ++#define UDCISR1_IRCC (1 << 31) /* IntEn - Configuration Change */ ++#define UDCISR1_IRSOF (1 << 30) /* IntEn - Start of Frame */ ++#define UDCISR1_IRRU (1 << 29) /* IntEn - Resume */ ++#define UDCISR1_IRSU (1 << 28) /* IntEn - Suspend */ ++#define UDCISR1_IRRS (1 << 27) /* IntEn - Reset */ + + #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */ + #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */ +@@ -1827,6 +1834,8 @@ + #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ + #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ + #define LCSR __REG(0x44000038) /* LCD Controller Status Register */ ++#define LCSR0 __REG(0x44000038) /* LCD Controller Status Register */ ++#define LCSR1 __REG(0x44000034) /* LCD Controller Status Register */ + #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */ + #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */ + #define TMEDCR __REG(0x44000044) /* TMED Control Register */ +@@ -1836,6 +1845,10 @@ + #define LCCR3_4BPP (2 << 24) + #define LCCR3_8BPP (3 << 24) + #define LCCR3_16BPP (4 << 24) ++#define LCCR3_18BPP (6 << 24) ++#define LCCR3_19BPP (8 << 24) ++#define LCCR3_24BPP (9 << 24) ++#define LCCR3_25BPP (10<< 24) + + #define LCCR3_PDFOR_0 (0 << 30) + #define LCCR3_PDFOR_1 (1 << 30) +@@ -2010,6 +2023,104 @@ + + #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */ + ++/* Overlay1 & Overlay2 & Hardware Cursor */ ++#define LCSR1_SOF1 (1 << 0) ++#define LCSR1_SOF2 (1 << 1) ++#define LCSR1_SOF3 (1 << 2) ++#define LCSR1_SOF4 (1 << 3) ++#define LCSR1_SOF5 (1 << 4) ++#define LCSR1_SOF6 (1 << 5) ++ ++#define LCSR1_EOF1 (1 << 8) ++#define LCSR1_EOF2 (1 << 9) ++#define LCSR1_EOF3 (1 << 10) ++#define LCSR1_EOF4 (1 << 11) ++#define LCSR1_EOF5 (1 << 12) ++#define LCSR1_EOF6 (1 << 13) ++ ++#define LCSR1_BS1 (1 << 16) ++#define LCSR1_BS2 (1 << 17) ++#define LCSR1_BS3 (1 << 18) ++#define LCSR1_BS4 (1 << 19) ++#define LCSR1_BS5 (1 << 20) ++#define LCSR1_BS6 (1 << 21) ++ ++#define LCSR1_IU2 (1 << 25) ++#define LCSR1_IU3 (1 << 26) ++#define LCSR1_IU4 (1 << 27) ++#define LCSR1_IU5 (1 << 28) ++#define LCSR1_IU6 (1 << 29) ++ ++#define LDCMD_SOFINT (1 << 22) ++#define LDCMD_EOFINT (1 << 21) ++ ++ ++#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */ ++#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */ ++#define LCCR5_SOFM3 (1<<2) /* Start Of Frame Mask for Overlay 2 (channel 3) */ ++#define LCCR5_SOFM4 (1<<3) /* Start Of Frame Mask for Overlay 2 (channel 4) */ ++#define LCCR5_SOFM5 (1<<4) /* Start Of Frame Mask for cursor (channel 5) */ ++#define LCCR5_SOFM6 (1<<5) /* Start Of Frame Mask for command data (channel 6) */ ++ ++#define LCCR5_EOFM1 (1<<8) /* End Of Frame Mask for Overlay 1 (channel 1) */ ++#define LCCR5_EOFM2 (1<<9) /* End Of Frame Mask for Overlay 2 (channel 2) */ ++#define LCCR5_EOFM3 (1<<10) /* End Of Frame Mask for Overlay 2 (channel 3) */ ++#define LCCR5_EOFM4 (1<<11) /* End Of Frame Mask for Overlay 2 (channel 4) */ ++#define LCCR5_EOFM5 (1<<12) /* End Of Frame Mask for cursor (channel 5) */ ++#define LCCR5_EOFM6 (1<<13) /* End Of Frame Mask for command data (channel 6) */ ++ ++#define LCCR5_BSM1 (1<<16) /* Branch mask for Overlay 1 (channel 1) */ ++#define LCCR5_BSM2 (1<<17) /* Branch mask for Overlay 2 (channel 2) */ ++#define LCCR5_BSM3 (1<<18) /* Branch mask for Overlay 2 (channel 3) */ ++#define LCCR5_BSM4 (1<<19) /* Branch mask for Overlay 2 (channel 4) */ ++#define LCCR5_BSM5 (1<<20) /* Branch mask for cursor (channel 5) */ ++#define LCCR5_BSM6 (1<<21) /* Branch mask for data command (channel 6) */ ++ ++#define LCCR5_IUM1 (1<<24) /* Input FIFO Underrun Mask for Overlay 1 */ ++#define LCCR5_IUM2 (1<<25) /* Input FIFO Underrun Mask for Overlay 2 */ ++#define LCCR5_IUM3 (1<<26) /* Input FIFO Underrun Mask for Overlay 2 */ ++#define LCCR5_IUM4 (1<<27) /* Input FIFO Underrun Mask for Overlay 2 */ ++#define LCCR5_IUM5 (1<<28) /* Input FIFO Underrun Mask for cursor */ ++#define LCCR5_IUM6 (1<<29) /* Input FIFO Underrun Mask for data command */ ++ ++#define OVL1C1_O1EN (1<<31) /* Enable bit for Overlay 1 */ ++#define OVL2C1_O2EN (1<<31) /* Enable bit for Overlay 2 */ ++#define CCR_CEN (1<<31) /* Enable bit for Cursor */ ++ ++/* LCD registers */ ++#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */ ++#define LCCR5 __REG(0x44000014) /* LCD Controller Control Register 5 */ ++#define FBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */ ++#define FBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */ ++#define FBR2 __REG(0x44000028) /* DMA Channel 2 Frame Branch Register */ ++#define FBR3 __REG(0x4400002C) /* DMA Channel 3 Frame Branch Register */ ++#define FBR4 __REG(0x44000030) /* DMA Channel 4 Frame Branch Register */ ++#define FDADR2 __REG(0x44000220) /* DMA Channel 2 Frame Descriptor Address Register */ ++#define FSADR2 __REG(0x44000224) /* DMA Channel 2 Frame Source Address Register */ ++#define FIDR2 __REG(0x44000228) /* DMA Channel 2 Frame ID Register */ ++#define LDCMD2 __REG(0x4400022C) /* DMA Channel 2 Command Register */ ++#define FDADR3 __REG(0x44000230) /* DMA Channel 3 Frame Descriptor Address Register */ ++#define FSADR3 __REG(0x44000234) /* DMA Channel 3 Frame Source Address Register */ ++#define FIDR3 __REG(0x44000238) /* DMA Channel 3 Frame ID Register */ ++#define LDCMD3 __REG(0x4400023C) /* DMA Channel 3 Command Register */ ++#define FDADR4 __REG(0x44000240) /* DMA Channel 4 Frame Descriptor Address Register */ ++#define FSADR4 __REG(0x44000244) /* DMA Channel 4 Frame Source Address Register */ ++#define FIDR4 __REG(0x44000248) /* DMA Channel 4 Frame ID Register */ ++#define LDCMD4 __REG(0x4400024C) /* DMA Channel 4 Command Register */ ++#define FDADR5 __REG(0x44000250) /* DMA Channel 5 Frame Descriptor Address Register */ ++#define FSADR5 __REG(0x44000254) /* DMA Channel 5 Frame Source Address Register */ ++#define FIDR5 __REG(0x44000258) /* DMA Channel 5 Frame ID Register */ ++#define LDCMD5 __REG(0x4400025C) /* DMA Channel 5 Command Register */ ++ ++#define OVL1C1 __REG(0x44000050) /* Overlay 1 Control Register 1 */ ++#define OVL1C2 __REG(0x44000060) /* Overlay 1 Control Register 2 */ ++#define OVL2C1 __REG(0x44000070) /* Overlay 2 Control Register 1 */ ++#define OVL2C2 __REG(0x44000080) /* Overlay 2 Control Register 2 */ ++#define CCR __REG(0x44000090) /* Cursor Control Register */ ++ ++#define FBR5 __REG(0x44000110) /* DMA Channel 5 Frame Branch Register */ ++#define FBR6 __REG(0x44000114) /* DMA Channel 6 Frame Branch Register */ ++ + /* + * Memory controller + */ diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa_fb_overlay.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa_fb_overlay.patch index 49c59b3275..49c59b3275 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa_fb_overlay.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/pxa_fb_overlay.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch index b513ba1466..b513ba1466 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/squashfs3.0-2.6.15.patch index a210afcaf8..a210afcaf8 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/squashfs3.0-2.6.15.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/squashfs3.0-2.6.15.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/squashfs3.2-2.6.20-r0.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/squashfs3.2-2.6.20-r0.patch new file mode 100644 index 0000000000..3870b317e4 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/squashfs3.2-2.6.20-r0.patch @@ -0,0 +1,4376 @@ +--- linux-2.6.24-rc1.orig/fs/Kconfig ++++ linux-2.6.24-rc1/fs/Kconfig +@@ -1405,6 +1405,71 @@ + + If unsure, say N. + ++config SQUASHFS ++ tristate "SquashFS 3.2 - Squashed file system support" ++ select ZLIB_INFLATE ++ help ++ Saying Y here includes support for SquashFS 3.2 (a Compressed Read-Only File ++ System). Squashfs is a highly compressed read-only filesystem for Linux. ++ It uses zlib compression to compress both files, inodes and directories. ++ Inodes in the system are very small and all blocks are packed to minimise ++ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K. ++ SquashFS 3.1 supports 64 bit filesystems and files (larger than 4GB), full ++ uid/gid information, hard links and timestamps. ++ ++ Squashfs is intended for general read-only filesystem use, for archival ++ use (i.e. in cases where a .tar.gz file may be used), and in embedded ++ systems where low overhead is needed. Further information and filesystem tools ++ are available from http://squashfs.sourceforge.net. ++ ++ If you want to compile this as a module ( = code which can be ++ inserted in and removed from the running kernel whenever you want), ++ say M here and read <file:Documentation/modules.txt>. The module ++ will be called squashfs. Note that the root file system (the one ++ containing the directory /) cannot be compiled as a module. ++ ++ If unsure, say N. ++ ++config SQUASHFS_EMBEDDED ++ ++ bool "Additional options for memory-constrained systems" ++ depends on SQUASHFS ++ default n ++ help ++ Saying Y here allows you to specify cache sizes and how Squashfs ++ allocates memory. This is only intended for memory constrained ++ systems. ++ ++ If unsure, say N. ++ ++config SQUASHFS_FRAGMENT_CACHE_SIZE ++ int "Number of fragments cached" if SQUASHFS_EMBEDDED ++ depends on SQUASHFS ++ default "3" ++ help ++ By default SquashFS caches the last 3 fragments read from ++ the filesystem. Increasing this amount may mean SquashFS ++ has to re-read fragments less often from disk, at the expense ++ of extra system memory. Decreasing this amount will mean ++ SquashFS uses less memory at the expense of extra reads from disk. ++ ++ Note there must be at least one cached fragment. Anything ++ much more than three will probably not make much difference. ++ ++config SQUASHFS_VMALLOC ++ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED ++ depends on SQUASHFS ++ default n ++ help ++ By default SquashFS uses kmalloc to obtain fragment cache memory. ++ Kmalloc memory is the standard kernel allocator, but it can fail ++ on memory constrained systems. Because of the way Vmalloc works, ++ Vmalloc can succeed when kmalloc fails. Specifying this option ++ will make SquashFS always use Vmalloc to allocate the ++ fragment cache memory. ++ ++ If unsure, say N. ++ + config VXFS_FS + tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" + depends on BLOCK +--- linux-2.6.24-rc1.orig/fs/Makefile ++++ linux-2.6.24-rc1/fs/Makefile +@@ -72,6 +72,7 @@ + obj-$(CONFIG_JBD2) += jbd2/ + obj-$(CONFIG_EXT2_FS) += ext2/ + obj-$(CONFIG_CRAMFS) += cramfs/ ++obj-$(CONFIG_SQUASHFS) += squashfs/ + obj-y += ramfs/ + obj-$(CONFIG_HUGETLBFS) += hugetlbfs/ + obj-$(CONFIG_CODA_FS) += coda/ +--- /dev/null ++++ linux-2.6.24-rc1/fs/squashfs/inode.c +@@ -0,0 +1,2329 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher <phillip@lougher.org.uk> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * inode.c ++ */ ++ ++#include <linux/squashfs_fs.h> ++#include <linux/module.h> ++#include <linux/zlib.h> ++#include <linux/fs.h> ++#include <linux/squashfs_fs_sb.h> ++#include <linux/squashfs_fs_i.h> ++#include <linux/buffer_head.h> ++#include <linux/vfs.h> ++#include <linux/vmalloc.h> ++#include <linux/smp_lock.h> ++ ++#include "squashfs.h" ++ ++static void vfs_read_inode(struct inode *i); ++static struct dentry *squashfs_get_parent(struct dentry *child); ++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode); ++static int squashfs_statfs(struct dentry *, struct kstatfs *); ++static int squashfs_symlink_readpage(struct file *file, struct page *page); ++static long long read_blocklist(struct inode *inode, int index, ++ int readahead_blks, char *block_list, ++ unsigned short **block_p, unsigned int *bsize); ++static int squashfs_readpage(struct file *file, struct page *page); ++static int squashfs_readpage4K(struct file *file, struct page *page); ++static int squashfs_readdir(struct file *, void *, filldir_t); ++static struct dentry *squashfs_lookup(struct inode *, struct dentry *, ++ struct nameidata *); ++static int squashfs_remount(struct super_block *s, int *flags, char *data); ++static void squashfs_put_super(struct super_block *); ++static int squashfs_get_sb(struct file_system_type *,int, const char *, void *, ++ struct vfsmount *); ++static struct inode *squashfs_alloc_inode(struct super_block *sb); ++static void squashfs_destroy_inode(struct inode *inode); ++static int init_inodecache(void); ++static void destroy_inodecache(void); ++ ++static struct file_system_type squashfs_fs_type = { ++ .owner = THIS_MODULE, ++ .name = "squashfs", ++ .get_sb = squashfs_get_sb, ++ .kill_sb = kill_block_super, ++ .fs_flags = FS_REQUIRES_DEV ++}; ++ ++static const unsigned char squashfs_filetype_table[] = { ++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK ++}; ++ ++static struct super_operations squashfs_super_ops = { ++ .alloc_inode = squashfs_alloc_inode, ++ .destroy_inode = squashfs_destroy_inode, ++ .statfs = squashfs_statfs, ++ .put_super = squashfs_put_super, ++ .remount_fs = squashfs_remount ++}; ++ ++static struct super_operations squashfs_export_super_ops = { ++ .alloc_inode = squashfs_alloc_inode, ++ .destroy_inode = squashfs_destroy_inode, ++ .statfs = squashfs_statfs, ++ .put_super = squashfs_put_super, ++ .read_inode = vfs_read_inode ++}; ++ ++static struct export_operations squashfs_export_ops = { ++ .get_parent = squashfs_get_parent ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = { ++ .readpage = squashfs_symlink_readpage ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_aops = { ++ .readpage = squashfs_readpage ++}; ++ ++SQSH_EXTERN const struct address_space_operations squashfs_aops_4K = { ++ .readpage = squashfs_readpage4K ++}; ++ ++static const struct file_operations squashfs_dir_ops = { ++ .read = generic_read_dir, ++ .readdir = squashfs_readdir ++}; ++ ++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = { ++ .lookup = squashfs_lookup ++}; ++ ++ ++static struct buffer_head *get_block_length(struct super_block *s, ++ int *cur_index, int *offset, int *c_byte) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ unsigned short temp; ++ struct buffer_head *bh; ++ ++ if (!(bh = sb_bread(s, *cur_index))) ++ goto out; ++ ++ if (msblk->devblksize - *offset == 1) { ++ if (msblk->swap) ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ else ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ brelse(bh); ++ if (!(bh = sb_bread(s, ++(*cur_index)))) ++ goto out; ++ if (msblk->swap) ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ bh->b_data); ++ else ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ bh->b_data); ++ *c_byte = temp; ++ *offset = 1; ++ } else { ++ if (msblk->swap) { ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset + 1)); ++ } else { ++ ((unsigned char *) &temp)[0] = *((unsigned char *) ++ (bh->b_data + *offset)); ++ ((unsigned char *) &temp)[1] = *((unsigned char *) ++ (bh->b_data + *offset + 1)); ++ } ++ *c_byte = temp; ++ *offset += 2; ++ } ++ ++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) { ++ if (*offset == msblk->devblksize) { ++ brelse(bh); ++ if (!(bh = sb_bread(s, ++(*cur_index)))) ++ goto out; ++ *offset = 0; ++ } ++ if (*((unsigned char *) (bh->b_data + *offset)) != ++ SQUASHFS_MARKER_BYTE) { ++ ERROR("Metadata block marker corrupt @ %x\n", ++ *cur_index); ++ brelse(bh); ++ goto out; ++ } ++ (*offset)++; ++ } ++ return bh; ++ ++out: ++ return NULL; ++} ++ ++ ++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer, ++ long long index, unsigned int length, ++ long long *next_index, int srclength) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >> ++ msblk->devblksize_log2) + 2]; ++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1); ++ unsigned int cur_index = index >> msblk->devblksize_log2; ++ int bytes, avail_bytes, b = 0, k = 0; ++ unsigned int compressed; ++ unsigned int c_byte = length; ++ ++ if (c_byte) { ++ bytes = msblk->devblksize - offset; ++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte); ++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte); ++ ++ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, compressed ++ ? "" : "un", (unsigned int) c_byte, srclength); ++ ++ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used) ++ goto read_failure; ++ ++ if (!(bh[0] = sb_getblk(s, cur_index))) ++ goto block_release; ++ ++ for (b = 1; bytes < c_byte; b++) { ++ if (!(bh[b] = sb_getblk(s, ++cur_index))) ++ goto block_release; ++ bytes += msblk->devblksize; ++ } ++ ll_rw_block(READ, b, bh); ++ } else { ++ if (index < 0 || (index + 2) > sblk->bytes_used) ++ goto read_failure; ++ ++ if (!(bh[0] = get_block_length(s, &cur_index, &offset, ++ &c_byte))) ++ goto read_failure; ++ ++ bytes = msblk->devblksize - offset; ++ compressed = SQUASHFS_COMPRESSED(c_byte); ++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte); ++ ++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed ++ ? "" : "un", (unsigned int) c_byte); ++ ++ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used) ++ goto read_failure; ++ ++ for (b = 1; bytes < c_byte; b++) { ++ if (!(bh[b] = sb_getblk(s, ++cur_index))) ++ goto block_release; ++ bytes += msblk->devblksize; ++ } ++ ll_rw_block(READ, b - 1, bh + 1); ++ } ++ ++ if (compressed) { ++ int zlib_err = 0; ++ ++ /* ++ * uncompress block ++ */ ++ ++ mutex_lock(&msblk->read_data_mutex); ++ ++ msblk->stream.next_out = buffer; ++ msblk->stream.avail_out = srclength; ++ ++ for (bytes = 0; k < b; k++) { ++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? ++ msblk->devblksize - offset : ++ c_byte - bytes; ++ wait_on_buffer(bh[k]); ++ if (!buffer_uptodate(bh[k])) ++ goto release_mutex; ++ ++ msblk->stream.next_in = bh[k]->b_data + offset; ++ msblk->stream.avail_in = avail_bytes; ++ ++ if (k == 0) { ++ zlib_err = zlib_inflateInit(&msblk->stream); ++ if (zlib_err != Z_OK) { ++ ERROR("zlib_inflateInit returned unexpected result 0x%x, srclength %d\n", ++ zlib_err, srclength); ++ goto release_mutex; ++ } ++ ++ if (avail_bytes == 0) { ++ offset = 0; ++ brelse(bh[k]); ++ continue; ++ } ++ } ++ ++ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH); ++ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) { ++ ERROR("zlib_inflate returned unexpected result 0x%x, srclength %d, avail_in %d, avail_out %d\n", ++ zlib_err, srclength, msblk->stream.avail_in, msblk->stream.avail_out); ++ goto release_mutex; ++ } ++ ++ bytes += avail_bytes; ++ offset = 0; ++ brelse(bh[k]); ++ } ++ ++ if (zlib_err != Z_STREAM_END) ++ goto release_mutex; ++ ++ zlib_err = zlib_inflateEnd(&msblk->stream); ++ if (zlib_err != Z_OK) { ++ ERROR("zlib_inflateEnd returned unexpected result 0x%x, srclength %d\n", ++ zlib_err, srclength); ++ goto release_mutex; ++ } ++ bytes = msblk->stream.total_out; ++ mutex_unlock(&msblk->read_data_mutex); ++ } else { ++ int i; ++ ++ for(i = 0; i < b; i++) { ++ wait_on_buffer(bh[i]); ++ if(!buffer_uptodate(bh[i])) ++ goto block_release; ++ } ++ ++ for (bytes = 0; k < b; k++) { ++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ? ++ msblk->devblksize - offset : ++ c_byte - bytes; ++ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes); ++ bytes += avail_bytes; ++ offset = 0; ++ brelse(bh[k]); ++ } ++ } ++ ++ if (next_index) ++ *next_index = index + c_byte + (length ? 0 : ++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ++ ? 3 : 2)); ++ return bytes; ++ ++release_mutex: ++ mutex_unlock(&msblk->read_data_mutex); ++ ++block_release: ++ for (; k < b; k++) ++ brelse(bh[k]); ++ ++read_failure: ++ ERROR("sb_bread failed reading block 0x%x\n", cur_index); ++ return 0; ++} ++ ++ ++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer, ++ long long block, unsigned int offset, ++ int length, long long *next_block, ++ unsigned int *next_offset) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ int n, i, bytes, return_length = length; ++ long long next_index; ++ ++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset); ++ ++ while ( 1 ) { ++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) ++ if (msblk->block_cache[i].block == block) ++ break; ++ ++ mutex_lock(&msblk->block_cache_mutex); ++ ++ if (i == SQUASHFS_CACHED_BLKS) { ++ /* read inode header block */ ++ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS; ++ n ; n --, i = (i + 1) % ++ SQUASHFS_CACHED_BLKS) ++ if (msblk->block_cache[i].block != ++ SQUASHFS_USED_BLK) ++ break; ++ ++ if (n == 0) { ++ wait_queue_t wait; ++ ++ init_waitqueue_entry(&wait, current); ++ add_wait_queue(&msblk->waitq, &wait); ++ set_current_state(TASK_UNINTERRUPTIBLE); ++ mutex_unlock(&msblk->block_cache_mutex); ++ schedule(); ++ set_current_state(TASK_RUNNING); ++ remove_wait_queue(&msblk->waitq, &wait); ++ continue; ++ } ++ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS; ++ ++ if (msblk->block_cache[i].block == ++ SQUASHFS_INVALID_BLK) { ++ if (!(msblk->block_cache[i].data = ++ kmalloc(SQUASHFS_METADATA_SIZE, ++ GFP_KERNEL))) { ++ ERROR("Failed to allocate cache" ++ "block\n"); ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } ++ } ++ ++ msblk->block_cache[i].block = SQUASHFS_USED_BLK; ++ mutex_unlock(&msblk->block_cache_mutex); ++ ++ msblk->block_cache[i].length = squashfs_read_data(s, ++ msblk->block_cache[i].data, block, 0, &next_index, SQUASHFS_METADATA_SIZE); ++ if (msblk->block_cache[i].length == 0) { ++ ERROR("Unable to read cache block [%llx:%x]\n", ++ block, offset); ++ mutex_lock(&msblk->block_cache_mutex); ++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; ++ kfree(msblk->block_cache[i].data); ++ wake_up(&msblk->waitq); ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } ++ ++ mutex_lock(&msblk->block_cache_mutex); ++ wake_up(&msblk->waitq); ++ msblk->block_cache[i].block = block; ++ msblk->block_cache[i].next_index = next_index; ++ TRACE("Read cache block [%llx:%x]\n", block, offset); ++ } ++ ++ if (msblk->block_cache[i].block != block) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ continue; ++ } ++ ++ bytes = msblk->block_cache[i].length - offset; ++ ++ if (bytes < 1) { ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto out; ++ } else if (bytes >= length) { ++ if (buffer) ++ memcpy(buffer, msblk->block_cache[i].data + ++ offset, length); ++ if (msblk->block_cache[i].length - offset == length) { ++ *next_block = msblk->block_cache[i].next_index; ++ *next_offset = 0; ++ } else { ++ *next_block = block; ++ *next_offset = offset + length; ++ } ++ mutex_unlock(&msblk->block_cache_mutex); ++ goto finish; ++ } else { ++ if (buffer) { ++ memcpy(buffer, msblk->block_cache[i].data + ++ offset, bytes); ++ buffer += bytes; ++ } ++ block = msblk->block_cache[i].next_index; ++ mutex_unlock(&msblk->block_cache_mutex); ++ length -= bytes; ++ offset = 0; ++ } ++ } ++ ++finish: ++ return return_length; ++out: ++ return 0; ++} ++ ++ ++static int get_fragment_location(struct super_block *s, unsigned int fragment, ++ long long *fragment_start_block, ++ unsigned int *fragment_size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start_block = ++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)]; ++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment); ++ struct squashfs_fragment_entry fragment_entry; ++ ++ if (msblk->swap) { ++ struct squashfs_fragment_entry sfragment_entry; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, ++ start_block, offset, ++ sizeof(sfragment_entry), &start_block, ++ &offset)) ++ goto out; ++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, ++ start_block, offset, ++ sizeof(fragment_entry), &start_block, ++ &offset)) ++ goto out; ++ ++ *fragment_start_block = fragment_entry.start_block; ++ *fragment_size = fragment_entry.size; ++ ++ return 1; ++ ++out: ++ return 0; ++} ++ ++ ++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct ++ squashfs_fragment_cache *fragment) ++{ ++ mutex_lock(&msblk->fragment_mutex); ++ fragment->locked --; ++ wake_up(&msblk->fragment_wait_queue); ++ mutex_unlock(&msblk->fragment_mutex); ++} ++ ++ ++SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block ++ *s, long long start_block, ++ int length) ++{ ++ int i, n; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ while ( 1 ) { ++ mutex_lock(&msblk->fragment_mutex); ++ ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS && ++ msblk->fragment[i].block != start_block; i++); ++ ++ if (i == SQUASHFS_CACHED_FRAGMENTS) { ++ for (i = msblk->next_fragment, n = ++ SQUASHFS_CACHED_FRAGMENTS; n && ++ msblk->fragment[i].locked; n--, i = (i + 1) % ++ SQUASHFS_CACHED_FRAGMENTS); ++ ++ if (n == 0) { ++ wait_queue_t wait; ++ ++ init_waitqueue_entry(&wait, current); ++ add_wait_queue(&msblk->fragment_wait_queue, ++ &wait); ++ set_current_state(TASK_UNINTERRUPTIBLE); ++ mutex_unlock(&msblk->fragment_mutex); ++ schedule(); ++ set_current_state(TASK_RUNNING); ++ remove_wait_queue(&msblk->fragment_wait_queue, ++ &wait); ++ continue; ++ } ++ msblk->next_fragment = (msblk->next_fragment + 1) % ++ SQUASHFS_CACHED_FRAGMENTS; ++ ++ if (msblk->fragment[i].data == NULL) ++ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC ++ (SQUASHFS_FILE_MAX_SIZE))) { ++ ERROR("Failed to allocate fragment " ++ "cache block\n"); ++ mutex_unlock(&msblk->fragment_mutex); ++ goto out; ++ } ++ ++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; ++ msblk->fragment[i].locked = 1; ++ mutex_unlock(&msblk->fragment_mutex); ++ ++ if (!(msblk->fragment[i].length = squashfs_read_data(s, ++ msblk->fragment[i].data, ++ start_block, length, NULL, sblk->block_size))) { ++ ERROR("Unable to read fragment cache block " ++ "[%llx]\n", start_block); ++ msblk->fragment[i].locked = 0; ++ smp_mb(); ++ goto out; ++ } ++ ++ mutex_lock(&msblk->fragment_mutex); ++ msblk->fragment[i].block = start_block; ++ TRACE("New fragment %d, start block %lld, locked %d\n", ++ i, msblk->fragment[i].block, ++ msblk->fragment[i].locked); ++ mutex_unlock(&msblk->fragment_mutex); ++ break; ++ } ++ ++ msblk->fragment[i].locked++; ++ mutex_unlock(&msblk->fragment_mutex); ++ TRACE("Got fragment %d, start block %lld, locked %d\n", i, ++ msblk->fragment[i].block, ++ msblk->fragment[i].locked); ++ break; ++ } ++ ++ return &msblk->fragment[i]; ++ ++out: ++ return NULL; ++} ++ ++ ++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, ++ struct squashfs_base_inode_header *inodeb) ++{ ++ i->i_ino = inodeb->inode_number; ++ i->i_mtime.tv_sec = inodeb->mtime; ++ i->i_atime.tv_sec = inodeb->mtime; ++ i->i_ctime.tv_sec = inodeb->mtime; ++ i->i_uid = msblk->uid[inodeb->uid]; ++ i->i_mode = inodeb->mode; ++ i->i_size = 0; ++ if (inodeb->guid == SQUASHFS_GUIDS) ++ i->i_gid = i->i_uid; ++ else ++ i->i_gid = msblk->guid[inodeb->guid]; ++} ++ ++ ++static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)]; ++ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1); ++ squashfs_inode_t inode; ++ ++ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino); ++ ++ if (msblk->swap) { ++ squashfs_inode_t sinode; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sinode, start, offset, ++ sizeof(sinode), &start, &offset)) ++ goto out; ++ SQUASHFS_SWAP_INODE_T((&inode), &sinode); ++ } else if (!squashfs_get_cached_block(s, (char *) &inode, start, offset, ++ sizeof(inode), &start, &offset)) ++ goto out; ++ ++ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode); ++ ++ return inode; ++ ++out: ++ return SQUASHFS_INVALID_BLK; ++} ++ ++ ++static void vfs_read_inode(struct inode *i) ++{ ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino); ++ ++ TRACE("Entered vfs_read_inode\n"); ++ ++ if(inode != SQUASHFS_INVALID_BLK) ++ (msblk->read_inode)(i, inode); ++} ++ ++ ++static struct dentry *squashfs_get_parent(struct dentry *child) ++{ ++ struct inode *i = child->d_inode; ++ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode); ++ struct dentry *rv; ++ ++ TRACE("Entered squashfs_get_parent\n"); ++ ++ if(parent == NULL) { ++ rv = ERR_PTR(-EACCES); ++ goto out; ++ } ++ ++ rv = d_alloc_anon(parent); ++ if(rv == NULL) ++ rv = ERR_PTR(-ENOMEM); ++ ++out: ++ return rv; ++} ++ ++ ++SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct inode *i = iget_locked(s, inode_number); ++ ++ TRACE("Entered squashfs_iget\n"); ++ ++ if(i && (i->i_state & I_NEW)) { ++ (msblk->read_inode)(i, inode); ++ unlock_new_inode(i); ++ } ++ ++ return i; ++} ++ ++ ++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode) ++{ ++ struct super_block *s = i->i_sb; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long block = SQUASHFS_INODE_BLK(inode) + ++ sblk->inode_table_start; ++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); ++ long long next_block; ++ unsigned int next_offset; ++ union squashfs_inode_header id, sid; ++ struct squashfs_base_inode_header *inodeb = &id.base, ++ *sinodeb = &sid.base; ++ ++ TRACE("Entered squashfs_read_inode\n"); ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, ++ offset, sizeof(*sinodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, ++ sizeof(*sinodeb)); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) inodeb, block, ++ offset, sizeof(*inodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ squashfs_new_inode(msblk, i, inodeb); ++ ++ switch(inodeb->inode_type) { ++ case SQUASHFS_FILE_TYPE: { ++ unsigned int frag_size; ++ long long frag_blk; ++ struct squashfs_reg_inode_header *inodep = &id.reg; ++ struct squashfs_reg_inode_header *sinodep = &sid.reg; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_nlink = 1; ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ if (sblk->block_size > 4096) ++ i->i_data.a_ops = &squashfs_aops; ++ else ++ i->i_data.a_ops = &squashfs_aops_4K; ++ ++ TRACE("File inode %x:%x, start_block %llx, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_LREG_TYPE: { ++ unsigned int frag_size; ++ long long frag_blk; ++ struct squashfs_lreg_inode_header *inodep = &id.lreg; ++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ if (sblk->block_size > 4096) ++ i->i_data.a_ops = &squashfs_aops; ++ else ++ i->i_data.a_ops = &squashfs_aops_4K; ++ ++ TRACE("File inode %x:%x, start_block %llx, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_DIR_TYPE: { ++ struct squashfs_dir_inode_header *inodep = &id.dir; ++ struct squashfs_dir_inode_header *sinodep = &sid.dir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops; ++ i->i_fop = &squashfs_dir_ops; ++ i->i_mode |= S_IFDIR; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = 0; ++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; ++ ++ TRACE("Directory inode %x:%x, start_block %x, offset " ++ "%x\n", SQUASHFS_INODE_BLK(inode), ++ offset, inodep->start_block, ++ inodep->offset); ++ break; ++ } ++ case SQUASHFS_LDIR_TYPE: { ++ struct squashfs_ldir_inode_header *inodep = &id.ldir; ++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops; ++ i->i_fop = &squashfs_dir_ops; ++ i->i_mode |= S_IFDIR; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; ++ SQUASHFS_I(i)->u.s2.directory_index_offset = ++ next_offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = ++ inodep->i_count; ++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode; ++ ++ TRACE("Long directory inode %x:%x, start_block %x, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, inodep->offset); ++ break; ++ } ++ case SQUASHFS_SYMLINK_TYPE: { ++ struct squashfs_symlink_inode_header *inodep = ++ &id.symlink; ++ struct squashfs_symlink_inode_header *sinodep = ++ &sid.symlink; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_size = inodep->symlink_size; ++ i->i_op = &page_symlink_inode_operations; ++ i->i_data.a_ops = &squashfs_symlink_aops; ++ i->i_mode |= S_IFLNK; ++ SQUASHFS_I(i)->start_block = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ ++ TRACE("Symbolic link inode %x:%x, start_block %llx, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ next_block, next_offset); ++ break; ++ } ++ case SQUASHFS_BLKDEV_TYPE: ++ case SQUASHFS_CHRDEV_TYPE: { ++ struct squashfs_dev_inode_header *inodep = &id.dev; ++ struct squashfs_dev_inode_header *sinodep = &sid.dev; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_mode |= (inodeb->inode_type == ++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : ++ S_IFBLK; ++ init_special_inode(i, i->i_mode, ++ old_decode_dev(inodep->rdev)); ++ ++ TRACE("Device inode %x:%x, rdev %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->rdev); ++ break; ++ } ++ case SQUASHFS_FIFO_TYPE: ++ case SQUASHFS_SOCKET_TYPE: { ++ struct squashfs_ipc_inode_header *inodep = &id.ipc; ++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_nlink = inodep->nlink; ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) ++ ? S_IFIFO : S_IFSOCK; ++ init_special_inode(i, i->i_mode, 0); ++ break; ++ } ++ default: ++ ERROR("Unknown inode type %d in squashfs_iget!\n", ++ inodeb->inode_type); ++ goto failed_read1; ++ } ++ ++ return 1; ++ ++failed_read: ++ ERROR("Unable to read inode [%llx:%x]\n", block, offset); ++ ++failed_read1: ++ make_bad_inode(i); ++ return 0; ++} ++ ++ ++static int read_inode_lookup_table(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes); ++ ++ TRACE("In read_inode_lookup_table, length %d\n", length); ++ ++ /* Allocate inode lookup table */ ++ if (!(msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL))) { ++ ERROR("Failed to allocate inode lookup table\n"); ++ return 0; ++ } ++ ++ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table, ++ sblk->lookup_table_start, length | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { ++ ERROR("unable to read inode lookup table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ long long block; ++ ++ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) { ++ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block), ++ &msblk->inode_lookup_table[i], 1); ++ msblk->inode_lookup_table[i] = block; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int read_fragment_index_table(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments); ++ ++ if(length == 0) ++ return 1; ++ ++ /* Allocate fragment index table */ ++ if (!(msblk->fragment_index = kmalloc(length, GFP_KERNEL))) { ++ ERROR("Failed to allocate fragment index table\n"); ++ return 0; ++ } ++ ++ if (!squashfs_read_data(s, (char *) msblk->fragment_index, ++ sblk->fragment_table_start, length | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) { ++ ERROR("unable to read fragment index table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ long long fragment; ++ ++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) { ++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment), ++ &msblk->fragment_index[i], 1); ++ msblk->fragment_index[i] = fragment; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ msblk->read_inode = squashfs_read_inode; ++ msblk->read_blocklist = read_blocklist; ++ msblk->read_fragment_index_table = read_fragment_index_table; ++ ++ if (sblk->s_major == 1) { ++ if (!squashfs_1_0_supported(msblk)) { ++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems " ++ "are unsupported\n"); ++ SERROR("Please recompile with " ++ "Squashfs 1.0 support enabled\n"); ++ return 0; ++ } ++ } else if (sblk->s_major == 2) { ++ if (!squashfs_2_0_supported(msblk)) { ++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems " ++ "are unsupported\n"); ++ SERROR("Please recompile with " ++ "Squashfs 2.0 support enabled\n"); ++ return 0; ++ } ++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor > ++ SQUASHFS_MINOR) { ++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d " ++ "filesystem\n", sblk->s_major, sblk->s_minor); ++ SERROR("Please update your kernel\n"); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int squashfs_fill_super(struct super_block *s, void *data, int silent) ++{ ++ struct squashfs_sb_info *msblk; ++ struct squashfs_super_block *sblk; ++ int i; ++ char b[BDEVNAME_SIZE]; ++ struct inode *root; ++ ++ TRACE("Entered squashfs_read_superblock\n"); ++ ++ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info), ++ GFP_KERNEL))) { ++ ERROR("Failed to allocate superblock\n"); ++ goto failure; ++ } ++ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info)); ++ msblk = s->s_fs_info; ++ if (!(msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()))) { ++ ERROR("Failed to allocate zlib workspace\n"); ++ goto failure; ++ } ++ sblk = &msblk->sblk; ++ ++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE); ++ msblk->devblksize_log2 = ffz(~msblk->devblksize); ++ ++ mutex_init(&msblk->read_data_mutex); ++ mutex_init(&msblk->read_page_mutex); ++ mutex_init(&msblk->block_cache_mutex); ++ mutex_init(&msblk->fragment_mutex); ++ mutex_init(&msblk->meta_index_mutex); ++ ++ init_waitqueue_head(&msblk->waitq); ++ init_waitqueue_head(&msblk->fragment_wait_queue); ++ ++ sblk->bytes_used = sizeof(struct squashfs_super_block); ++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START, ++ sizeof(struct squashfs_super_block) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) { ++ SERROR("unable to read superblock\n"); ++ goto failed_mount; ++ } ++ ++ /* Check it is a SQUASHFS superblock */ ++ msblk->swap = 0; ++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) { ++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) { ++ struct squashfs_super_block ssblk; ++ ++ WARNING("Mounting a different endian SQUASHFS " ++ "filesystem on %s\n", bdevname(s->s_bdev, b)); ++ ++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk); ++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block)); ++ msblk->swap = 1; ++ } else { ++ SERROR("Can't find a SQUASHFS superblock on %s\n", ++ bdevname(s->s_bdev, b)); ++ goto failed_mount; ++ } ++ } ++ ++ /* Check the MAJOR & MINOR versions */ ++ if(!supported_squashfs_filesystem(msblk, silent)) ++ goto failed_mount; ++ ++ /* Check the filesystem does not extend beyond the end of the ++ block device */ ++ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode)) ++ goto failed_mount; ++ ++ /* Check the root inode for sanity */ ++ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE) ++ goto failed_mount; ++ ++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b)); ++ TRACE("Inodes are %scompressed\n", ++ SQUASHFS_UNCOMPRESSED_INODES ++ (sblk->flags) ? "un" : ""); ++ TRACE("Data is %scompressed\n", ++ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags) ++ ? "un" : ""); ++ TRACE("Check data is %s present in the filesystem\n", ++ SQUASHFS_CHECK_DATA(sblk->flags) ? ++ "" : "not"); ++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used); ++ TRACE("Block size %d\n", sblk->block_size); ++ TRACE("Number of inodes %d\n", sblk->inodes); ++ if (sblk->s_major > 1) ++ TRACE("Number of fragments %d\n", sblk->fragments); ++ TRACE("Number of uids %d\n", sblk->no_uids); ++ TRACE("Number of gids %d\n", sblk->no_guids); ++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start); ++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start); ++ if (sblk->s_major > 1) ++ TRACE("sblk->fragment_table_start %llx\n", ++ sblk->fragment_table_start); ++ TRACE("sblk->uid_start %llx\n", sblk->uid_start); ++ ++ s->s_flags |= MS_RDONLY; ++ s->s_op = &squashfs_super_ops; ++ ++ /* Init inode_table block pointer array */ ++ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) * ++ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) { ++ ERROR("Failed to allocate block cache\n"); ++ goto failed_mount; ++ } ++ ++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) ++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK; ++ ++ msblk->next_cache = 0; ++ ++ /* Allocate read_page block */ ++ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) { ++ ERROR("Failed to allocate read_page block\n"); ++ goto failed_mount; ++ } ++ ++ /* Allocate uid and gid tables */ ++ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int), GFP_KERNEL))) { ++ ERROR("Failed to allocate uid/gid table\n"); ++ goto failed_mount; ++ } ++ msblk->guid = msblk->uid + sblk->no_uids; ++ ++ if (msblk->swap) { ++ unsigned int suid[sblk->no_uids + sblk->no_guids]; ++ ++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start, ++ ((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int)) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { ++ ERROR("unable to read uid/gid table\n"); ++ goto failed_mount; ++ } ++ ++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids + ++ sblk->no_guids), (sizeof(unsigned int) * 8)); ++ } else ++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start, ++ ((sblk->no_uids + sblk->no_guids) * ++ sizeof(unsigned int)) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) { ++ ERROR("unable to read uid/gid table\n"); ++ goto failed_mount; ++ } ++ ++ ++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk)) ++ goto allocate_root; ++ ++ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) * ++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) { ++ ERROR("Failed to allocate fragment block cache\n"); ++ goto failed_mount; ++ } ++ ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) { ++ msblk->fragment[i].locked = 0; ++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK; ++ msblk->fragment[i].data = NULL; ++ } ++ ++ msblk->next_fragment = 0; ++ ++ /* Allocate and read fragment index table */ ++ if (msblk->read_fragment_index_table(s) == 0) ++ goto failed_mount; ++ ++ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK) ++ goto allocate_root; ++ ++ /* Allocate and read inode lookup table */ ++ if (read_inode_lookup_table(s) == 0) ++ goto failed_mount; ++ ++ s->s_op = &squashfs_export_super_ops; ++ s->s_export_op = &squashfs_export_ops; ++ ++allocate_root: ++ root = new_inode(s); ++ if ((msblk->read_inode)(root, sblk->root_inode) == 0) ++ goto failed_mount; ++ insert_inode_hash(root); ++ ++ if ((s->s_root = d_alloc_root(root)) == NULL) { ++ ERROR("Root inode create failed\n"); ++ iput(root); ++ goto failed_mount; ++ } ++ ++ TRACE("Leaving squashfs_read_super\n"); ++ return 0; ++ ++failed_mount: ++ kfree(msblk->inode_lookup_table); ++ kfree(msblk->fragment_index); ++ kfree(msblk->fragment); ++ kfree(msblk->uid); ++ kfree(msblk->read_page); ++ kfree(msblk->block_cache); ++ kfree(msblk->fragment_index_2); ++ vfree(msblk->stream.workspace); ++ kfree(s->s_fs_info); ++ s->s_fs_info = NULL; ++ return -EINVAL; ++ ++failure: ++ return -ENOMEM; ++} ++ ++ ++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf) ++{ ++ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ TRACE("Entered squashfs_statfs\n"); ++ ++ buf->f_type = SQUASHFS_MAGIC; ++ buf->f_bsize = sblk->block_size; ++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1; ++ buf->f_bfree = buf->f_bavail = 0; ++ buf->f_files = sblk->inodes; ++ buf->f_ffree = 0; ++ buf->f_namelen = SQUASHFS_NAME_LEN; ++ ++ return 0; ++} ++ ++ ++static int squashfs_symlink_readpage(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes; ++ long long block = SQUASHFS_I(inode)->start_block; ++ int offset = SQUASHFS_I(inode)->offset; ++ void *pageaddr = kmap(page); ++ ++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block " ++ "%llx, offset %x\n", page->index, ++ SQUASHFS_I(inode)->start_block, ++ SQUASHFS_I(inode)->offset); ++ ++ for (length = 0; length < index; length += bytes) { ++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL, ++ block, offset, PAGE_CACHE_SIZE, &block, ++ &offset))) { ++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, ++ offset); ++ goto skip_read; ++ } ++ } ++ ++ if (length != index) { ++ ERROR("(squashfs_symlink_readpage) length != index\n"); ++ bytes = 0; ++ goto skip_read; ++ } ++ ++ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE : ++ i_size_read(inode) - length; ++ ++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, ++ offset, bytes, &block, &offset))) ++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset); ++ ++skip_read: ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap(page); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ return 0; ++} ++ ++ ++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset) ++{ ++ struct meta_index *meta = NULL; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ int i; ++ ++ mutex_lock(&msblk->meta_index_mutex); ++ ++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset); ++ ++ if(msblk->meta_index == NULL) ++ goto not_allocated; ++ ++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) ++ if (msblk->meta_index[i].inode_number == inode->i_ino && ++ msblk->meta_index[i].offset >= offset && ++ msblk->meta_index[i].offset <= index && ++ msblk->meta_index[i].locked == 0) { ++ TRACE("locate_meta_index: entry %d, offset %d\n", i, ++ msblk->meta_index[i].offset); ++ meta = &msblk->meta_index[i]; ++ offset = meta->offset; ++ } ++ ++ if (meta) ++ meta->locked = 1; ++ ++not_allocated: ++ mutex_unlock(&msblk->meta_index_mutex); ++ ++ return meta; ++} ++ ++ ++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip) ++{ ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct meta_index *meta = NULL; ++ int i; ++ ++ mutex_lock(&msblk->meta_index_mutex); ++ ++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip); ++ ++ if(msblk->meta_index == NULL) { ++ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) * ++ SQUASHFS_META_NUMBER, GFP_KERNEL))) { ++ ERROR("Failed to allocate meta_index\n"); ++ goto failed; ++ } ++ for(i = 0; i < SQUASHFS_META_NUMBER; i++) { ++ msblk->meta_index[i].inode_number = 0; ++ msblk->meta_index[i].locked = 0; ++ } ++ msblk->next_meta_index = 0; ++ } ++ ++ for(i = SQUASHFS_META_NUMBER; i && ++ msblk->meta_index[msblk->next_meta_index].locked; i --) ++ msblk->next_meta_index = (msblk->next_meta_index + 1) % ++ SQUASHFS_META_NUMBER; ++ ++ if(i == 0) { ++ TRACE("empty_meta_index: failed!\n"); ++ goto failed; ++ } ++ ++ TRACE("empty_meta_index: returned meta entry %d, %p\n", ++ msblk->next_meta_index, ++ &msblk->meta_index[msblk->next_meta_index]); ++ ++ meta = &msblk->meta_index[msblk->next_meta_index]; ++ msblk->next_meta_index = (msblk->next_meta_index + 1) % ++ SQUASHFS_META_NUMBER; ++ ++ meta->inode_number = inode->i_ino; ++ meta->offset = offset; ++ meta->skip = skip; ++ meta->entries = 0; ++ meta->locked = 1; ++ ++failed: ++ mutex_unlock(&msblk->meta_index_mutex); ++ return meta; ++} ++ ++ ++void release_meta_index(struct inode *inode, struct meta_index *meta) ++{ ++ meta->locked = 0; ++ smp_mb(); ++} ++ ++ ++static int read_block_index(struct super_block *s, int blocks, char *block_list, ++ long long *start_block, int *offset) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ unsigned int *block_listp; ++ int block = 0; ++ ++ if (msblk->swap) { ++ char sblock_list[blocks << 2]; ++ ++ if (!squashfs_get_cached_block(s, sblock_list, *start_block, ++ *offset, blocks << 2, start_block, offset)) { ++ ERROR("Unable to read block list [%llx:%x]\n", ++ *start_block, *offset); ++ goto failure; ++ } ++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list), ++ ((unsigned int *)sblock_list), blocks); ++ } else ++ if (!squashfs_get_cached_block(s, block_list, *start_block, ++ *offset, blocks << 2, start_block, offset)) { ++ ERROR("Unable to read block list [%llx:%x]\n", ++ *start_block, *offset); ++ goto failure; ++ } ++ ++ for (block_listp = (unsigned int *) block_list; blocks; ++ block_listp++, blocks --) ++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp); ++ ++ return block; ++ ++failure: ++ return -1; ++} ++ ++ ++#define SIZE 256 ++ ++static inline int calculate_skip(int blocks) { ++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES); ++ return skip >= 7 ? 7 : skip + 1; ++} ++ ++ ++static int get_meta_index(struct inode *inode, int index, ++ long long *index_block, int *index_offset, ++ long long *data_block, char *block_list) ++{ ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log); ++ int offset = 0; ++ struct meta_index *meta; ++ struct meta_entry *meta_entry; ++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start; ++ int cur_offset = SQUASHFS_I(inode)->offset; ++ long long cur_data_block = SQUASHFS_I(inode)->start_block; ++ int i; ++ ++ index /= SQUASHFS_META_INDEXES * skip; ++ ++ while ( offset < index ) { ++ meta = locate_meta_index(inode, index, offset + 1); ++ ++ if (meta == NULL) { ++ if ((meta = empty_meta_index(inode, offset + 1, ++ skip)) == NULL) ++ goto all_done; ++ } else { ++ if(meta->entries == 0) ++ goto failed; ++ offset = index < meta->offset + meta->entries ? index : ++ meta->offset + meta->entries - 1; ++ meta_entry = &meta->meta_entry[offset - meta->offset]; ++ cur_index_block = meta_entry->index_block + sblk->inode_table_start; ++ cur_offset = meta_entry->offset; ++ cur_data_block = meta_entry->data_block; ++ TRACE("get_meta_index: offset %d, meta->offset %d, " ++ "meta->entries %d\n", offset, meta->offset, ++ meta->entries); ++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x" ++ " data_block 0x%llx\n", cur_index_block, ++ cur_offset, cur_data_block); ++ } ++ ++ for (i = meta->offset + meta->entries; i <= index && ++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) { ++ int blocks = skip * SQUASHFS_META_INDEXES; ++ ++ while (blocks) { ++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : ++ blocks; ++ int res = read_block_index(inode->i_sb, block, ++ block_list, &cur_index_block, ++ &cur_offset); ++ ++ if (res == -1) ++ goto failed; ++ ++ cur_data_block += res; ++ blocks -= block; ++ } ++ ++ meta_entry = &meta->meta_entry[i - meta->offset]; ++ meta_entry->index_block = cur_index_block - sblk->inode_table_start; ++ meta_entry->offset = cur_offset; ++ meta_entry->data_block = cur_data_block; ++ meta->entries ++; ++ offset ++; ++ } ++ ++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n", ++ meta->offset, meta->entries); ++ ++ release_meta_index(inode, meta); ++ } ++ ++all_done: ++ *index_block = cur_index_block; ++ *index_offset = cur_offset; ++ *data_block = cur_data_block; ++ ++ return offset * SQUASHFS_META_INDEXES * skip; ++ ++failed: ++ release_meta_index(inode, meta); ++ return -1; ++} ++ ++ ++static long long read_blocklist(struct inode *inode, int index, ++ int readahead_blks, char *block_list, ++ unsigned short **block_p, unsigned int *bsize) ++{ ++ long long block_ptr; ++ int offset; ++ long long block; ++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block, ++ block_list); ++ ++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset" ++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, ++ block); ++ ++ if(res == -1) ++ goto failure; ++ ++ index -= res; ++ ++ while ( index ) { ++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index; ++ int res = read_block_index(inode->i_sb, blocks, block_list, ++ &block_ptr, &offset); ++ if (res == -1) ++ goto failure; ++ block += res; ++ index -= blocks; ++ } ++ ++ if (read_block_index(inode->i_sb, 1, block_list, ++ &block_ptr, &offset) == -1) ++ goto failure; ++ *bsize = *((unsigned int *) block_list); ++ ++ return block; ++ ++failure: ++ return 0; ++} ++ ++ ++static int squashfs_readpage(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned char *block_list; ++ long long block; ++ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0; ++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT); ++ void *pageaddr; ++ struct squashfs_fragment_cache *fragment = NULL; ++ char *data_ptr = msblk->read_page; ++ ++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1; ++ int start_index = page->index & ~mask; ++ int end_index = start_index | mask; ++ ++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", ++ page->index, ++ SQUASHFS_I(inode)->start_block); ++ ++ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { ++ ERROR("Failed to allocate block_list\n"); ++ goto skip_read; ++ } ++ ++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> ++ PAGE_CACHE_SHIFT)) ++ goto skip_read; ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || index < (i_size_read(inode) >> ++ sblk->block_log)) { ++ if ((block = (msblk->read_blocklist)(inode, index, 1, ++ block_list, NULL, &bsize)) == 0) ++ goto skip_read; ++ ++ mutex_lock(&msblk->read_page_mutex); ++ ++ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page, ++ block, bsize, NULL, sblk->block_size))) { ++ ERROR("Unable to read page, block %llx, size %x\n", block, ++ bsize); ++ mutex_unlock(&msblk->read_page_mutex); ++ goto skip_read; ++ } ++ } else { ++ if ((fragment = get_cached_fragment(inode->i_sb, ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, ++ SQUASHFS_I(inode)->u.s1.fragment_size)) ++ == NULL) { ++ ERROR("Unable to read page, block %llx, size %x\n", ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, ++ (int) SQUASHFS_I(inode)-> ++ u.s1.fragment_size); ++ goto skip_read; ++ } ++ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset + ++ (i_size_read(inode) & (sblk->block_size ++ - 1)); ++ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset; ++ data_ptr = fragment->data; ++ } ++ ++ for (i = start_index; i <= end_index && byte_offset < bytes; ++ i++, byte_offset += PAGE_CACHE_SIZE) { ++ struct page *push_page; ++ int avail = (bytes - byte_offset) > PAGE_CACHE_SIZE ? ++ PAGE_CACHE_SIZE : bytes - byte_offset; ++ ++ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n", ++ bytes, i, byte_offset, avail); ++ ++ push_page = (i == page->index) ? page : ++ grab_cache_page_nowait(page->mapping, i); ++ ++ if (!push_page) ++ continue; ++ ++ if (PageUptodate(push_page)) ++ goto skip_page; ++ ++ pageaddr = kmap_atomic(push_page, KM_USER0); ++ memcpy(pageaddr, data_ptr + byte_offset, avail); ++ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(push_page); ++ SetPageUptodate(push_page); ++skip_page: ++ unlock_page(push_page); ++ if(i != page->index) ++ page_cache_release(push_page); ++ } ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || index < (i_size_read(inode) >> ++ sblk->block_log)) ++ mutex_unlock(&msblk->read_page_mutex); ++ else ++ release_cached_fragment(msblk, fragment); ++ ++ kfree(block_list); ++ return 0; ++ ++skip_read: ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ kfree(block_list); ++ return 0; ++} ++ ++ ++static int squashfs_readpage4K(struct file *file, struct page *page) ++{ ++ struct inode *inode = page->mapping->host; ++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned char *block_list; ++ long long block; ++ unsigned int bsize, bytes = 0; ++ void *pageaddr; ++ ++ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n", ++ page->index, ++ SQUASHFS_I(inode)->start_block); ++ ++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> ++ PAGE_CACHE_SHIFT)) { ++ block_list = NULL; ++ goto skip_read; ++ } ++ ++ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) { ++ ERROR("Failed to allocate block_list\n"); ++ goto skip_read; ++ } ++ ++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK ++ || page->index < (i_size_read(inode) >> ++ sblk->block_log)) { ++ block = (msblk->read_blocklist)(inode, page->index, 1, ++ block_list, NULL, &bsize); ++ if(block == 0) ++ goto skip_read; ++ ++ mutex_lock(&msblk->read_page_mutex); ++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block, ++ bsize, NULL, sblk->block_size); ++ if (bytes) { ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memcpy(pageaddr, msblk->read_page, bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ } else ++ ERROR("Unable to read page, block %llx, size %x\n", ++ block, bsize); ++ mutex_unlock(&msblk->read_page_mutex); ++ } else { ++ struct squashfs_fragment_cache *fragment = ++ get_cached_fragment(inode->i_sb, ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, ++ SQUASHFS_I(inode)-> u.s1.fragment_size); ++ if (fragment) { ++ bytes = i_size_read(inode) & (sblk->block_size - 1); ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)-> ++ u.s1.fragment_offset, bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ release_cached_fragment(msblk, fragment); ++ } else ++ ERROR("Unable to read page, block %llx, size %x\n", ++ SQUASHFS_I(inode)-> ++ u.s1.fragment_start_block, (int) ++ SQUASHFS_I(inode)-> u.s1.fragment_size); ++ } ++ ++skip_read: ++ pageaddr = kmap_atomic(page, KM_USER0); ++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes); ++ kunmap_atomic(pageaddr, KM_USER0); ++ flush_dcache_page(page); ++ SetPageUptodate(page); ++ unlock_page(page); ++ ++ kfree(block_list); ++ return 0; ++} ++ ++ ++static int get_dir_index_using_offset(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ long long f_pos) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index index; ++ ++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", ++ i_count, (unsigned int) f_pos); ++ ++ f_pos =- 3; ++ if (f_pos == 0) ++ goto finish; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) &index, ++ index_start, index_offset, ++ sizeof(index), &index_start, ++ &index_offset); ++ ++ if (index.index > f_pos) ++ break; ++ ++ squashfs_get_cached_block(s, NULL, index_start, index_offset, ++ index.size + 1, &index_start, ++ &index_offset); ++ ++ length = index.index; ++ *next_block = index.start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ ++finish: ++ return length + 3; ++} ++ ++ ++static int get_dir_index_using_name(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ const char *name, int size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index *index; ++ char *str; ++ ++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); ++ ++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + ++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_index\n"); ++ goto failure; ++ } ++ ++ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1); ++ strncpy(str, name, size); ++ str[size] = '\0'; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) index, ++ index_start, index_offset, ++ sizeof(struct squashfs_dir_index), ++ &index_start, &index_offset); ++ ++ squashfs_get_cached_block(s, index->name, index_start, ++ index_offset, index->size + 1, ++ &index_start, &index_offset); ++ ++ index->name[index->size + 1] = '\0'; ++ ++ if (strcmp(index->name, str) > 0) ++ break; ++ ++ length = index->index; ++ *next_block = index->start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ kfree(str); ++failure: ++ return length + 3; ++} ++ ++ ++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir) ++{ ++ struct inode *i = file->f_dentry->d_inode; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header dirh; ++ struct squashfs_dir_entry *dire; ++ ++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto finish; ++ } ++ ++ while(file->f_pos < 3) { ++ char *name; ++ int size, i_ino; ++ ++ if(file->f_pos == 0) { ++ name = "."; ++ size = 1; ++ i_ino = i->i_ino; ++ } else { ++ name = ".."; ++ size = 2; ++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode; ++ } ++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n", ++ (unsigned int) dirent, name, size, (int) ++ file->f_pos, i_ino, ++ squashfs_filetype_table[1]); ++ ++ if (filldir(dirent, name, size, ++ file->f_pos, i_ino, ++ squashfs_filetype_table[1]) < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos += size; ++ } ++ ++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, ++ file->f_pos); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header sdirh; ++ ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block, next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block, next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, ++ dire->size + 1, &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (file->f_pos >= length) ++ continue; ++ ++ dire->name[dire->size + 1] = '\0'; ++ ++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n", ++ (unsigned int) dirent, dire->name, ++ dire->size + 1, (int) file->f_pos, ++ dirh.start_block, dire->offset, ++ dirh.inode_number + dire->inode_number, ++ squashfs_filetype_table[dire->type]); ++ ++ if (filldir(dirent, dire->name, dire->size + 1, ++ file->f_pos, ++ dirh.inode_number + dire->inode_number, ++ squashfs_filetype_table[dire->type]) ++ < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos = length; ++ } ++ } ++ ++finish: ++ kfree(dire); ++ return 0; ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ kfree(dire); ++ return 0; ++} ++ ++ ++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ const unsigned char *name = dentry->d_name.name; ++ int len = dentry->d_name.len; ++ struct inode *inode = NULL; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header dirh; ++ struct squashfs_dir_entry *dire; ++ ++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto exit_lookup; ++ } ++ ++ if (len > SQUASHFS_NAME_LEN) ++ goto exit_lookup; ++ ++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, name, ++ len); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header sdirh; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block,next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block,next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, dire->size + 1, ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (name[0] < dire->name[0]) ++ goto exit_lookup; ++ ++ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) { ++ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block, ++ dire->offset); ++ ++ TRACE("calling squashfs_iget for directory " ++ "entry %s, inode %x:%x, %d\n", name, ++ dirh.start_block, dire->offset, ++ dirh.inode_number + dire->inode_number); ++ ++ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number); ++ ++ goto exit_lookup; ++ } ++ } ++ } ++ ++exit_lookup: ++ kfree(dire); ++ if (inode) ++ return d_splice_alias(inode, dentry); ++ d_add(dentry, inode); ++ return ERR_PTR(0); ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ goto exit_lookup; ++} ++ ++ ++static int squashfs_remount(struct super_block *s, int *flags, char *data) ++{ ++ *flags |= MS_RDONLY; ++ return 0; ++} ++ ++ ++static void squashfs_put_super(struct super_block *s) ++{ ++ int i; ++ ++ if (s->s_fs_info) { ++ struct squashfs_sb_info *sbi = s->s_fs_info; ++ if (sbi->block_cache) ++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++) ++ if (sbi->block_cache[i].block != ++ SQUASHFS_INVALID_BLK) ++ kfree(sbi->block_cache[i].data); ++ if (sbi->fragment) ++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) ++ SQUASHFS_FREE(sbi->fragment[i].data); ++ kfree(sbi->fragment); ++ kfree(sbi->block_cache); ++ kfree(sbi->read_page); ++ kfree(sbi->uid); ++ kfree(sbi->fragment_index); ++ kfree(sbi->fragment_index_2); ++ kfree(sbi->meta_index); ++ vfree(sbi->stream.workspace); ++ kfree(s->s_fs_info); ++ s->s_fs_info = NULL; ++ } ++} ++ ++ ++static int squashfs_get_sb(struct file_system_type *fs_type, int flags, ++ const char *dev_name, void *data, ++ struct vfsmount *mnt) ++{ ++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, ++ mnt); ++} ++ ++ ++static int __init init_squashfs_fs(void) ++{ ++ int err = init_inodecache(); ++ if (err) ++ goto out; ++ ++ printk(KERN_INFO "squashfs: version 3.2-r2 (2007/01/15) " ++ "Phillip Lougher\n"); ++ ++ if ((err = register_filesystem(&squashfs_fs_type))) ++ destroy_inodecache(); ++ ++out: ++ return err; ++} ++ ++ ++static void __exit exit_squashfs_fs(void) ++{ ++ unregister_filesystem(&squashfs_fs_type); ++ destroy_inodecache(); ++} ++ ++ ++static struct kmem_cache * squashfs_inode_cachep; ++ ++ ++static struct inode *squashfs_alloc_inode(struct super_block *sb) ++{ ++ struct squashfs_inode_info *ei; ++ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL); ++ if (!ei) ++ return NULL; ++ return &ei->vfs_inode; ++} ++ ++ ++static void squashfs_destroy_inode(struct inode *inode) ++{ ++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode)); ++} ++ ++ ++static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) ++{ ++ struct squashfs_inode_info *ei = foo; ++ ++ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == ++ SLAB_CTOR_CONSTRUCTOR) ++ inode_init_once(&ei->vfs_inode); ++} ++ ++ ++static int __init init_inodecache(void) ++{ ++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache", ++ sizeof(struct squashfs_inode_info), ++ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, ++ init_once, NULL); ++ if (squashfs_inode_cachep == NULL) ++ return -ENOMEM; ++ return 0; ++} ++ ++ ++static void destroy_inodecache(void) ++{ ++ kmem_cache_destroy(squashfs_inode_cachep); ++} ++ ++ ++module_init(init_squashfs_fs); ++module_exit(exit_squashfs_fs); ++MODULE_DESCRIPTION("squashfs 3.2-r2, a compressed read-only filesystem"); ++MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>"); ++MODULE_LICENSE("GPL"); +--- /dev/null ++++ linux-2.6.24-rc1/fs/squashfs/Makefile +@@ -0,0 +1,7 @@ ++# ++# Makefile for the linux squashfs routines. ++# ++ ++obj-$(CONFIG_SQUASHFS) += squashfs.o ++squashfs-y += inode.o ++squashfs-y += squashfs2_0.o +--- /dev/null ++++ linux-2.6.24-rc1/fs/squashfs/squashfs2_0.c +@@ -0,0 +1,742 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher <phillip@lougher.org.uk> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs2_0.c ++ */ ++ ++#include <linux/squashfs_fs.h> ++#include <linux/module.h> ++#include <linux/zlib.h> ++#include <linux/fs.h> ++#include <linux/squashfs_fs_sb.h> ++#include <linux/squashfs_fs_i.h> ++ ++#include "squashfs.h" ++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir); ++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *, ++ struct nameidata *); ++ ++static struct file_operations squashfs_dir_ops_2 = { ++ .read = generic_read_dir, ++ .readdir = squashfs_readdir_2 ++}; ++ ++static struct inode_operations squashfs_dir_inode_ops_2 = { ++ .lookup = squashfs_lookup_2 ++}; ++ ++static unsigned char squashfs_filetype_table[] = { ++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK ++}; ++ ++static int read_fragment_index_table_2(struct super_block *s) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2 ++ (sblk->fragments), GFP_KERNEL))) { ++ ERROR("Failed to allocate uid/gid table\n"); ++ return 0; ++ } ++ ++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) && ++ !squashfs_read_data(s, (char *) ++ msblk->fragment_index_2, ++ sblk->fragment_table_start, ++ SQUASHFS_FRAGMENT_INDEX_BYTES_2 ++ (sblk->fragments) | ++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) { ++ ERROR("unable to read fragment index table\n"); ++ return 0; ++ } ++ ++ if (msblk->swap) { ++ int i; ++ unsigned int fragment; ++ ++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments); ++ i++) { ++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment), ++ &msblk->fragment_index_2[i], 1); ++ msblk->fragment_index_2[i] = fragment; ++ } ++ } ++ ++ return 1; ++} ++ ++ ++static int get_fragment_location_2(struct super_block *s, unsigned int fragment, ++ long long *fragment_start_block, ++ unsigned int *fragment_size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ long long start_block = ++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)]; ++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment); ++ struct squashfs_fragment_entry_2 fragment_entry; ++ ++ if (msblk->swap) { ++ struct squashfs_fragment_entry_2 sfragment_entry; ++ ++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry, ++ start_block, offset, ++ sizeof(sfragment_entry), &start_block, ++ &offset)) ++ goto out; ++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry, ++ start_block, offset, ++ sizeof(fragment_entry), &start_block, ++ &offset)) ++ goto out; ++ ++ *fragment_start_block = fragment_entry.start_block; ++ *fragment_size = fragment_entry.size; ++ ++ return 1; ++ ++out: ++ return 0; ++} ++ ++ ++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i, ++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ i->i_ino = ino; ++ i->i_mtime.tv_sec = sblk->mkfs_time; ++ i->i_atime.tv_sec = sblk->mkfs_time; ++ i->i_ctime.tv_sec = sblk->mkfs_time; ++ i->i_uid = msblk->uid[inodeb->uid]; ++ i->i_mode = inodeb->mode; ++ i->i_nlink = 1; ++ i->i_size = 0; ++ if (inodeb->guid == SQUASHFS_GUIDS) ++ i->i_gid = i->i_uid; ++ else ++ i->i_gid = msblk->guid[inodeb->guid]; ++} ++ ++ ++static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode) ++{ ++ struct super_block *s = i->i_sb; ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ unsigned int block = SQUASHFS_INODE_BLK(inode) + ++ sblk->inode_table_start; ++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode); ++ unsigned int ino = i->i_ino; ++ long long next_block; ++ unsigned int next_offset; ++ union squashfs_inode_header_2 id, sid; ++ struct squashfs_base_inode_header_2 *inodeb = &id.base, ++ *sinodeb = &sid.base; ++ ++ TRACE("Entered squashfs_iget\n"); ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block, ++ offset, sizeof(*sinodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb, ++ sizeof(*sinodeb)); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) inodeb, block, ++ offset, sizeof(*inodeb), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ squashfs_new_inode(msblk, i, inodeb, ino); ++ ++ switch(inodeb->inode_type) { ++ case SQUASHFS_FILE_TYPE: { ++ struct squashfs_reg_inode_header_2 *inodep = &id.reg; ++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg; ++ long long frag_blk; ++ unsigned int frag_size = 0; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ frag_blk = SQUASHFS_INVALID_BLK; ++ if (inodep->fragment != SQUASHFS_INVALID_FRAG && ++ !get_fragment_location_2(s, ++ inodep->fragment, &frag_blk, &frag_size)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_fop = &generic_ro_fops; ++ i->i_mode |= S_IFREG; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ i->i_blocks = ((i->i_size - 1) >> 9) + 1; ++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk; ++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size; ++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->u.s1.block_list_start = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ if (sblk->block_size > 4096) ++ i->i_data.a_ops = &squashfs_aops; ++ else ++ i->i_data.a_ops = &squashfs_aops_4K; ++ ++ TRACE("File inode %x:%x, start_block %x, " ++ "block_list_start %llx, offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, next_block, ++ next_offset); ++ break; ++ } ++ case SQUASHFS_DIR_TYPE: { ++ struct squashfs_dir_inode_header_2 *inodep = &id.dir; ++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops_2; ++ i->i_fop = &squashfs_dir_ops_2; ++ i->i_mode |= S_IFDIR; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = 0; ++ SQUASHFS_I(i)->u.s2.parent_inode = 0; ++ ++ TRACE("Directory inode %x:%x, start_block %x, offset " ++ "%x\n", SQUASHFS_INODE_BLK(inode), ++ offset, inodep->start_block, ++ inodep->offset); ++ break; ++ } ++ case SQUASHFS_LDIR_TYPE: { ++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir; ++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->file_size; ++ i->i_op = &squashfs_dir_inode_ops_2; ++ i->i_fop = &squashfs_dir_ops_2; ++ i->i_mode |= S_IFDIR; ++ i->i_mtime.tv_sec = inodep->mtime; ++ i->i_atime.tv_sec = inodep->mtime; ++ i->i_ctime.tv_sec = inodep->mtime; ++ SQUASHFS_I(i)->start_block = inodep->start_block; ++ SQUASHFS_I(i)->offset = inodep->offset; ++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block; ++ SQUASHFS_I(i)->u.s2.directory_index_offset = ++ next_offset; ++ SQUASHFS_I(i)->u.s2.directory_index_count = ++ inodep->i_count; ++ SQUASHFS_I(i)->u.s2.parent_inode = 0; ++ ++ TRACE("Long directory inode %x:%x, start_block %x, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->start_block, inodep->offset); ++ break; ++ } ++ case SQUASHFS_SYMLINK_TYPE: { ++ struct squashfs_symlink_inode_header_2 *inodep = ++ &id.symlink; ++ struct squashfs_symlink_inode_header_2 *sinodep = ++ &sid.symlink; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep, ++ sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_size = inodep->symlink_size; ++ i->i_op = &page_symlink_inode_operations; ++ i->i_data.a_ops = &squashfs_symlink_aops; ++ i->i_mode |= S_IFLNK; ++ SQUASHFS_I(i)->start_block = next_block; ++ SQUASHFS_I(i)->offset = next_offset; ++ ++ TRACE("Symbolic link inode %x:%x, start_block %llx, " ++ "offset %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ next_block, next_offset); ++ break; ++ } ++ case SQUASHFS_BLKDEV_TYPE: ++ case SQUASHFS_CHRDEV_TYPE: { ++ struct squashfs_dev_inode_header_2 *inodep = &id.dev; ++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev; ++ ++ if (msblk->swap) { ++ if (!squashfs_get_cached_block(s, (char *) ++ sinodep, block, offset, ++ sizeof(*sinodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep); ++ } else ++ if (!squashfs_get_cached_block(s, (char *) ++ inodep, block, offset, ++ sizeof(*inodep), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ i->i_mode |= (inodeb->inode_type == ++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR : ++ S_IFBLK; ++ init_special_inode(i, i->i_mode, ++ old_decode_dev(inodep->rdev)); ++ ++ TRACE("Device inode %x:%x, rdev %x\n", ++ SQUASHFS_INODE_BLK(inode), offset, ++ inodep->rdev); ++ break; ++ } ++ case SQUASHFS_FIFO_TYPE: ++ case SQUASHFS_SOCKET_TYPE: { ++ ++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE) ++ ? S_IFIFO : S_IFSOCK; ++ init_special_inode(i, i->i_mode, 0); ++ break; ++ } ++ default: ++ ERROR("Unknown inode type %d in squashfs_iget!\n", ++ inodeb->inode_type); ++ goto failed_read1; ++ } ++ ++ return 1; ++ ++failed_read: ++ ERROR("Unable to read inode [%x:%x]\n", block, offset); ++ ++failed_read1: ++ return 0; ++} ++ ++ ++static int get_dir_index_using_offset(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ long long f_pos) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index_2 index; ++ ++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n", ++ i_count, (unsigned int) f_pos); ++ ++ if (f_pos == 0) ++ goto finish; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index_2 sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) &index, ++ index_start, index_offset, ++ sizeof(index), &index_start, ++ &index_offset); ++ ++ if (index.index > f_pos) ++ break; ++ ++ squashfs_get_cached_block(s, NULL, index_start, index_offset, ++ index.size + 1, &index_start, ++ &index_offset); ++ ++ length = index.index; ++ *next_block = index.start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ ++finish: ++ return length; ++} ++ ++ ++static int get_dir_index_using_name(struct super_block *s, long long ++ *next_block, unsigned int *next_offset, ++ long long index_start, ++ unsigned int index_offset, int i_count, ++ const char *name, int size) ++{ ++ struct squashfs_sb_info *msblk = s->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ int i, length = 0; ++ struct squashfs_dir_index_2 *index; ++ char *str; ++ ++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count); ++ ++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) + ++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_index\n"); ++ goto failure; ++ } ++ ++ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1); ++ strncpy(str, name, size); ++ str[size] = '\0'; ++ ++ for (i = 0; i < i_count; i++) { ++ if (msblk->swap) { ++ struct squashfs_dir_index_2 sindex; ++ squashfs_get_cached_block(s, (char *) &sindex, ++ index_start, index_offset, ++ sizeof(sindex), &index_start, ++ &index_offset); ++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex); ++ } else ++ squashfs_get_cached_block(s, (char *) index, ++ index_start, index_offset, ++ sizeof(struct squashfs_dir_index_2), ++ &index_start, &index_offset); ++ ++ squashfs_get_cached_block(s, index->name, index_start, ++ index_offset, index->size + 1, ++ &index_start, &index_offset); ++ ++ index->name[index->size + 1] = '\0'; ++ ++ if (strcmp(index->name, str) > 0) ++ break; ++ ++ length = index->index; ++ *next_block = index->start_block + sblk->directory_table_start; ++ } ++ ++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE; ++ kfree(str); ++failure: ++ return length; ++} ++ ++ ++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir) ++{ ++ struct inode *i = file->f_dentry->d_inode; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header_2 dirh; ++ struct squashfs_dir_entry_2 *dire; ++ ++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto finish; ++ } ++ ++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, ++ file->f_pos); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header_2 sdirh; ++ ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry_2 sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block, next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block, next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, ++ dire->size + 1, &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (file->f_pos >= length) ++ continue; ++ ++ dire->name[dire->size + 1] = '\0'; ++ ++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n", ++ (unsigned int) dirent, dire->name, ++ dire->size + 1, (int) file->f_pos, ++ dirh.start_block, dire->offset, ++ squashfs_filetype_table[dire->type]); ++ ++ if (filldir(dirent, dire->name, dire->size + 1, ++ file->f_pos, SQUASHFS_MK_VFS_INODE( ++ dirh.start_block, dire->offset), ++ squashfs_filetype_table[dire->type]) ++ < 0) { ++ TRACE("Filldir returned less than 0\n"); ++ goto finish; ++ } ++ file->f_pos = length; ++ } ++ } ++ ++finish: ++ kfree(dire); ++ return 0; ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ kfree(dire); ++ return 0; ++} ++ ++ ++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ const unsigned char *name = dentry->d_name.name; ++ int len = dentry->d_name.len; ++ struct inode *inode = NULL; ++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info; ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ long long next_block = SQUASHFS_I(i)->start_block + ++ sblk->directory_table_start; ++ int next_offset = SQUASHFS_I(i)->offset, length = 0, ++ dir_count; ++ struct squashfs_dir_header_2 dirh; ++ struct squashfs_dir_entry_2 *dire; ++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1; ++ ++ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset); ++ ++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) + ++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) { ++ ERROR("Failed to allocate squashfs_dir_entry\n"); ++ goto exit_loop; ++ } ++ ++ if (len > SQUASHFS_NAME_LEN) ++ goto exit_loop; ++ ++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_start, ++ SQUASHFS_I(i)->u.s2.directory_index_offset, ++ SQUASHFS_I(i)->u.s2.directory_index_count, name, ++ len); ++ ++ while (length < i_size_read(i)) { ++ /* read directory header */ ++ if (msblk->swap) { ++ struct squashfs_dir_header_2 sdirh; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh, ++ next_block, next_offset, sizeof(sdirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdirh); ++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh, ++ next_block, next_offset, sizeof(dirh), ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(dirh); ++ } ++ ++ dir_count = dirh.count + 1; ++ while (dir_count--) { ++ if (msblk->swap) { ++ struct squashfs_dir_entry_2 sdire; ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ &sdire, next_block,next_offset, ++ sizeof(sdire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(sdire); ++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire); ++ } else { ++ if (!squashfs_get_cached_block(i->i_sb, (char *) ++ dire, next_block,next_offset, ++ sizeof(*dire), &next_block, ++ &next_offset)) ++ goto failed_read; ++ ++ length += sizeof(*dire); ++ } ++ ++ if (!squashfs_get_cached_block(i->i_sb, dire->name, ++ next_block, next_offset, dire->size + 1, ++ &next_block, &next_offset)) ++ goto failed_read; ++ ++ length += dire->size + 1; ++ ++ if (sorted && name[0] < dire->name[0]) ++ goto exit_loop; ++ ++ if ((len == dire->size + 1) && !strncmp(name, ++ dire->name, len)) { ++ squashfs_inode_t ino = ++ SQUASHFS_MKINODE(dirh.start_block, ++ dire->offset); ++ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block, ++ dire->offset); ++ ++ TRACE("calling squashfs_iget for directory " ++ "entry %s, inode %x:%x, %lld\n", name, ++ dirh.start_block, dire->offset, ino); ++ ++ inode = squashfs_iget(i->i_sb, ino, inode_number); ++ ++ goto exit_loop; ++ } ++ } ++ } ++ ++exit_loop: ++ kfree(dire); ++ d_add(dentry, inode); ++ return ERR_PTR(0); ++ ++failed_read: ++ ERROR("Unable to read directory block [%llx:%x]\n", next_block, ++ next_offset); ++ goto exit_loop; ++} ++ ++ ++int squashfs_2_0_supported(struct squashfs_sb_info *msblk) ++{ ++ struct squashfs_super_block *sblk = &msblk->sblk; ++ ++ msblk->read_inode = squashfs_read_inode_2; ++ msblk->read_fragment_index_table = read_fragment_index_table_2; ++ ++ sblk->bytes_used = sblk->bytes_used_2; ++ sblk->uid_start = sblk->uid_start_2; ++ sblk->guid_start = sblk->guid_start_2; ++ sblk->inode_table_start = sblk->inode_table_start_2; ++ sblk->directory_table_start = sblk->directory_table_start_2; ++ sblk->fragment_table_start = sblk->fragment_table_start_2; ++ ++ return 1; ++} +--- /dev/null ++++ linux-2.6.24-rc1/fs/squashfs/squashfs.h +@@ -0,0 +1,87 @@ ++/* ++ * Squashfs - a compressed read only filesystem for Linux ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher <phillip@lougher.org.uk> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs.h ++ */ ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++#endif ++ ++#ifdef SQUASHFS_TRACE ++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args) ++#else ++#define TRACE(s, args...) {} ++#endif ++ ++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args) ++ ++#define SERROR(s, args...) do { \ ++ if (!silent) \ ++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\ ++ } while(0) ++ ++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args) ++ ++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode) ++{ ++ return list_entry(inode, struct squashfs_inode_info, vfs_inode); ++} ++ ++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY) ++#define SQSH_EXTERN ++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer, ++ long long index, unsigned int length, ++ long long *next_index, int srclength); ++extern int squashfs_get_cached_block(struct super_block *s, char *buffer, ++ long long block, unsigned int offset, ++ int length, long long *next_block, ++ unsigned int *next_offset); ++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct ++ squashfs_fragment_cache *fragment); ++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block ++ *s, long long start_block, ++ int length); ++extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number); ++extern const struct address_space_operations squashfs_symlink_aops; ++extern const struct address_space_operations squashfs_aops; ++extern const struct address_space_operations squashfs_aops_4K; ++extern struct inode_operations squashfs_dir_inode_ops; ++#else ++#define SQSH_EXTERN static ++#endif ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk); ++#else ++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk) ++{ ++ return 0; ++} ++#endif ++ ++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk); ++#else ++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk) ++{ ++ return 0; ++} ++#endif +--- /dev/null ++++ linux-2.6.24-rc1/include/linux/squashfs_fs.h +@@ -0,0 +1,934 @@ ++#ifndef SQUASHFS_FS ++#define SQUASHFS_FS ++ ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher <phillip@lougher.org.uk> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs.h ++ */ ++ ++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY ++#endif ++ ++#ifdef CONFIG_SQUASHFS_VMALLOC ++#define SQUASHFS_ALLOC(a) vmalloc(a) ++#define SQUASHFS_FREE(a) vfree(a) ++#else ++#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL) ++#define SQUASHFS_FREE(a) kfree(a) ++#endif ++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE ++#define SQUASHFS_MAJOR 3 ++#define SQUASHFS_MINOR 0 ++#define SQUASHFS_MAGIC 0x73717368 ++#define SQUASHFS_MAGIC_SWAP 0x68737173 ++#define SQUASHFS_START 0 ++ ++/* size of metadata (inode and directory) blocks */ ++#define SQUASHFS_METADATA_SIZE 8192 ++#define SQUASHFS_METADATA_LOG 13 ++ ++/* default size of data blocks */ ++#define SQUASHFS_FILE_SIZE 65536 ++#define SQUASHFS_FILE_LOG 16 ++ ++#define SQUASHFS_FILE_MAX_SIZE 65536 ++ ++/* Max number of uids and gids */ ++#define SQUASHFS_UIDS 256 ++#define SQUASHFS_GUIDS 255 ++ ++/* Max length of filename (not 255) */ ++#define SQUASHFS_NAME_LEN 256 ++ ++#define SQUASHFS_INVALID ((long long) 0xffffffffffff) ++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) ++#define SQUASHFS_INVALID_BLK ((long long) -1) ++#define SQUASHFS_USED_BLK ((long long) -2) ++ ++/* Filesystem flags */ ++#define SQUASHFS_NOI 0 ++#define SQUASHFS_NOD 1 ++#define SQUASHFS_CHECK 2 ++#define SQUASHFS_NOF 3 ++#define SQUASHFS_NO_FRAG 4 ++#define SQUASHFS_ALWAYS_FRAG 5 ++#define SQUASHFS_DUPLICATE 6 ++#define SQUASHFS_EXPORT 7 ++ ++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) ++ ++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOI) ++ ++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOD) ++ ++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NOF) ++ ++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_NO_FRAG) ++ ++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_ALWAYS_FRAG) ++ ++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_DUPLICATE) ++ ++#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_EXPORT) ++ ++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \ ++ SQUASHFS_CHECK) ++ ++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \ ++ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \ ++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \ ++ (duplicate_checking << 6) | (exportable << 7)) ++ ++/* Max number of types and file types */ ++#define SQUASHFS_DIR_TYPE 1 ++#define SQUASHFS_FILE_TYPE 2 ++#define SQUASHFS_SYMLINK_TYPE 3 ++#define SQUASHFS_BLKDEV_TYPE 4 ++#define SQUASHFS_CHRDEV_TYPE 5 ++#define SQUASHFS_FIFO_TYPE 6 ++#define SQUASHFS_SOCKET_TYPE 7 ++#define SQUASHFS_LDIR_TYPE 8 ++#define SQUASHFS_LREG_TYPE 9 ++ ++/* 1.0 filesystem type definitions */ ++#define SQUASHFS_TYPES 5 ++#define SQUASHFS_IPC_TYPE 0 ++ ++/* Flag whether block is compressed or uncompressed, bit is set if block is ++ * uncompressed */ ++#define SQUASHFS_COMPRESSED_BIT (1 << 15) ++ ++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ ++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) ++ ++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) ++ ++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) ++ ++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \ ++ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \ ++ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK) ++ ++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) ++ ++/* ++ * Inode number ops. Inodes consist of a compressed block number, and an ++ * uncompressed offset within that block ++ */ ++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) ++ ++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) ++ ++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\ ++ << 16) + (B))) ++ ++/* Compute 32 bit VFS inode number from squashfs inode number */ ++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ ++ ((b) >> 2) + 1)) ++/* XXX */ ++ ++/* Translate between VFS mode and squashfs mode */ ++#define SQUASHFS_MODE(a) ((a) & 0xfff) ++ ++/* fragment and fragment table defines */ ++#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry)) ++ ++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ ++ sizeof(long long)) ++ ++/* inode lookup table defines */ ++#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t)) ++ ++#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ ++ sizeof(long long)) ++ ++/* cached data constants for filesystem */ ++#define SQUASHFS_CACHED_BLKS 8 ++ ++#define SQUASHFS_MAX_FILE_SIZE_LOG 64 ++ ++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ ++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) ++ ++#define SQUASHFS_MARKER_BYTE 0xff ++ ++/* meta index cache */ ++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) ++#define SQUASHFS_META_ENTRIES 31 ++#define SQUASHFS_META_NUMBER 8 ++#define SQUASHFS_SLOTS 4 ++ ++struct meta_entry { ++ long long data_block; ++ unsigned int index_block; ++ unsigned short offset; ++ unsigned short pad; ++}; ++ ++struct meta_index { ++ unsigned int inode_number; ++ unsigned int offset; ++ unsigned short entries; ++ unsigned short skip; ++ unsigned short locked; ++ unsigned short pad; ++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; ++}; ++ ++ ++/* ++ * definitions for structures on disk ++ */ ++ ++typedef long long squashfs_block_t; ++typedef long long squashfs_inode_t; ++ ++struct squashfs_super_block { ++ unsigned int s_magic; ++ unsigned int inodes; ++ unsigned int bytes_used_2; ++ unsigned int uid_start_2; ++ unsigned int guid_start_2; ++ unsigned int inode_table_start_2; ++ unsigned int directory_table_start_2; ++ unsigned int s_major:16; ++ unsigned int s_minor:16; ++ unsigned int block_size_1:16; ++ unsigned int block_log:16; ++ unsigned int flags:8; ++ unsigned int no_uids:8; ++ unsigned int no_guids:8; ++ unsigned int mkfs_time /* time of filesystem creation */; ++ squashfs_inode_t root_inode; ++ unsigned int block_size; ++ unsigned int fragments; ++ unsigned int fragment_table_start_2; ++ long long bytes_used; ++ long long uid_start; ++ long long guid_start; ++ long long inode_table_start; ++ long long directory_table_start; ++ long long fragment_table_start; ++ long long lookup_table_start; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_index { ++ unsigned int index; ++ unsigned int start_block; ++ unsigned char size; ++ unsigned char name[0]; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_BASE_INODE_HEADER \ ++ unsigned int inode_type:4; \ ++ unsigned int mode:12; \ ++ unsigned int uid:8; \ ++ unsigned int guid:8; \ ++ unsigned int mtime; \ ++ unsigned int inode_number; ++ ++struct squashfs_base_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ squashfs_block_t start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ unsigned int file_size; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_lreg_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ squashfs_block_t start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ long long file_size; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int start_block; ++ unsigned int parent_inode; ++} __attribute__ ((packed)); ++ ++struct squashfs_ldir_inode_header { ++ SQUASHFS_BASE_INODE_HEADER; ++ unsigned int nlink; ++ unsigned int file_size:27; ++ unsigned int offset:13; ++ unsigned int start_block; ++ unsigned int i_count:16; ++ unsigned int parent_inode; ++ struct squashfs_dir_index index[0]; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header { ++ struct squashfs_base_inode_header base; ++ struct squashfs_dev_inode_header dev; ++ struct squashfs_symlink_inode_header symlink; ++ struct squashfs_reg_inode_header reg; ++ struct squashfs_lreg_inode_header lreg; ++ struct squashfs_dir_inode_header dir; ++ struct squashfs_ldir_inode_header ldir; ++ struct squashfs_ipc_inode_header ipc; ++}; ++ ++struct squashfs_dir_entry { ++ unsigned int offset:13; ++ unsigned int type:3; ++ unsigned int size:8; ++ int inode_number:16; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_header { ++ unsigned int count:8; ++ unsigned int start_block; ++ unsigned int inode_number; ++} __attribute__ ((packed)); ++ ++struct squashfs_fragment_entry { ++ long long start_block; ++ unsigned int size; ++ unsigned int pending; ++} __attribute__ ((packed)); ++ ++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen); ++extern int squashfs_uncompress_init(void); ++extern int squashfs_uncompress_exit(void); ++ ++/* ++ * macros to convert each packed bitfield structure from little endian to big ++ * endian and vice versa. These are needed when creating or using a filesystem ++ * on a machine with different byte ordering to the target architecture. ++ * ++ */ ++ ++#define SQUASHFS_SWAP_START \ ++ int bits;\ ++ int b_pos;\ ++ unsigned long long val;\ ++ unsigned char *s;\ ++ unsigned char *d; ++ ++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\ ++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\ ++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\ ++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\ ++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\ ++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\ ++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\ ++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\ ++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\ ++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\ ++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\ ++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\ ++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\ ++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\ ++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\ ++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\ ++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\ ++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\ ++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\ ++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\ ++ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\ ++} ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ ++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32); ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_ipc_inode_header))\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_dev_inode_header)); \ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_reg_inode_header));\ ++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\ ++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_lreg_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\ ++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_dir_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\ ++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\ ++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \ ++ sizeof(struct squashfs_ldir_inode_header));\ ++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\ ++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\ ++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\ ++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\ ++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\ ++ SQUASHFS_SWAP((s)->index, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->size, d, 64, 8);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\ ++ SQUASHFS_SWAP((s)->count, d, 0, 8);\ ++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\ ++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ ++ SQUASHFS_SWAP((s)->type, d, 13, 3);\ ++ SQUASHFS_SWAP((s)->size, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\ ++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\ ++ SQUASHFS_SWAP((s)->size, d, 64, 32);\ ++} ++ ++#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1) ++ ++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 2);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 16)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\ ++} ++ ++#define SQUASHFS_SWAP_INTS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 4);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 32)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\ ++} ++ ++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * 8);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ 64)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\ ++} ++ ++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\ ++ int entry;\ ++ int bit_position;\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, n * bits / 8);\ ++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \ ++ bits)\ ++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) ++#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n) ++ ++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY ++ ++struct squashfs_base_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int type:4; ++ unsigned int offset:4; ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int mtime; ++ unsigned int start_block; ++ unsigned int file_size:32; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header_1 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:4; /* index into uid table */ ++ unsigned int guid:4; /* index into guid table */ ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\ ++ SQUASHFS_SWAP((s)->guid, d, 20, 4); ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_ipc_inode_header_1));\ ++ SQUASHFS_SWAP((s)->type, d, 24, 4);\ ++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\ ++} ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_dev_inode_header_1));\ ++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header_1));\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_reg_inode_header_1));\ ++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \ ++ sizeof(struct squashfs_dir_inode_header_1));\ ++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\ ++} ++ ++#endif ++ ++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY ++ ++struct squashfs_dir_index_2 { ++ unsigned int index:27; ++ unsigned int start_block:29; ++ unsigned char size; ++ unsigned char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_base_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_ipc_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++} __attribute__ ((packed)); ++ ++struct squashfs_dev_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned short rdev; ++} __attribute__ ((packed)); ++ ++struct squashfs_symlink_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned short symlink_size; ++ char symlink[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_reg_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int mtime; ++ unsigned int start_block; ++ unsigned int fragment; ++ unsigned int offset; ++ unsigned int file_size:32; ++ unsigned short block_list[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int file_size:19; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++struct squashfs_ldir_inode_header_2 { ++ unsigned int inode_type:4; ++ unsigned int mode:12; /* protection */ ++ unsigned int uid:8; /* index into uid table */ ++ unsigned int guid:8; /* index into guid table */ ++ unsigned int file_size:27; ++ unsigned int offset:13; ++ unsigned int mtime; ++ unsigned int start_block:24; ++ unsigned int i_count:16; ++ struct squashfs_dir_index_2 index[0]; ++} __attribute__ ((packed)); ++ ++union squashfs_inode_header_2 { ++ struct squashfs_base_inode_header_2 base; ++ struct squashfs_dev_inode_header_2 dev; ++ struct squashfs_symlink_inode_header_2 symlink; ++ struct squashfs_reg_inode_header_2 reg; ++ struct squashfs_dir_inode_header_2 dir; ++ struct squashfs_ldir_inode_header_2 ldir; ++ struct squashfs_ipc_inode_header_2 ipc; ++}; ++ ++struct squashfs_dir_header_2 { ++ unsigned int count:8; ++ unsigned int start_block:24; ++} __attribute__ ((packed)); ++ ++struct squashfs_dir_entry_2 { ++ unsigned int offset:13; ++ unsigned int type:3; ++ unsigned int size:8; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct squashfs_fragment_entry_2 { ++ unsigned int start_block; ++ unsigned int size; ++} __attribute__ ((packed)); ++ ++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ ++ SQUASHFS_MEMSET(s, d, n);\ ++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\ ++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\ ++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\ ++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\ ++ ++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\ ++} ++ ++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \ ++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2)) ++ ++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_dev_inode_header_2)); \ ++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\ ++} ++ ++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_symlink_inode_header_2));\ ++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\ ++} ++ ++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_reg_inode_header_2));\ ++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\ ++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\ ++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_dir_inode_header_2));\ ++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\ ++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\ ++} ++ ++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \ ++ sizeof(struct squashfs_ldir_inode_header_2));\ ++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\ ++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\ ++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\ ++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\ ++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\ ++ SQUASHFS_SWAP((s)->index, d, 0, 27);\ ++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\ ++ SQUASHFS_SWAP((s)->size, d, 56, 8);\ ++} ++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\ ++ SQUASHFS_SWAP((s)->count, d, 0, 8);\ ++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\ ++} ++ ++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\ ++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\ ++ SQUASHFS_SWAP((s)->type, d, 13, 3);\ ++ SQUASHFS_SWAP((s)->size, d, 16, 8);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\ ++ SQUASHFS_SWAP_START\ ++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\ ++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\ ++ SQUASHFS_SWAP((s)->size, d, 32, 32);\ ++} ++ ++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n) ++ ++/* fragment and fragment table defines */ ++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2)) ++ ++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \ ++ SQUASHFS_METADATA_SIZE - 1) / \ ++ SQUASHFS_METADATA_SIZE) ++ ++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\ ++ sizeof(int)) ++ ++#endif ++ ++#ifdef __KERNEL__ ++ ++/* ++ * macros used to swap each structure entry, taking into account ++ * bitfields and different bitfield placing conventions on differing ++ * architectures ++ */ ++ ++#include <asm/byteorder.h> ++ ++#ifdef __BIG_ENDIAN ++ /* convert from little endian to big endian */ ++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ ++ tbits, b_pos) ++#else ++ /* convert from big endian to little endian */ ++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \ ++ tbits, 64 - tbits - b_pos) ++#endif ++ ++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\ ++ b_pos = pos % 8;\ ++ val = 0;\ ++ s = (unsigned char *)p + (pos / 8);\ ++ d = ((unsigned char *) &val) + 7;\ ++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \ ++ *d-- = *s++;\ ++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\ ++} ++ ++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n); ++ ++#endif ++#endif +--- /dev/null ++++ linux-2.6.24-rc1/include/linux/squashfs_fs_i.h +@@ -0,0 +1,45 @@ ++#ifndef SQUASHFS_FS_I ++#define SQUASHFS_FS_I ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher <phillip@lougher.org.uk> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs_i.h ++ */ ++ ++struct squashfs_inode_info { ++ long long start_block; ++ unsigned int offset; ++ union { ++ struct { ++ long long fragment_start_block; ++ unsigned int fragment_size; ++ unsigned int fragment_offset; ++ long long block_list_start; ++ } s1; ++ struct { ++ long long directory_index_start; ++ unsigned int directory_index_offset; ++ unsigned int directory_index_count; ++ unsigned int parent_inode; ++ } s2; ++ } u; ++ struct inode vfs_inode; ++}; ++#endif +--- /dev/null ++++ linux-2.6.24-rc1/include/linux/squashfs_fs_sb.h +@@ -0,0 +1,74 @@ ++#ifndef SQUASHFS_FS_SB ++#define SQUASHFS_FS_SB ++/* ++ * Squashfs ++ * ++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 ++ * Phillip Lougher <phillip@lougher.org.uk> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2, ++ * or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * squashfs_fs_sb.h ++ */ ++ ++#include <linux/squashfs_fs.h> ++ ++struct squashfs_cache { ++ long long block; ++ int length; ++ long long next_index; ++ char *data; ++}; ++ ++struct squashfs_fragment_cache { ++ long long block; ++ int length; ++ unsigned int locked; ++ char *data; ++}; ++ ++struct squashfs_sb_info { ++ struct squashfs_super_block sblk; ++ int devblksize; ++ int devblksize_log2; ++ int swap; ++ struct squashfs_cache *block_cache; ++ struct squashfs_fragment_cache *fragment; ++ int next_cache; ++ int next_fragment; ++ int next_meta_index; ++ unsigned int *uid; ++ unsigned int *guid; ++ long long *fragment_index; ++ unsigned int *fragment_index_2; ++ char *read_page; ++ struct mutex read_data_mutex; ++ struct mutex read_page_mutex; ++ struct mutex block_cache_mutex; ++ struct mutex fragment_mutex; ++ struct mutex meta_index_mutex; ++ wait_queue_head_t waitq; ++ wait_queue_head_t fragment_wait_queue; ++ struct meta_index *meta_index; ++ z_stream stream; ++ long long *inode_lookup_table; ++ int (*read_inode)(struct inode *i, squashfs_inode_t \ ++ inode); ++ long long (*read_blocklist)(struct inode *inode, int \ ++ index, int readahead_blks, char *block_list, \ ++ unsigned short **block_p, unsigned int *bsize); ++ int (*read_fragment_index_table)(struct super_block *s); ++}; ++#endif +--- linux-2.6.24-rc1.orig/init/do_mounts_rd.c ++++ linux-2.6.24-rc1/init/do_mounts_rd.c +@@ -5,6 +5,7 @@ + #include <linux/ext2_fs.h> + #include <linux/romfs_fs.h> + #include <linux/cramfs_fs.h> ++#include <linux/squashfs_fs.h> + #include <linux/initrd.h> + #include <linux/string.h> + +@@ -39,6 +40,7 @@ + * numbers could not be found. + * + * We currently check for the following magic numbers: ++ * squashfs + * minix + * ext2 + * romfs +@@ -53,6 +55,7 @@ + struct ext2_super_block *ext2sb; + struct romfs_super_block *romfsb; + struct cramfs_super *cramfsb; ++ struct squashfs_super_block *squashfsb; + int nblocks = -1; + unsigned char *buf; + +@@ -64,6 +67,7 @@ + ext2sb = (struct ext2_super_block *) buf; + romfsb = (struct romfs_super_block *) buf; + cramfsb = (struct cramfs_super *) buf; ++ squashfsb = (struct squashfs_super_block *) buf; + memset(buf, 0xe5, size); + + /* +@@ -101,6 +105,18 @@ + goto done; + } + ++ /* squashfs is at block zero too */ ++ if (squashfsb->s_magic == SQUASHFS_MAGIC) { ++ printk(KERN_NOTICE ++ "RAMDISK: squashfs filesystem found at block %d\n", ++ start_block); ++ if (squashfsb->s_major < 3) ++ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; ++ else ++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS; ++ goto done; ++ } ++ + /* + * Read block 1 to test for minix and ext2 superblock + */ diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/uvesafb-0.1-rc3-2.6.22.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/uvesafb-0.1-rc3-2.6.22.patch index 711375114f..711375114f 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/uvesafb-0.1-rc3-2.6.22.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/uvesafb-0.1-rc3-2.6.22.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/versatile-armv6.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/versatile-armv6.patch new file mode 100644 index 0000000000..e2d0060ac3 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/versatile-armv6.patch @@ -0,0 +1,19 @@ +--- + arch/arm/mm/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.23.orig/arch/arm/mm/Kconfig ++++ linux-2.6.23/arch/arm/mm/Kconfig +@@ -343,11 +343,11 @@ config CPU_XSC3 + select IO_36 + + # ARMv6 + config CPU_V6 + bool "Support ARM V6 processor" +- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 ++ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_VERSATILE_PB + default y if ARCH_MX3 + select CPU_32v6 + select CPU_ABRT_EV6 + select CPU_CACHE_V6 + select CPU_CACHE_VIPT diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/vt_ioctl_race.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/vt_ioctl_race.patch index 5a51d1c3f5..5a51d1c3f5 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/vt_ioctl_race.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/vt_ioctl_race.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/w100fb-unused-var.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/w100fb-unused-var.patch index 8cbbb6bd01..8cbbb6bd01 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/w100fb-unused-var.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/w100fb-unused-var.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/wm97xx-lcdnoise-r0.patch index 191de3af22..191de3af22 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/wm97xx-lcdnoise-r0.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/wm97xx-lcdnoise-r0.patch diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/zylonite-boot.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/zylonite-boot.patch index f41928eca5..f41928eca5 100644 --- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/zylonite-boot.patch +++ b/packages/linux/linux-rp-2.6.23+2.6.24-rc6+git/zylonite-boot.patch diff --git a/packages/linux/linux-rp.inc b/packages/linux/linux-rp.inc index ab6cfd38af..8f180164e0 100644 --- a/packages/linux/linux-rp.inc +++ b/packages/linux/linux-rp.inc @@ -58,6 +58,7 @@ module_autoload_snd-soc-spitz_spitz = "snd-soc-spitz" module_autoload_snd-soc-poodle_poodle = "snd-soc-poodle" module_autoload_locomo-spi_collie = "locomo-spi" module_autoload_mmc_block_collie = "mmc_block" +module_autoload_locomo-kbd_collie = "locomo-kbd" do_configure() { rm -f ${S}/.config diff --git a/packages/linux/linux-rp_2.6.23+2.6.24-rc0+git.bb b/packages/linux/linux-rp_2.6.23+2.6.24-rc6+git.bb index 3260e6750c..1194f71bb2 100644 --- a/packages/linux/linux-rp_2.6.23+2.6.24-rc0+git.bb +++ b/packages/linux/linux-rp_2.6.23+2.6.24-rc6+git.bb @@ -1,32 +1,33 @@ require linux-rp.inc -PR = "r2" +PR = "r3" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_collie = "1" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 -# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 -# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2 -# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1 -# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1 -# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1 -# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1 +# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 +# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2 +# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1 +# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1 +# ${KERNELORG_MIRROR}pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1 +# ${KERNELORG_MIRROR}pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1 # Patches submitted upstream are towards top of this list # Hacks should clearly named and at the bottom -SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ - http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.23-git9.bz2;patch=1 \ +SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ + ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.24-rc6.bz2;patch=1 \ ${RPSRC}/lzo_crypto-r2.patch;patch=1 \ ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \ - ${RPSRC}/hx2750_base-r30.patch;patch=1 \ + file://hx2750_base-r31.patch;patch=1 \ ${RPSRC}/hx2750_bl-r9.patch;patch=1 \ ${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \ ${RPSRC}/pxa_keys-r8.patch;patch=1 \ - ${RPSRC}/tsc2101-r16.patch;patch=1 \ +# ${RPSRC}/tsc2101-r16.patch;patch=1 \ ${RPSRC}/hx2750_test1-r7.patch;patch=1 \ - ${RPSRC}/input_power-r9.patch;patch=1 \ + ${RPSRC}/input_power-r10.patch;patch=1 \ + ${RPSRC}/input_power_fix-r0.patch;patch=1 \ ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \ ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \ ${RPSRC}/pm_changes-r1.patch;patch=1 \ @@ -34,14 +35,15 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ ${RPSRC}/usb_pxa27x_udc-r7.patch;patch=1 \ ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \ ${RPSRC}/poodle_pm-r5.patch;patch=1 \ - ${RPSRC}/pxa27x_overlay-r7.patch;patch=1 \ + file://pxa27x_overlay-r8.patch;patch=1 \ ${RPSRC}/w100_extaccel-r1.patch;patch=1 \ ${RPSRC}/w100_extmem-r1.patch;patch=1 \ + ${RPSRC}/export_atags-r1.patch;patch=1 \ + ${RPSRC}/pxa25x_suspend_fixes-r0.patch;patch=1 \ file://w100fb-unused-var.patch;patch=1 \ file://hostap-monitor-mode.patch;patch=1 \ file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \ ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \ - ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \ ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \ ${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \ file://mmcsd_no_scr_check-r2.patch;patch=1 \ @@ -50,10 +52,10 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ ${RPSRC}/corgi_rearrange_lcd-r0.patch;patch=1 \ file://pxa-serial-hack.patch;patch=1;status=hack \ file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \ - file://squashfs3.0-2.6.15.patch;patch=1;status=external \ - file://uvesafb-0.1-rc3-2.6.22.patch;patch=1;status=external \ -# file://htcuni.patch;patch=1 \ +# file://squashfs3.2-2.6.20-r0.patch;patch=1;status=external \ +# file://htcuni.patch;patch=1 \ file://binutils-buildid-arm.patch;patch=1 \ + file://versatile-armv6.patch;patch=1 \ file://defconfig-c7x0 \ file://defconfig-hx2000 \ file://defconfig-collie \ @@ -84,17 +86,13 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \ # These patches are extracted from Pavel Machek's git tree # (diff against vanilla kernel) SRC_URI_append_collie = "\ - ${TKSRC}/${PN}_${PV}/mtd-sharp-flash-hack-r3.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/mcp-sa11x0-r0.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/locomo-r0.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/locomo_spi-4.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/collie-kexec.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/sharpsl_pm-2.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/collie_pm-2.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/locomokeyb_suspendkey-2.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/ucb1x00_suspend.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/collie-ts.patch;patch=1 \ - ${TKSRC}/${PN}_${PV}/pcmcia_suspend.patch;patch=1 \ + ${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \ + ${DOSRC}/collie/collie-r0.patch;patch=1 \ + ${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \ + ${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \ + file://collie-mcp-r1.patch;patch=1 \ + ${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \ +# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \ " SRC_URI_append_tosa = "\ diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb index 24a8192b5b..5b9b4f3b6b 100644 --- a/packages/linux/linux-rp_2.6.23.bb +++ b/packages/linux/linux-rp_2.6.23.bb @@ -1,6 +1,6 @@ require linux-rp.inc -PR = "r21" +PR = "r22" # Handy URLs # git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 diff --git a/packages/linux/linux-storcenter/defconfig-2.6.15.7 b/packages/linux/linux-storcenter/defconfig-2.6.15.7 new file mode 100644 index 0000000000..de5e5b80f7 --- /dev/null +++ b/packages/linux/linux-storcenter/defconfig-2.6.15.7 @@ -0,0 +1,1176 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.15.7 +# Tue Jan 15 08:24:59 2008 +# +CONFIG_MMU=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_PPC=y +CONFIG_PPC32=y +CONFIG_GENERIC_NVRAM=y +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_AUDIT is not set +CONFIG_HOTPLUG=y +CONFIG_KOBJECT_UEVENT=y +# CONFIG_IKCONFIG is not set +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_EMBEDDED=y +# CONFIG_KALLSYMS is not set +CONFIG_PRINTK=y +CONFIG_BUG=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_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_LBD=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# Processor +# +CONFIG_6xx=y +# CONFIG_40x is not set +# CONFIG_44x is not set +# CONFIG_POWER3 is not set +# CONFIG_POWER4 is not set +# CONFIG_8xx is not set +# CONFIG_E200 is not set +# CONFIG_E500 is not set +CONFIG_PPC_FPU=y +# CONFIG_ALTIVEC is not set +# CONFIG_TAU is not set +# CONFIG_KEXEC is not set +# CONFIG_CPU_FREQ is not set +# CONFIG_WANT_EARLY_SERIAL is not set +CONFIG_PPC_GEN550=y +CONFIG_PPC_STD_MMU=y + +# +# Platform options +# +# CONFIG_PPC_MULTIPLATFORM is not set +# CONFIG_APUS is not set +# CONFIG_KATANA is not set +# CONFIG_WILLOW is not set +# CONFIG_CPCI690 is not set +# CONFIG_POWERPMC250 is not set +# CONFIG_CHESTNUT is not set +# CONFIG_SPRUCE is not set +# CONFIG_HDPU is not set +# CONFIG_EV64260 is not set +# CONFIG_LOPEC is not set +# CONFIG_MVME5100 is not set +# CONFIG_PPLUS is not set +# CONFIG_PRPMC750 is not set +# CONFIG_PRPMC800 is not set +# CONFIG_SANDPOINT is not set +# CONFIG_RADSTONE_PPC7D is not set +# CONFIG_PAL4 is not set +# CONFIG_GEMINI is not set +# CONFIG_EST8260 is not set +# CONFIG_SBC82xx is not set +CONFIG_IOMEGA8241=y +# CONFIG_SBS8260 is not set +# CONFIG_RPX8260 is not set +# CONFIG_TQM8260 is not set +# CONFIG_ADS8272 is not set +# CONFIG_PQ2FADS is not set +# CONFIG_LITE5200 is not set +# CONFIG_MPC834x_SYS is not set +# CONFIG_EV64360 is not set +CONFIG_MPC10X_BRIDGE=y +CONFIG_MPC10X_OPENPIC=y +# CONFIG_MPC10X_STORE_GATHERING is not set +# CONFIG_SMP is not set +# CONFIG_HIGHMEM is not set +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=y +CONFIG_CMDLINE_BOOL=y +CONFIG_CMDLINE="console=ttyS0,115200" +# CONFIG_PM is not set +# CONFIG_SOFTWARE_SUSPEND is not set +CONFIG_SECCOMP=y +CONFIG_ISA_DMA_API=y + +# +# Bus options +# +CONFIG_GENERIC_ISA_DMA=y +# CONFIG_PPC_I8259 is not set +CONFIG_PPC_INDIRECT_PCI=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_LEGACY_PROC is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Advanced setup +# +# CONFIG_ADVANCED_OPTIONS is not set + +# +# Default settings for advanced configuration options are used +# +CONFIG_HIGHMEM_START=0xfe000000 +CONFIG_LOWMEM_SIZE=0x30000000 +CONFIG_KERNEL_START=0xc0000000 +CONFIG_TASK_SIZE=0x80000000 +CONFIG_BOOT_LOAD=0x00800000 + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_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 +# CONFIG_IPV6 is not set +# CONFIG_NETFILTER is not set + +# +# DCCP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_DCCP is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_IEEE80211 is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_FTL=y +CONFIG_NFTL=y +CONFIG_NFTL_RW=y +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_CFI_INTELEXT is not set +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_AMDSTD_RETRY=0 +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0xFF800000 +CONFIG_MTD_PHYSMAP_LEN=0x00800000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=1 +# CONFIG_MTD_PLATRAM is not set +CONFIG_MTD_IOMEGA8241=y + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# OneNAND Flash Device Drivers +# +# CONFIG_MTD_ONENAND is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +CONFIG_BLK_DEV_RAM_COUNT=16 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_IDEPCI_SHARE_IRQ is not set +CONFIG_BLK_DEV_OFFBOARD=y +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_BLK_DEV_OPTI621 is not set +# CONFIG_BLK_DEV_SL82C105 is not set +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +# CONFIG_IDEDMA_PCI_AUTO is not set +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_IT821X is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +CONFIG_BLK_DEV_VIA82CXXX=y +# CONFIG_IDE_ARM is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI Transport Attributes +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_FC is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA2XXX=y +# CONFIG_SCSI_QLA21XX is not set +# CONFIG_SCSI_QLA22XX is not set +# CONFIG_SCSI_QLA2300 is not set +# CONFIG_SCSI_QLA2322 is not set +# CONFIG_SCSI_QLA6312 is not set +# CONFIG_SCSI_QLA24XX is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_LINEAR=y +CONFIG_MD_RAID0=y +CONFIG_MD_RAID1=y +CONFIG_MD_RAID10=y +CONFIG_MD_RAID5=y +# CONFIG_MD_RAID6 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_MD_FAULTY is not set +# CONFIG_BLK_DEV_DM is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_SPI is not set +# CONFIG_FUSION_FC is not set +# CONFIG_FUSION_SAS is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# Macintosh device drivers +# +# CONFIG_WINDFARM is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set + +# +# PHY device support +# + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +CONFIG_R8169=y +# CONFIG_R8169_NAPI is not set +# CONFIG_SIS190 is not set +# CONFIG_SKGE is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2 is not set + +# +# Ethernet (10000 Mbit) +# +# CONFIG_CHELSIO_T1 is not set +# CONFIG_IXGB is not set +# CONFIG_S2IO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=2 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_RSA is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +CONFIG_GEN_RTC=y +# CONFIG_GEN_RTC_X is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +CONFIG_8241EMI=y + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_I810 is not set +# CONFIG_I2C_PIIX4 is not set +CONFIG_I2C_MPC=y +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_PROSAVAGE is not set +# CONFIG_I2C_SAVAGE4 is not set +# CONFIG_SCx200_ACB is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_VOODOO3 is not set +# CONFIG_I2C_PCA_ISA is not set + +# +# Miscellaneous I2C Chip support +# +CONFIG_SENSORS_DS1337=y +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_RTC8564 is not set +# CONFIG_SENSORS_M41T00 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 + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set + +# +# Hardware Monitoring support +# +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_FSCHER is not set +# CONFIG_SENSORS_FSCPOS is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_SPLIT_ISO is not set +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +CONFIG_USB_PRINTER=y + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_DPCM=y +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set + +# +# USB Input Devices +# +# CONFIG_USB_HID is not set + +# +# USB HID Boot Protocol drivers +# + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGETKIT is not set +# CONFIG_USB_PHIDGETSERVO is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set + +# +# MMC/SD Card support +# +# CONFIG_MMC is not set + +# +# InfiniBand support +# +# CONFIG_INFINIBAND is not set + +# +# SN Devices +# + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_SECURITY is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_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=y +CONFIG_JOLIET=y +# CONFIG_ZISOFS 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=y +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_RELAYFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_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_EFI_PARTITION is not set + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y + +# +# Library routines +# +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_DEBUG_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SERIAL_TEXT_DEBUG=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Hardware crypto devices +# diff --git a/packages/linux/linux-storcenter/kernel.patch-2.6.15.7 b/packages/linux/linux-storcenter/kernel.patch-2.6.15.7 new file mode 100644 index 0000000000..030ef64d2a --- /dev/null +++ b/packages/linux/linux-storcenter/kernel.patch-2.6.15.7 @@ -0,0 +1,1181 @@ +--- linux-2.6.15.orig/arch/ppc/platforms/iomega8241.c 1969-12-31 16:00:00.000000000 -0800 ++++ linux-2.6.15/arch/ppc/platforms/iomega8241.c 2008-01-07 16:56:45.628534603 -0800 +@@ -0,0 +1,603 @@ ++/* ++ * arch/ppc/platforms/iomega8241.c ++ * ++ * The Iomega StorCenter Network Hard Drive platform is based on the ++ * original sandpoint test platform. That GNU copyright information ++ * is reproduced below: ++ * ++ * Board setup routines for the Motorola SPS Sandpoint Test Platform. ++ * ++ * Author: Mark A. Greer ++ * mgreer@mvista.com ++ * ++ * 2000-2003 (c) MontaVista Software, Inc. This file is licensed under ++ * the terms of the GNU General Public License version 2. This program ++ * is licensed "as is" without any warranty of any kind, whether express ++ * or implied. ++ */ ++ ++/* ++ * Iomega StorCenter Network Hard Drive. ++ * ++ * Maintainer (Iomega Port): Anthony Russello ++ * russello@iomega.com ++ * Much of the below code was taken from the original sandpoint.c/.h port ++ * done my Mark A. Greer (see above copyright information). It was adapted ++ * to support a custom board. ++ */ ++ ++#include <linux/config.h> ++#include <linux/stddef.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/errno.h> ++#include <linux/reboot.h> ++#include <linux/pci.h> ++#include <linux/kdev_t.h> ++#include <linux/major.h> ++#include <linux/initrd.h> ++#include <linux/console.h> ++#include <linux/delay.h> ++#include <linux/irq.h> ++#include <linux/ide.h> ++#include <linux/seq_file.h> ++#include <linux/root_dev.h> ++#include <linux/serial.h> ++#include <linux/tty.h> /* for linux/serial_core.h */ ++#include <linux/serial_8250.h> ++ ++#include <asm/system.h> ++#include <asm/pgtable.h> ++#include <asm/page.h> ++#include <asm/time.h> ++#include <asm/dma.h> ++#include <asm/io.h> ++#include <asm/machdep.h> ++#include <asm/prom.h> ++#include <asm/smp.h> ++#include <asm/vga.h> ++#include <asm/open_pic.h> ++#include <asm/todc.h> ++#include <asm/bootinfo.h> ++#include <asm/mpc10x.h> ++#include <asm/pci-bridge.h> ++#include <asm/kgdb.h> ++ ++#include "iomega8241.h" ++ ++/* Real Time Clock */ ++extern spinlock_t rtc_lock; ++extern int ds1337_do_command(int id, int cmd, void *arg); ++#define DS1337_GET_DATE 0 ++#define DS1337_SET_DATE 1 ++ ++unsigned char __res[sizeof(bd_t)]; ++ ++static void iomega8241_halt(void); ++ ++/* ++ * Define all of the IRQ senses and polarities. ++ */ ++static u_char iomega8241_openpic_initsenses[] __initdata = { ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 0: AN983B */ ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 1: IDE VIA DS6410 */ ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 2: USB */ ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 3: USB */ ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 4: USB */ ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 5: UART0 */ ++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 6: UART1 */ ++}; ++ ++/* ++ * Define all of the PCI IRQ Mappings ++ */ ++static inline int ++iomega8241_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin) ++{ ++ static char pci_irq_table[][4] = ++ /* ++ * PCI IDSEL/INTPIN->INTLINE ++ * A B C D ++ */ ++ { ++ { 1, 1, 0, 0 }, ++ { 2, 3, 4, 1 }, ++ { 0, 0, 4, 4 }, ++ { 3, 3, 4, 4 }, ++ { 3, 3, 4, 4 }, ++ }; ++ ++ const long min_idsel = 13, max_idsel = 17, irqs_per_slot = 4; ++ return PCI_IRQ_TABLE_LOOKUP; ++} ++ ++static int ++iomega8241_exclude_device(u_char bus, u_char devfn) ++{ ++ if ((bus == 0) && (PCI_SLOT(devfn) == IOMEGA8241_HOST_BRIDGE_IDSEL)) ++ return PCIBIOS_DEVICE_NOT_FOUND; ++ else ++ return PCIBIOS_SUCCESSFUL; ++} ++ ++static void __init ++iomega8241_find_bridges(void) ++{ ++ struct pci_controller *hose; ++ ++ hose = pcibios_alloc_controller(); ++ ++ if (!hose) ++ return; ++ ++ hose->first_busno = 0; ++ hose->last_busno = 0x1; ++ ++ if (mpc10x_bridge_init(hose, ++ MPC10X_MEM_MAP_B, ++ MPC10X_MEM_MAP_B, ++ MPC10X_MAPB_EUMB_BASE) == 0) { ++ ++ ppc_md.pci_exclude_device = iomega8241_exclude_device; ++ hose->last_busno = pciauto_bus_scan(hose, hose->first_busno); ++ ppc_md.pcibios_fixup = NULL; ++ ppc_md.pcibios_fixup_bus = NULL; ++ ppc_md.pci_swizzle = common_swizzle; ++ ppc_md.pci_map_irq = iomega8241_map_irq; ++ } ++ else { ++ if (ppc_md.progress) ++ ppc_md.progress("Bridge init failed", 0x100); ++ printk("Host bridge init failed\n"); ++ } ++ return; ++} ++ ++ ++static ulong ++get_bus_frequency(void) ++{ ++ bd_t *bp = (bd_t *)__res; ++ ulong freq; ++ if (133333332 == bp->bi_busfreq) ++ freq = 132000000; ++ if (99999999 == bp->bi_busfreq) ++ freq = 100000000; ++ return(freq); ++} ++ ++ ++static void ++iomega8241_early_serial_map(void) ++{ ++#if defined(CONFIG_SERIAL_8250) ++ struct plat_serial8250_port *pdata; ++ bd_t *binfo = (bd_t *) __res; ++ ++ pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(MPC10X_UART0); ++ pdata[0].uartclk = get_bus_frequency(); ++ pdata[0].membase = (unsigned char __iomem *) IOMEGA8241_SERIAL_0; ++ ++ pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(MPC10X_UART1); ++ pdata[0].uartclk = get_bus_frequency(); ++ pdata[0].membase = (unsigned char __iomem *) IOMEGA8241_SERIAL_1; ++#endif ++} ++ ++static void __init ++iomega8241_setup_arch(void) ++{ ++ int i = 0; ++ ++ loops_per_jiffy = 100000000 / HZ; ++ ++#ifdef CONFIG_BLK_DEV_INITRD ++ if (initrd_start) ++ ROOT_DEV = Root_RAM0; ++ else ++#endif ++#ifdef CONFIG_ROOT_NFS ++ ROOT_DEV = Root_NFS; ++#else ++ ROOT_DEV = Root_HDA1; ++#endif ++ ++ /* Lookup PCI host bridges */ ++ iomega8241_find_bridges(); ++ ++ iomega8241_early_serial_map(); ++ ++ printk(KERN_INFO "Iomega StorCenter Network Hard Drive\n"); ++ printk(KERN_INFO "Linux Kernel by Protium Computing\n"); ++ ++ /* DINK32 12.3 and below do not correctly enable any caches. ++ * We will do this now with good known values. Future versions ++ * of DINK32 are supposed to get this correct. ++ */ ++ if (cpu_has_feature(CPU_FTR_SPEC7450)) ++ /* 745x is different. We only want to pass along enable. */ ++ _set_L2CR(L2CR_L2E); ++ else if (cpu_has_feature(CPU_FTR_L2CR)) ++ /* All modules have 1MB of L2. We also assume that an ++ * L2 divisor of 3 will work. ++ */ ++ _set_L2CR(L2CR_L2E | L2CR_L2SIZ_1MB | L2CR_L2CLK_DIV3 ++ | L2CR_L2RAM_PIPE | L2CR_L2OH_1_0 | L2CR_L2DF); ++#if 0 ++ /* Untested right now. */ ++ if (cpu_has_feature(CPU_FTR_L3CR)) { ++ /* Magic value. */ ++ _set_L3CR(0x8f032000); ++ } ++#endif ++} ++ ++#define IOMEGA8241_87308_CFG_ADDR 0x15c ++#define IOMEGA8241_87308_CFG_DATA 0x15d ++ ++#define IOMEGA8241_87308_CFG_INB(addr, byte) { \ ++ outb((addr), IOMEGA8241_87308_CFG_ADDR); \ ++ (byte) = inb(IOMEGA8241_87308_CFG_DATA); \ ++} ++ ++#define IOMEGA8241_87308_CFG_OUTB(addr, byte) { \ ++ outb((addr), IOMEGA8241_87308_CFG_ADDR); \ ++ outb((byte), IOMEGA8241_87308_CFG_DATA); \ ++} ++ ++#define IOMEGA8241_87308_SELECT_DEV(dev_num) { \ ++ IOMEGA8241_87308_CFG_OUTB(0x07, (dev_num)); \ ++} ++ ++#define IOMEGA8241_87308_DEV_ENABLE(dev_num) { \ ++ IOMEGA8241_87308_SELECT_DEV(dev_num); \ ++ IOMEGA8241_87308_CFG_OUTB(0x30, 0x01); \ ++} ++ ++static int __init ++iomega8241_request_io(void) ++{ ++ request_region(0x00,0x20,"dma1"); ++ request_region(0x20,0x20,"pic1"); ++ request_region(0x40,0x20,"timer"); ++ request_region(0x80,0x10,"dma page reg"); ++ request_region(0xa0,0x20,"pic2"); ++ request_region(0xc0,0x20,"dma2"); ++ ++ return 0; ++} ++ ++arch_initcall(iomega8241_request_io); ++ ++/* ++ * Interrupt setup and service. Interrrupts on the Sandpoint come ++ * from the four PCI slots plus the 8259 in the Winbond Super I/O (SIO). ++ * The 8259 is cascaded from EPIC IRQ0, IRQ1-4 map to PCI slots 1-4, ++ * IDE is on EPIC 7 and 8. ++ */ ++static void __init ++iomega8241_init_IRQ(void) ++{ ++ OpenPIC_InitSenses = iomega8241_openpic_initsenses; ++ OpenPIC_NumInitSenses = sizeof(iomega8241_openpic_initsenses); ++ ++ /* ++ * We need to tell openpic_set_sources where things actually are. ++ * mpc10x_common will set up OpenPIC_Addr at ioremap(EUMB phys base + ++ * EPIC offset (0x40000)); The EPIC IRQ register address map - ++ * Interrupt Source Configuration Registers gives these numbers as ++ * offsets starting at 0x50200, we need to adjust accordingly ++ */ ++ mpc10x_set_openpic(); ++} ++ ++static int ++iomega8241_get_irq(struct pt_regs *regs) ++{ ++ int irq; ++ ++ irq = openpic_irq(); ++ if (irq == OPENPIC_VEC_SPURIOUS) ++ irq = -1; ++ ++ return irq; ++} ++ ++static u32 ++iomega8241_irq_canonicalize(u32 irq) ++{ ++ return irq; ++} ++ ++static unsigned long __init ++iomega8241_find_end_of_memory(void) ++{ ++ bd_t *bp = (bd_t *)__res; ++ ++ if (bp->bi_memsize) ++ return bp->bi_memsize; ++ ++ return 64*1024*1024; ++} ++ ++static void __init ++iomega8241_map_io(void) ++{ ++ /* changes suggested by Freescale: */ ++ io_block_mapping(0xfc000000, 0xfc000000, 0x04000000, _PAGE_IO); ++} ++ ++static void ++iomega8241_restart(char *cmd) ++{ ++ local_irq_disable(); ++ ++ /* Set exception prefix high - to the firmware */ ++ _nmask_and_or_msr(0, MSR_IP); ++ ++ for(;;); /* Spin until reset happens */ ++} ++ ++static void ++iomega8241_power_off(void) ++{ ++ local_irq_disable(); ++ for(;;); /* No way to shut power off with software */ ++ /* NOTREACHED */ ++} ++ ++static void ++iomega8241_halt(void) ++{ ++ iomega8241_power_off(); ++ /* NOTREACHED */ ++} ++ ++static int ++iomega8241_show_cpuinfo(struct seq_file *m) ++{ ++ seq_printf(m, "vendor\t\t: Iomega Corporation\n"); ++ seq_printf(m, "machine\t\t: Iomega StorCenter Network Hard Drive\n"); ++ ++ return 0; ++} ++ ++#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) ++/* ++ * IDE support. ++ */ ++static int iomega8241_ide_ports_known = 0; ++static unsigned long iomega8241_ide_regbase[MAX_HWIFS]; ++static unsigned long iomega8241_ide_ctl_regbase[MAX_HWIFS]; ++static unsigned long iomega8241_idedma_regbase; ++ ++static void ++iomega8241_ide_probe(void) ++{ ++ struct pci_dev *pdev = pci_get_device(PCI_VENDOR_ID_VIA, ++ PCI_DEVICE_ID_VIA_6410, NULL); ++ ++ if (pdev) { ++ iomega8241_ide_regbase[0]=pdev->resource[0].start; ++ iomega8241_ide_regbase[1]=pdev->resource[2].start; ++ iomega8241_ide_ctl_regbase[0]=pdev->resource[1].start; ++ iomega8241_ide_ctl_regbase[1]=pdev->resource[3].start; ++ iomega8241_idedma_regbase=pdev->resource[4].start; ++ ++ printk("Found: VIA VT6410 based IDE\n"); ++ } ++ ++ iomega8241_ide_ports_known = 1; ++} ++ ++static int ++iomega8241_ide_default_irq(unsigned long base) ++{ ++ if (iomega8241_ide_ports_known == 0) ++ iomega8241_ide_probe(); ++ ++ if (base == iomega8241_ide_regbase[0]) ++ return IDE_INTRUPT; ++ else if (base == iomega8241_ide_regbase[1]) ++ return IDE_INTRUPT; ++ else ++ return 0; ++} ++ ++static unsigned long ++iomega8241_ide_default_io_base(int index) ++{ ++ if (iomega8241_ide_ports_known == 0) ++ iomega8241_ide_probe(); ++ ++ return iomega8241_ide_regbase[index]; ++} ++ ++static void __init ++iomega8241_ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, ++ unsigned long ctrl_port, int *irq) ++{ ++ unsigned long reg = data_port; ++ uint alt_status_base; ++ int i; ++ ++ for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { ++ hw->io_ports[i] = reg++; ++ } ++ ++ if (data_port == iomega8241_ide_regbase[0]) { ++ alt_status_base = iomega8241_ide_ctl_regbase[0] + 2; ++ hw->irq = IDE_INTRUPT; ++ } else if (data_port == iomega8241_ide_regbase[1]) { ++ alt_status_base = iomega8241_ide_ctl_regbase[1] + 2; ++ hw->irq = IDE_INTRUPT; ++ } else { ++ alt_status_base = 0; ++ hw->irq = 0; ++ } ++ ++ if (ctrl_port) { ++ hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port; ++ } else { ++ hw->io_ports[IDE_CONTROL_OFFSET] = alt_status_base; ++ } ++ ++ if (irq != NULL) { ++ *irq = hw->irq; ++ } ++} ++#endif ++ ++/* ++ * Set BAT 3 to map 0xf8000000 to end of physical memory space 1-to-1. ++ */ ++static __inline__ void ++iomega8241_set_bat(void) ++{ ++ unsigned long bat3u, bat3l; ++ ++ __asm__ __volatile__( ++ " lis %0,0xf800\n \ ++ ori %1,%0,0x002a\n \ ++ ori %0,%0,0x0ffe\n \ ++ mtspr 0x21e,%0\n \ ++ mtspr 0x21f,%1\n \ ++ isync\n \ ++ sync " ++ : "=r" (bat3u), "=r" (bat3l)); ++} ++ ++TODC_ALLOC(); ++ ++/* Real Time Clock support. ++ * StorCenter has a DS1337 accessed by I2C. ++ */ ++static void __init ++iomega8241_calibrate_decr(void) ++{ ++ ulong freq = get_bus_frequency() / 4; ++ printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", ++ freq/1000000, freq%1000000); ++ if (freq == 33000000) ++ freq += 332550; ++ ++ tb_ticks_per_jiffy = freq / HZ; ++ tb_to_us = mulhwu_scale_factor(freq, 1000000); ++ ++ return; ++} ++ ++ ++static ulong iomega8241_get_rtc_time(void) ++{ ++ struct rtc_time tm; ++ int result; ++ ++ spin_lock(&rtc_lock); ++ result = ds1337_do_command(0, DS1337_GET_DATE, &tm); ++ spin_unlock(&rtc_lock); ++ ++ if (result == 0) ++ result = mktime(tm.tm_year+1900, tm.tm_mon, tm.tm_mday, ++ tm.tm_hour, tm.tm_min, tm.tm_sec); ++ ++ return result; ++} ++ ++ ++static int iomega8241_set_rtc_time(unsigned long nowtime) ++{ ++ struct rtc_time tm; ++ int result; ++ ++ to_tm(nowtime, &tm); ++ tm.tm_year -= 1900; ++ spin_lock(&rtc_lock); ++ result = ds1337_do_command(0, DS1337_SET_DATE, &tm); ++ spin_unlock(&rtc_lock); ++ ++ return result; ++} ++ ++ ++static void __init ++iomega8241_init2(void) ++{ ++ ppc_md.set_rtc_time = iomega8241_set_rtc_time; ++ ppc_md.get_rtc_time = iomega8241_get_rtc_time; ++} ++ ++ ++void __init ++platform_init(unsigned long r3, unsigned long r4, unsigned long r5, ++ unsigned long r6, unsigned long r7) ++{ ++ parse_bootinfo(find_bootinfo()); ++ ++ /* ASSUMPTION: If both r3 (bd_t pointer) and r6 (cmdline pointer) ++ * are non-zero, then we should use the board info from the bd_t ++ * structure and the cmdline pointed to by r6 instead of the ++ * information from birecs, if any. Otherwise, use the information ++ * from birecs as discovered by the preceeding call to ++ * parse_bootinfo(). This rule should work with both PPCBoot, which ++ * uses a bd_t board info structure, and the kernel boot wrapper, ++ * which uses birecs. ++ */ ++ if (r3 && r6) { ++ /* copy board info structure */ ++ memcpy( (void *)__res,(void *)(r3+KERNELBASE), sizeof(bd_t) ); ++ /* copy command line */ ++ *(char *)(r7+KERNELBASE) = 0; ++ strcpy(cmd_line, (char *)(r6+KERNELBASE)); ++ } ++ ++#ifdef CONFIG_BLK_DEV_INITRD ++ /* take care of initrd if we have one */ ++ if (r4) { ++ initrd_start = r4 + KERNELBASE; ++ initrd_end = r5 + KERNELBASE; ++ } ++#endif /* CONFIG_BLK_DEV_INITRD */ ++ ++ /* Map in board regs, etc. */ ++ iomega8241_set_bat(); ++ ++ isa_io_base = MPC10X_MAPB_ISA_IO_BASE; ++ isa_mem_base = MPC10X_MAPB_ISA_MEM_BASE; ++ pci_dram_offset = MPC10X_MAPB_DRAM_OFFSET; ++ ISA_DMA_THRESHOLD = 0x00ffffff; ++ DMA_MODE_READ = 0x44; ++ DMA_MODE_WRITE = 0x48; ++ ++ ppc_md.setup_arch = iomega8241_setup_arch; ++ ppc_md.show_cpuinfo = iomega8241_show_cpuinfo; ++ ppc_md.irq_canonicalize = iomega8241_irq_canonicalize; ++ ppc_md.init_IRQ = iomega8241_init_IRQ; ++ ppc_md.get_irq = iomega8241_get_irq; ++ ppc_md.init = iomega8241_init2; ++ ++ ppc_md.restart = iomega8241_restart; ++ ppc_md.power_off = iomega8241_power_off; ++ ppc_md.halt = iomega8241_halt; ++ ++ ppc_md.find_end_of_memory = iomega8241_find_end_of_memory; ++ ppc_md.setup_io_mappings = iomega8241_map_io; ++ ++ ppc_md.time_init = NULL; ++ ppc_md.set_rtc_time = NULL; ++ ppc_md.get_rtc_time = NULL; ++ ppc_md.calibrate_decr = iomega8241_calibrate_decr; ++ ++/* ++ * extra credit: ++ * ++ * ppc_md.nvram_read_val = todc_mc146818_read_val; ++ * ppc_md.nvram_write_val = todc_mc146818_write_val; ++ */ ++#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) ++ ppc_ide_md.default_irq = iomega8241_ide_default_irq; ++ ppc_ide_md.default_io_base = iomega8241_ide_default_io_base; ++ ppc_ide_md.ide_init_hwif = iomega8241_ide_init_hwif_ports; ++#endif ++ ++} +--- linux-2.6.15.orig/arch/ppc/Kconfig 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/arch/ppc/Kconfig 2008-01-01 22:12:32.365126129 -0800 +@@ -649,6 +649,15 @@ + End of Life: - + URL: <http://www.windriver.com/> + ++config IOMEGA8241 ++ bool "IOMEGA8241" ++ ---help--- ++ Iomega StorCenter Network Hard Drive ++ Manufacturer: Iomega Corporation ++ Date of Release: May 2005 ++ End of Life: - ++ URL: <http://www.iomega.com/> ++ + config SBS8260 + bool "SBS8260" + +@@ -801,7 +810,7 @@ + depends on SANDPOINT || SPRUCE || PPLUS || \ + PRPMC750 || PRPMC800 || LOPEC || \ + (EV64260 && !SERIAL_MPSC) || CHESTNUT || RADSTONE_PPC7D || \ +- 83xx ++ 83xx || IOMEGA8241 + default y + + config FORCE +@@ -870,13 +879,13 @@ + + config MPC10X_BRIDGE + bool +- depends on POWERPMC250 || LOPEC || SANDPOINT ++ depends on POWERPMC250 || LOPEC || SANDPOINT || IOMEGA8241 + select PPC_INDIRECT_PCI + default y + + config MPC10X_OPENPIC + bool +- depends on POWERPMC250 || LOPEC || SANDPOINT ++ depends on POWERPMC250 || LOPEC || SANDPOINT || IOMEGA8241 + default y + + config MPC10X_STORE_GATHERING +--- linux-2.6.15.orig/arch/ppc/boot/Makefile 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/arch/ppc/boot/Makefile 2008-01-01 22:12:32.365126129 -0800 +@@ -13,7 +13,7 @@ + CFLAGS += -fno-builtin -D__BOOTER__ -Iarch/$(ARCH)/boot/include + HOSTCFLAGS += -Iarch/$(ARCH)/boot/include + +-BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd ++BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd uImage + + bootdir-y := simple + bootdir-$(CONFIG_PPC_OF) += openfirmware +--- linux-2.6.15.orig/arch/ppc/boot/simple/Makefile 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/arch/ppc/boot/simple/Makefile 2008-01-01 22:12:32.365126129 -0800 +@@ -158,6 +158,10 @@ + end-$(CONFIG_SANDPOINT) := sandpoint + cacheflag-$(CONFIG_SANDPOINT) := -include $(clear_L2_L3) + ++ end-$(CONFIG_IOMEGA8241) := iomega8241 ++ cacheflag-$(CONFIG_IOMEGA8241) := -include $(clear_L2_L3) ++ ++ + zimage-$(CONFIG_SPRUCE) := zImage-TREE + zimageinitrd-$(CONFIG_SPRUCE) := zImage.initrd-TREE + end-$(CONFIG_SPRUCE) := spruce +--- linux-2.6.15.orig/arch/ppc/platforms/Makefile 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/arch/ppc/platforms/Makefile 2008-01-01 22:12:32.365126129 -0800 +@@ -42,6 +42,7 @@ + obj-$(CONFIG_RADSTONE_PPC7D) += radstone_ppc7d.o + obj-$(CONFIG_SANDPOINT) += sandpoint.o + obj-$(CONFIG_SBC82xx) += sbc82xx.o ++obj-$(CONFIG_IOMEGA8241) += iomega8241.o + obj-$(CONFIG_SPRUCE) += spruce.o + obj-$(CONFIG_LITE5200) += lite5200.o + obj-$(CONFIG_EV64360) += ev64360.o +--- linux-2.6.15.orig/arch/ppc/platforms/iomega8241.h 1969-12-31 16:00:00.000000000 -0800 ++++ linux-2.6.15/arch/ppc/platforms/iomega8241.h 2008-01-01 22:12:32.365126129 -0800 +@@ -0,0 +1,66 @@ ++/* ++ * arch/ppc/platforms/iomega8241.h ++ * ++ * The Iomega StorCenter Network Hard Drive platform is based on the ++ * original sandpoint test platform. That GNU copyright information ++ * is reproduced below: ++ * ++ * Board setup routines for the Motorola SPS Sandpoint Test Platform. ++ * ++ * Author: Mark A. Greer ++ * mgreer@mvista.com ++ * ++ * 2000-2003 (c) MontaVista Software, Inc. This file is licensed under ++ * the terms of the GNU General Public License version 2. This program ++ * is licensed "as is" without any warranty of any kind, whether express ++ * or implied. ++ */ ++ ++#ifndef __PPC_PLATFORMS_IOMEGA8241_H ++#define __PPC_PLATFORMS_IOMEGA8241_H ++ ++#include <asm/ppcboot.h> ++#include <linux/config.h> ++ ++/* ++ * G2 Configuration: ++ * ++ * DEVICE IDSEL INTERRUPT NUMBER ++ * AN983B AD12 IRQ0 ++ * IDE Via DS6410 AD13 IRQ1 ++ * NEC USB uPD720101 AD14 IRQ2,3,4 ++ */ ++ ++#define IDE_INTRUPT 1 ++ ++/* ++ * The sandpoint boards have processor modules that either have an 8240 or ++ * an MPC107 host bridge on them. These bridges have an IDSEL line that allows ++ * them to respond to PCI transactions as if they were a normal PCI devices. ++ * However, the processor on the processor side of the bridge can not reach ++ * out onto the PCI bus and then select the bridge or bad things will happen ++ * (documented in the 8240 and 107 manuals). ++ * Because of this, we always skip the bridge PCI device when accessing the ++ * PCI bus. The PCI slot that the bridge occupies is defined by the macro ++ * below. ++ */ ++#define IOMEGA8241_HOST_BRIDGE_IDSEL 12 ++ ++void board_find_bridges(void); ++void iomega8241_fix_uart(void); ++/* ++ * Serial defines. ++ */ ++#define IOMEGA8241_SERIAL_0 0xFDF04500 ++#define IOMEGA8241_SERIAL_1 0xFDF04600 ++ ++#define RS_TABLE_SIZE 4 ++ ++/* Rate for the 1.8432 Mhz clock for the onboard serial chip */ ++#define BASE_BAUD ( 100000000 / 16 ) /* 100Mhz speed, divided by 16 ++ to make the output freqency*/ ++#define UART_CLK 1843200 ++ ++#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST) ++ ++#endif /* __PPC_PLATFORMS_IOMEGA8241_H */ +--- linux-2.6.15.orig/arch/ppc/syslib/Makefile 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/arch/ppc/syslib/Makefile 2008-01-01 22:12:32.365126129 -0800 +@@ -71,6 +71,7 @@ + obj-$(CONFIG_PRPMC800) += open_pic.o pci_auto.o + obj-$(CONFIG_RADSTONE_PPC7D) += pci_auto.o + obj-$(CONFIG_SANDPOINT) += pci_auto.o todc_time.o ++obj-$(CONFIG_IOMEGA8241) += pci_auto.o + obj-$(CONFIG_SBC82xx) += todc_time.o + obj-$(CONFIG_SPRUCE) += cpc700_pic.o pci_auto.o \ + todc_time.o +--- linux-2.6.15.orig/arch/ppc/syslib/mpc10x_common.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/arch/ppc/syslib/mpc10x_common.c 2008-01-01 22:12:32.365126129 -0800 +@@ -35,6 +35,10 @@ + #include <asm/mpc10x.h> + #include <asm/ppc_sys.h> + ++#ifdef CONFIG_IOMEGA8241 ++#define NUM_8259_INTERRUPTS 0 ++#endif ++ + #ifdef CONFIG_MPC10X_OPENPIC + #ifdef CONFIG_EPIC_SERIAL_MODE + #define EPIC_IRQ_BASE (epic_serial_mode ? 16 : 5) +--- linux-2.6.15.orig/drivers/char/Kconfig 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/char/Kconfig 2008-01-01 22:12:32.369126358 -0800 +@@ -999,6 +999,25 @@ + The mmtimer device allows direct userspace access to the + Altix system timer. + ++config 8241EMI ++ tristate "EMI fixes for the 8241 processor" ++ depends on IOMEGA8241 ++ default y ++ help ++ By changing the ODCR value from 0xAB to 0x95, we are able to reduce ++ the EMI along the PCI and MEMORY buses. ++ ++ msb 7 1 Controls the drive strength of DRV_PCI (40ohm) ++ 6 0 reserved ++ 5-4 01 Controls the drive strength of SDRAM_CLK (40ohm) ++ 3-2 01 Controls the drive strength of PCI_CLK and ++ PCI_CLK_SYNC_OUT (40ohm) ++ 1-0 01 Controls the drive strength of SDRAM_CLK and ++ SDRAM_SYNC_OUT (40ohm) ++ ++ See table 4-19 on page 4-22 of the MPC8245 Integrated Processor ++ User's Manual for details on these registers. ++ + source "drivers/char/tpm/Kconfig" + + config TELCLOCK +--- linux-2.6.15.orig/drivers/char/Makefile 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/char/Makefile 2008-01-01 22:12:32.369126358 -0800 +@@ -48,6 +48,7 @@ + obj-$(CONFIG_VIOTAPE) += viotape.o + obj-$(CONFIG_HVCS) += hvcs.o + obj-$(CONFIG_SGI_MBCS) += mbcs.o ++obj-$(CONFIG_8241EMI) += emiregs.o + + obj-$(CONFIG_PRINTER) += lp.o + obj-$(CONFIG_TIPAR) += tipar.o +--- linux-2.6.15.orig/drivers/char/emiregs.c 1969-12-31 16:00:00.000000000 -0800 ++++ linux-2.6.15/drivers/char/emiregs.c 2008-01-01 22:12:32.369126358 -0800 +@@ -0,0 +1,68 @@ ++#include <linux/init.h> ++#include <linux/module.h> ++ ++MODULE_LICENSE ("GPL"); ++ ++/* ++ The following CONFIG_READ_BYTE and CONFIG_WRITE_BYTE ++ functions were taken from u-boot ++ ++ By changing the ODCR value from 0xAB to 0x95, we are able to reduce ++ the EMI along the PCI and MEMORY buses. ++ ++ msb 7 1 Controls the drive strength of DRV_PCI (40ohm) ++ 6 0 reserved ++ 5-4 01 Controls the drive strength of SDRAM_CLK (40ohm) ++ 3-2 01 Controls the drive strength of PCI_CLK and ++ PCI_CLK_SYNC_OUT (40ohm) ++ 1-0 01 Controls the drive strength of SDRAM_CLK and ++ SDRAM_SYNC_OUT (40ohm) ++ ++ See table 4-19 on page 4-22 of the MPC8245 Integrated Processor ++ User's Manual for details on these registers. ++*/ ++#define CONFIG_ADDR 0xfec00000 ++#define CONFIG_DATA 0xfee00000 ++ ++#define CONFIG_READ_BYTE( addr, reg ) \ ++ __asm__ ( \ ++ " stwbrx %1, 0, %2\n \ ++ sync\n \ ++ lbz %0, %4(%3)\n \ ++ sync " \ ++ : "=r" (reg) \ ++ : "r" ((addr) & ~3), "r" (CONFIG_ADDR), \ ++ "b" (CONFIG_DATA), "n" ((addr) & 3)); ++ ++#define CONFIG_WRITE_BYTE( addr, data ) \ ++ __asm__ __volatile__( \ ++ " stwbrx %1, 0, %0\n \ ++ sync\n \ ++ stb %3, %4(%2)\n \ ++ sync " \ ++ : /* no output */ \ ++ : "r" (CONFIG_ADDR), "r" ((addr) & ~3), \ ++ "b" (CONFIG_DATA), "r" (data), \ ++ "n" ((addr) & 3)); ++ ++ ++static int emiregs_init (void) ++ { ++ u_long val, val2; ++ CONFIG_READ_BYTE (0x80000073, val); ++ CONFIG_WRITE_BYTE (0x80000073, 0x95); ++ CONFIG_READ_BYTE (0x80000073, val2); ++ ++ printk (KERN_INFO "8241 ODCR: changed from 0x%02lx, to 0x%02lx\n", val, val2); ++ ++ return 0; ++ } ++ ++static void emiregs_exit (void) ++ { ++ printk (KERN_INFO "emiregs module exitting\n"); ++ return; ++ } ++ ++module_init (emiregs_init); ++module_exit (emiregs_exit); +--- linux-2.6.15.orig/drivers/char/rtc.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/char/rtc.c 2008-01-01 22:12:32.369126358 -0800 +@@ -514,9 +514,16 @@ + } + case RTC_RD_TIME: /* Read the time/date from RTC */ + { ++#ifdef CONFIG_IOMEGA8241 ++ unsigned long usi_time; ++ usi_time = ds1337_get_time(); ++ to_tm(usi_time,wtime); ++ break; ++#else + memset(&wtime, 0, sizeof(struct rtc_time)); + rtc_get_rtc_time(&wtime); + break; ++#endif /* CONFIG_IOMEGA8241 */ + } + case RTC_SET_TIME: /* Set the RTC */ + { +@@ -558,7 +565,7 @@ + + if ((yrs -= epoch) > 255) /* They are unsigned */ + return -EINVAL; +- ++#ifndef CONFIG_IOMEGA8241 + spin_lock_irq(&rtc_lock); + #ifdef CONFIG_MACH_DECSTATION + real_yrs = yrs; +@@ -614,6 +621,11 @@ + + spin_unlock_irq(&rtc_lock); + return 0; ++#else /* CONFIG_IOMEGA8241 */ ++ /* next is the forth API provided by ds1337.c USI-SS */ ++ ds1337_usi_set_time(yrs,mon,day,hrs,min,sec); ++ break; ++#endif /* CONFIG_IOMEGA8241 */ + } + #ifdef RTC_IRQ + case RTC_IRQP_READ: /* Read the periodic IRQ rate. */ +--- linux-2.6.15.orig/drivers/i2c/busses/i2c-mpc.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/i2c/busses/i2c-mpc.c 2008-01-01 22:12:32.369126358 -0800 +@@ -285,7 +285,11 @@ + .algo = &mpc_algo, + .class = I2C_CLASS_HWMON, + .timeout = 1, ++#ifdef CONFIG_IOMEGA8241 ++ .retries = 400 ++#else + .retries = 1 ++#endif /* CONFIG_IOMEGA8241 */ + }; + + static int fsl_i2c_probe(struct platform_device *pdev) +--- linux-2.6.15.orig/drivers/ide/pci/via82cxxx.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/ide/pci/via82cxxx.c 2008-01-02 08:21:42.876113109 -0800 +@@ -305,6 +305,12 @@ + */ + + pci_read_config_byte(dev, VIA_IDE_ENABLE, &v); ++#ifdef CONFIG_IOMEGA8241 ++ if(via_config->id == PCI_DEVICE_ID_VIA_6410) { ++ pci_write_config_byte(dev, VIA_IDE_ENABLE, v | 0x3); ++ } ++#endif ++ + + /* + * Set up FIFO sizes and thresholds. +@@ -485,7 +492,11 @@ + .channels = 2, + .autodma = AUTODMA, + .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ++#ifdef CONFIG_IOMEGA8241 ++ .bootable = NEVER_BOARD, ++#else + .bootable = ON_BOARD, ++#endif + } + }; + +--- linux-2.6.15.orig/drivers/mtd/maps/Kconfig 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/mtd/maps/Kconfig 2008-01-01 22:12:32.369126358 -0800 +@@ -639,5 +639,10 @@ + + This selection automatically selects the map_ram driver. + +-endmenu ++config MTD_IOMEGA8241 ++ tristate "Map driver for the Iomega 8241 StorCenter board" ++ depends on IOMEGA8241 ++ help ++ Map driver for the Iomega StorCenter Network Hard Drive. + ++endmenu +--- linux-2.6.15.orig/drivers/mtd/maps/Makefile 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/mtd/maps/Makefile 2008-01-01 22:12:32.369126358 -0800 +@@ -68,6 +68,7 @@ + obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o + obj-$(CONFIG_MTD_DMV182) += dmv182.o + obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o ++obj-$(CONFIG_MTD_IOMEGA8241) += iomega8241_mtd.o + obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o + obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o + obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o +--- linux-2.6.15.orig/drivers/mtd/maps/iomega8241_mtd.c 1969-12-31 16:00:00.000000000 -0800 ++++ linux-2.6.15/drivers/mtd/maps/iomega8241_mtd.c 2008-01-01 22:12:32.369126358 -0800 +@@ -0,0 +1,102 @@ ++/* ++ * drivers/mtd/maps/iomega8241_mtd.c ++ * ++ * Iomega Corporation ++ * ++ * Flash mapping for the Iomega StorCenter Network Hard Drive ++ * ++ * This module is based on the mpc1211.c file created by ++ * Saito.K & Jeanne <ksaito@interface.co.jp> ++ * ++ */ ++ ++#include <linux/module.h> ++#include <linux/types.h> ++#include <linux/kernel.h> ++#include <asm/io.h> ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/map.h> ++#include <linux/config.h> ++#include <linux/mtd/partitions.h> ++ ++#include <asm/immap_cpm2.h> ++ ++static struct mtd_info *iomegamtd; ++static struct mtd_partition *parsed_parts; ++ ++struct map_info iomega8241_flash_map = { ++ .name = "Flash", ++ .phys = 0xFF800000, ++ .size = 0x800000, ++ .bankwidth = 1, ++}; ++ ++static struct mtd_partition iomega8241_partitions[] = { ++ { ++ .name = "kernel", ++ /* 1507328 bytes: kernel space */ ++ .size = 0x00170000, ++ .offset = 0, ++ }, { ++ .name = "filesystem", ++ /* 5832704 bytes: root partition */ ++ .size = 0x00590000, ++ /* start is FF970000 */ ++ .offset = MTDPART_OFS_APPEND, ++ }, { ++ .name = "bootloader", ++ /* 262144 bytes for u-boot */ ++ .size = 0x00040000, ++ /* start is FFF00000 */ ++ .offset = MTDPART_OFS_APPEND, ++ }, { ++ .name = "sysconfig", ++ /* 786432 bytes: sysconf partition */ ++ .size = 0x000C0000, ++ /* start is FFF40000 */ ++ .offset = MTDPART_OFS_APPEND, ++ } ++}; ++ ++static int __init ++init_iomega8241_flash(void) ++{ ++ int nr_parts; ++ ++ iomega8241_flash_map.virt = ioremap(iomega8241_flash_map.phys, iomega8241_flash_map.size); ++ ++ simple_map_init(&iomega8241_flash_map); ++ ++ printk("Iomega8241: Probing for flash...\n"); ++ iomegamtd = do_map_probe("cfi_probe", &iomega8241_flash_map); ++ if (!iomegamtd) { ++ printk(KERN_NOTICE "Flash chips not detected at either possible location.\n"); ++ return -ENXIO; ++ } ++ printk("Iomega8241: Flash found at location 0x%x\n", iomega8241_flash_map.phys); ++ iomegamtd->owner = THIS_MODULE; ++ ++ parsed_parts = iomega8241_partitions; ++ nr_parts = ARRAY_SIZE(iomega8241_partitions); ++ ++ add_mtd_partitions(iomegamtd, parsed_parts, nr_parts); ++ return 0; ++} ++ ++static void __exit ++cleanup_iomega8241_flash(void) ++{ ++ if (parsed_parts) ++ del_mtd_partitions(iomegamtd); ++ else ++ del_mtd_device(iomegamtd); ++ map_destroy(iomegamtd); ++} ++ ++module_init(init_iomega8241_flash); ++module_exit(cleanup_iomega8241_flash); ++ ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Anthony Russello <russello@iomega.com>"); ++MODULE_DESCRIPTION("Flash mapping for the Iomega StorCenter Network Hard Drive"); +--- linux-2.6.15.orig/drivers/net/wireless/prism54/islpci_dev.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/net/wireless/prism54/islpci_dev.c 2008-01-01 22:12:32.369126358 -0800 +@@ -874,6 +874,7 @@ + + /* select the firmware file depending on the device id */ + switch (pdev->device) { ++ case 0x3873: + case 0x3877: + strcpy(priv->firmware, ISL3877_IMAGE_FILE); + break; +--- linux-2.6.15.orig/drivers/net/wireless/prism54/islpci_hotplug.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/net/wireless/prism54/islpci_hotplug.c 2008-01-01 22:12:32.373126589 -0800 +@@ -70,6 +70,13 @@ + PCI_ANY_ID, PCI_ANY_ID, + 0, 0, 0 + }, ++ /* Intersil PRISM NetGate 2511 MP PLUS 100mW */ ++ { ++ 0x1260, 0x3873, ++ PCI_ANY_ID, PCI_ANY_ID, ++ 0, 0, 0 ++ }, ++ + + /* End of list */ + {0,0,0,0,0,0,0} +--- linux-2.6.15.orig/drivers/pci/probe.c 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/drivers/pci/probe.c 2008-01-01 22:12:32.373126589 -0800 +@@ -596,6 +596,20 @@ + pci_read_config_dword(dev, PCI_CLASS_REVISION, &class); + class >>= 8; /* upper 3 bytes */ + dev->class = class; ++#ifdef CONFIG_IOMEGA8241 ++ /* ++ * The VIA VT6410 used on the Iomega StorCenter Network Hard Drive reports ++ * with a class of 0x01040 (PCI_CLASS_STORAGE_RAID). ++ * ++ * The following correction allows it to be used as a standard PCI IDE ++ * controller (0x0101) ++ */ ++ if((dev->vendor==PCI_VENDOR_ID_VIA)&&(dev->device==PCI_DEVICE_ID_VIA_6410)) { ++ dev->class=0x01018f; ++ printk("PCI: Adjustments for the VIA VT6410 controller have been made\n"); ++ } ++#endif /* CONFIG_IOMEGA8241 */ ++ + class >>= 8; + + pr_debug("PCI: Found %s [%04x/%04x] %06x %02x\n", pci_name(dev), +--- linux-2.6.15.orig/include/asm-ppc/mpc10x.h 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/include/asm-ppc/mpc10x.h 2008-01-01 22:12:32.373126589 -0800 +@@ -76,7 +76,11 @@ + + #define MPC10X_MAPB_PCI_INTACK_ADDR 0xfef00000 + #define MPC10X_MAPB_PCI_IO_START 0x00000000 ++#ifdef CONFIG_IOMEGA8241 ++#define MPC10X_MAPB_PCI_IO_END 0xFFFF ++#else + #define MPC10X_MAPB_PCI_IO_END (0x00c00000 - 1) ++#endif /* CONFIG_IOMEGA8241 */ + #define MPC10X_MAPB_PCI_MEM_START 0x80000000 + #define MPC10X_MAPB_PCI_MEM_END (0xc0000000 - 1) + +@@ -157,7 +161,12 @@ + */ + extern unsigned long ioremap_base; + #define MPC10X_MAPA_EUMB_BASE (ioremap_base - MPC10X_EUMB_SIZE) ++ ++#ifdef CONFIG_IOMEGA8241 ++#define MPC10X_MAPB_EUMB_BASE 0xFDF00000 ++#else + #define MPC10X_MAPB_EUMB_BASE MPC10X_MAPA_EUMB_BASE ++#endif + + enum ppc_sys_devices { + MPC10X_IIC1, +--- linux-2.6.15.orig/include/asm-ppc/serial.h 2006-01-02 19:21:10.000000000 -0800 ++++ linux-2.6.15/include/asm-ppc/serial.h 2008-01-01 22:12:32.373126589 -0800 +@@ -38,6 +38,8 @@ + #include <asm/mpc85xx.h> + #elif defined(CONFIG_RADSTONE_PPC7D) + #include <platforms/radstone_ppc7d.h> ++#elif defined(CONFIG_IOMEGA8241) ++#include <platforms/iomega8241.h> + #else + + /* diff --git a/packages/linux/linux-storcenter_2.6.15.7.bb b/packages/linux/linux-storcenter_2.6.15.7.bb new file mode 100644 index 0000000000..4895b2174e --- /dev/null +++ b/packages/linux/linux-storcenter_2.6.15.7.bb @@ -0,0 +1,36 @@ +DESCRIPTION = "Linux Kernel for the Iomega storcenter platform" +SECTION = "kernel" +LICENSE = "GPL" +DEPENDS = "u-boot-utils-native" +PR = "r1" + +COMPATIBLE_MACHINE = "storcenter" + +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \ + file://kernel.patch-${PV};patch=1 \ + file://defconfig-${PV} " + +S = "${WORKDIR}/linux-${PV}" + +inherit kernel + +export ARCH = "ppc" + +KERNEL_IMAGETYPE = "uImage" +KERNEL_OUTPUT = "arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE}" + +do_configure() { + install -m 644 ${WORKDIR}/defconfig-${PV} ${S}/.config + make ARCH=${ARCH} oldconfig +} + +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME} +} + +do_deploy[dirs] = "${S}" + +addtask deploy before do_build after do_compile + + diff --git a/packages/meta/openprotium-packages.bb b/packages/meta/openprotium-packages.bb index 3df2f5e3b2..7d66ee5d61 100644 --- a/packages/meta/openprotium-packages.bb +++ b/packages/meta/openprotium-packages.bb @@ -30,13 +30,14 @@ inherit meta # flac \ # gphoto2 \ # gdb \ -# glib-2.0 \ # lirc \ # masqmail \ # wakelan \ # wireless-tools \ # wpa-supplicant \ +# openldap \ # bluez-utils-nodbus \ +# lcdproc \ # libxml2 \ # libdvb \ # madwifi-ng \ @@ -53,7 +54,13 @@ inherit meta # samba \ # sane-backends \ # vsftpd \ +# syslog-ng \ # zd1211 \ +# cdparanoia \ +# litestream \ +# pvrusb2-mci \ +# pwc \ +# fetchmail \ OPENPROTIUM_PACKAGES = "\ alsa-lib \ @@ -70,7 +77,6 @@ OPENPROTIUM_PACKAGES = "\ bridge-utils \ bzip2 \ ccxstream \ - cdparanoia \ cdstatus \ coreutils \ cron \ @@ -85,7 +91,6 @@ OPENPROTIUM_PACKAGES = "\ e2fsprogs-libs \ expat \ ez-ipupdate \ - fetchmail \ file \ findutils \ flex \ @@ -94,6 +99,7 @@ OPENPROTIUM_PACKAGES = "\ gawk \ gcc \ gdbm \ + glib-2.0 \ gnu-config \ grep \ gtk-doc \ @@ -105,8 +111,6 @@ OPENPROTIUM_PACKAGES = "\ ircp \ joe \ jpeg \ - lcdproc \ - less \ libao \ libid3tag \ liblockfile \ @@ -119,7 +123,6 @@ OPENPROTIUM_PACKAGES = "\ libupnp \ libusb \ libvorbis \ - litestream \ lrzsz \ lsof \ lvm2 \ @@ -144,7 +147,6 @@ OPENPROTIUM_PACKAGES = "\ nmap \ ntp \ openobex-apps \ - openldap \ openntpd \ openobex \ openssh \ @@ -156,8 +158,6 @@ OPENPROTIUM_PACKAGES = "\ pkgconfig \ ppp \ procps \ - pvrusb2-mci \ - pwc \ quilt \ rng-tools \ rsync \ @@ -169,7 +169,6 @@ OPENPROTIUM_PACKAGES = "\ strace \ streamripper \ sysfsutils \ - syslog-ng \ tar \ thttpd \ tiff \ @@ -178,7 +177,6 @@ OPENPROTIUM_PACKAGES = "\ util-linux \ vim \ vlan \ - watchdog \ wget \ zip \ zlib \ diff --git a/packages/midpath/midpath-cldc-native_0.1.bb b/packages/midpath/midpath-cldc-native_0.1.bb index 27700d2e61..30f67854d4 100644 --- a/packages/midpath/midpath-cldc-native_0.1.bb +++ b/packages/midpath/midpath-cldc-native_0.1.bb @@ -4,9 +4,6 @@ inherit native require midpath-cldc_${PV}.bb -PROVIDES = "virtual/cldc-api-1.1-native" -RPROVIDES = " " - PACKAGES = " " do_install() { diff --git a/packages/midpath/midpath-cldc-x11_0.1.bb b/packages/midpath/midpath-cldc-x11_0.1.bb index 9db0c4a686..7c92621c36 100644 --- a/packages/midpath/midpath-cldc-x11_0.1.bb +++ b/packages/midpath/midpath-cldc-x11_0.1.bb @@ -1,7 +1,7 @@ require midpath.inc -DEPENDS += " virtual/libx11 virtual/cldc-api-1.1" +DEPENDS += "virtual/libx11 midpath-cldc" do_configure() { diff --git a/packages/midpath/midpath-cldc_0.1.bb b/packages/midpath/midpath-cldc_0.1.bb index 51a1314467..7aeefa5264 100644 --- a/packages/midpath/midpath-cldc_0.1.bb +++ b/packages/midpath/midpath-cldc_0.1.bb @@ -1,9 +1,6 @@ require midpath.inc -PROVIDES = "virtual/cldc-api-1.1" -RPROVIDES = "virtual/cldc-api-1.1" - do_compile() { mkdir -p ${S}/dist @@ -18,21 +15,21 @@ cd ${S}/src/cldc-glue make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -sourcepath ${S}/src/cldc-glue -source 1.3 -target 1.1" make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes # Make a jar -${FASTJAR_CMD} cvf ${S}/dist/cldc1.1.jar -C ${S}/external/cldc1.1/classes . +${FASTJAR_CMD} cvf ${S}/dist/midpath-cldc1.1.jar -C ${S}/external/cldc1.1/classes . } do_install() { - install -d ${D}${datadir}/java - install -m 0644 dist/cldc1.1.jar ${D}${datadir}/java + install -d ${D}${datadir}/midpath-cldc + install -m 0644 dist/midpath-cldc1.1.jar ${D}${datadir}/midpath-cldc } do_stage() { - install -d ${STAGING_DATADIR}/java - install -m 0644 dist/cldc1.1.jar ${STAGING_DATADIR}/java + install -d ${STAGING_DATADIR}/midpath-cldc + install -m 0644 dist/midpath-cldc1.1.jar ${STAGING_DATADIR}/midpath-cldc } PACKAGES = "${PN}" -FILES_${PN} = "${datadir}/java/cldc1.1.jar" +FILES_${PN} = "${datadir}/midpath-cldc/midpath-cldc1.1.jar" diff --git a/packages/midpath/midpath.inc b/packages/midpath/midpath.inc index 33793bffd0..4bc3b71598 100644 --- a/packages/midpath/midpath.inc +++ b/packages/midpath/midpath.inc @@ -9,14 +9,14 @@ SRC_URI = "http://downloads.sourceforge.net/midpath/midpath-${PV}.tar.gz" S = "${WORKDIR}/midpath-${PV}" -DEPENDS = "ecj-native fastjar-native classpath-minimal" +DEPENDS = "virtual/javac-native fastjar-native classpath" -JAVAC_CMD = "${STAGING_BINDIR_NATIVE}/ecj" +JAVAC_CMD = "${STAGING_BINDIR_NATIVE}/javac" FASTJAR_CMD = "${STAGING_BINDIR_NATIVE}/fastjar" JAVA_PATH = "${STAGING_DATADIR}/java" -GNU_CLASSPATH_PATH = "${JAVA_PATH}/classpath-minimal/glibj.zip" +GNU_CLASSPATH_PATH = "${JAVA_PATH}/classpath/glibj.zip" -CLDC_PATH = ${JAVA_PATH}/cldc1.1.jar +CLDC_PATH = ${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar diff --git a/packages/musicbrainz/libmusicbrainz_2.1.5.bb b/packages/musicbrainz/libmusicbrainz_2.1.5.bb new file mode 100644 index 0000000000..7ab0997218 --- /dev/null +++ b/packages/musicbrainz/libmusicbrainz_2.1.5.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. \ +It allows you to access the data held on the MusicBrainz server." +HOMEPAGE = "http://musicbrainz.org" +LICENSE = "LGPL" +DEPENDS = "expat" + +SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} diff --git a/packages/musicbrainz/libmusicbrainz_3.0.1.bb b/packages/musicbrainz/libmusicbrainz_3.0.1.bb index 51717f052d..e01695eb3d 100644 --- a/packages/musicbrainz/libmusicbrainz_3.0.1.bb +++ b/packages/musicbrainz/libmusicbrainz_3.0.1.bb @@ -4,11 +4,11 @@ DESCRIPTION = "The MusicBrainz client is a library which can be built into other It allows you to access the data held on the MusicBrainz server." HOMEPAGE = "http://musicbrainz.org" LICENSE = "LGPL" -DEPENDS = "expat" +DEPENDS = "expat neon" SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz" -inherit autotools pkgconfig +inherit cmake pkgconfig do_stage() { autotools_stage_all diff --git a/packages/ncurses/ncurses.inc b/packages/ncurses/ncurses.inc index 027f037ee5..2c6cfd05b0 100644 --- a/packages/ncurses/ncurses.inc +++ b/packages/ncurses/ncurses.inc @@ -1,23 +1,14 @@ DESCRIPTION = "Ncurses library" HOMEPAGE = "http://www.gnu.org/software/ncurses/ncurses.html" -LICENSE = "MIT" SECTION = "libs" +LICENSE = "MIT" DEPENDS = "ncurses-native" -PACKAGES_prepend = "ncurses-tools " -PACKAGES_append = " ncurses-terminfo" -FILES_ncurses_append = " ${datadir}/tabset" RSUGGESTS_${PN} = "ncurses-terminfo" RPROVIDES = "libncurses5" inherit autotools -# This keeps only tput/tset in ncurses -# clear/reset are in already busybox -FILES_ncurses-tools = "${bindir}/tic ${bindir}/toe ${bindir}/infotocap ${bindir}/captoinfo ${bindir}/infocmp ${bindir}/clear.${PN} ${bindir}/reset.${PN} ${bindir}/tack " -FILES_ncurses-terminfo = "${datadir}/terminfo" -FILES_${PN} = "${bindir}/tput ${bindir}/tset ${libdir}/lib*.so.* usr/share/tabset etc/terminfo" - -PARALLEL_MAKE="" +PARALLEL_MAKE = "" EXTRA_OECONF = "--with-shared \ --without-profile \ @@ -88,3 +79,12 @@ pkg_prerm_ncurses-tools () { update-alternatives --remove clear clear.${PN} update-alternatives --remove reset reset.${PN} } + +PACKAGES_prepend = "ncurses-tools " +PACKAGES_append = " ncurses-terminfo" +FILES_ncurses_append = " ${datadir}/tabset" +# This keeps only tput/tset in ncurses +# clear/reset are in already busybox +FILES_ncurses-tools = "${bindir}/tic ${bindir}/toe ${bindir}/infotocap ${bindir}/captoinfo ${bindir}/infocmp ${bindir}/clear.${PN} ${bindir}/reset.${PN} ${bindir}/tack " +FILES_ncurses-terminfo = "${datadir}/terminfo" +FILES_${PN} = "${bindir}/tput ${bindir}/tset ${libdir}/lib*.so.* §{datadir}/tabset ${sysconfdir}/terminfo" diff --git a/packages/ncurses/ncurses_5.3.bb b/packages/ncurses/ncurses_5.3.bb index e023017f1a..0b0897a409 100644 --- a/packages/ncurses/ncurses_5.3.bb +++ b/packages/ncurses/ncurses_5.3.bb @@ -1,7 +1,7 @@ BaseV := "${PV}" SnapV := "20030906" PV = "${BaseV}.${SnapV}" -PR = "r1" +PR = "r2" SRC_URI = "${GNU_MIRROR}/ncurses/ncurses-${BaseV}.tar.gz \ file://${SnapV}.patch;patch=1 \ diff --git a/packages/ncurses/ncurses_5.4.bb b/packages/ncurses/ncurses_5.4.bb index ac125bf6fe..f361d745b3 100644 --- a/packages/ncurses/ncurses_5.4.bb +++ b/packages/ncurses/ncurses_5.4.bb @@ -1,4 +1,4 @@ -PR = "r10" +PR = "r11" SRC_URI = "${GNU_MIRROR}/ncurses/ncurses-${PV}.tar.gz \ file://visibility.patch;patch=1" diff --git a/packages/obsolete/classpath/.mtn2git_empty b/packages/obsolete/classpath/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/classpath/.mtn2git_empty diff --git a/packages/classpath/classpath-gtk_0.93.bb b/packages/obsolete/classpath/classpath-gtk_0.93.bb index a3b39d92f8..3c9f073e26 100644 --- a/packages/classpath/classpath-gtk_0.93.bb +++ b/packages/obsolete/classpath/classpath-gtk_0.93.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ cairo gconf libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ cairo gconf libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "classpath-common (>= ${PV})" RCONFLICTS_${PN} = "classpath-minimal" diff --git a/packages/classpath/classpath-gtk_cvs.bb b/packages/obsolete/classpath/classpath-gtk_cvs.bb index 18d79decae..4d4895a319 100644 --- a/packages/classpath/classpath-gtk_cvs.bb +++ b/packages/obsolete/classpath/classpath-gtk_cvs.bb @@ -6,7 +6,7 @@ SRCDATE_${PN} ?= "20070501" PV = "0.93+cvs${SRCDATE}" ### note from Laibsch: bug 2523 has information on how to build this package -DEPENDS = "glib-2.0 gtk+ cairo gconf ecj-native zip-native virtual/java-native libxtst" +DEPENDS = "glib-2.0 gtk+ cairo gconf virtual/javac-native zip-native virtual/java-native libxtst" RDEPENDS_${PN} = "classpath-common (>= ${PV})" RCONFLICTS_${PN} = "classpath-minimal" @@ -15,7 +15,7 @@ SRC_URI = "cvs://anonymous@cvs.savannah.gnu.org/sources/classpath;module=classpa S = "${WORKDIR}/classpath" -EXTRA_OECONF = "--with-ecj=${STAGING_BINDIR_NATIVE}/ecj --with-ecj-jar=${STAGING_BINDIR_NATIVE}/ecj.jar --disable-plugin --disable-dssi --disable-alsa" +EXTRA_OECONF = "--with-javac=${STAGING_BINDIR_NATIVE}/javac --with-ecj-jar=${STAGING_DATADIR_NATIVE}/ecj-bootstrap.jar --disable-plugin --disable-dssi --disable-alsa" do_stage() { install -d ${STAGING_INCDIR}/classpath diff --git a/packages/classpath/classpath-minimal-native_0.93.bb b/packages/obsolete/classpath/classpath-minimal-native_0.93.bb index 83cb60142c..e7862e6e3f 100644 --- a/packages/classpath/classpath-minimal-native_0.93.bb +++ b/packages/obsolete/classpath/classpath-minimal-native_0.93.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 libart-lgpl pango libxtst virtual/javac-native zip-native" PR = "r1" SRC_URI += "file://disable-automake-checks-v2.patch;patch=1" diff --git a/packages/classpath/classpath-minimal-native_0.95.bb b/packages/obsolete/classpath/classpath-minimal-native_0.95.bb index 28b25a7cb9..28b25a7cb9 100644 --- a/packages/classpath/classpath-minimal-native_0.95.bb +++ b/packages/obsolete/classpath/classpath-minimal-native_0.95.bb diff --git a/packages/classpath/classpath-minimal_0.90.bb b/packages/obsolete/classpath/classpath-minimal_0.90.bb index 8d9554c999..e006e23c32 100644 --- a/packages/classpath/classpath-minimal_0.90.bb +++ b/packages/obsolete/classpath/classpath-minimal_0.90.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "jikes-native zip-native" +DEPENDS = "virtual/javac-native zip-native" RDEPENDS_${PBN}-minimal = "${PBN}-common (>= ${PV})" RCONFLICTS_${PBN}-minimal = "${PBN}-gtk" diff --git a/packages/classpath/classpath-minimal_0.95.bb b/packages/obsolete/classpath/classpath-minimal_0.95.bb index bca7a46919..cb38710ac1 100644 --- a/packages/classpath/classpath-minimal_0.95.bb +++ b/packages/obsolete/classpath/classpath-minimal_0.95.bb @@ -11,13 +11,13 @@ S = "${WORKDIR}/classpath-${PV}" SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz" -DEPENDS = "ecj-native zip-native" +DEPENDS = "virtual/javac-native zip-native" inherit autotools EXTRA_OECONF = "--with-glibj \ - --with-ecj=${STAGING_BINDIR_NATIVE}/ecj \ + --with-javac=${STAGING_BINDIR_NATIVE}/javac \ --disable-alsa \ --disable-gconf-peer \ --disable-gtk-peer \ diff --git a/packages/obsolete/classpath/classpath.inc b/packages/obsolete/classpath/classpath.inc new file mode 100644 index 0000000000..d9498c99d5 --- /dev/null +++ b/packages/obsolete/classpath/classpath.inc @@ -0,0 +1,30 @@ +DESCRIPTION = "GNU Classpath standard Java libraries" +HOMEPAGE = "http://www.gnu.org/software/classpath/" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "Classpath" +PROVIDES = "classpath" +RPROVIDES = "classpath" + +SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \ + file://gconf_version.patch;patch=1 \ + file://fix-endian-arm-floats.patch;patch=1" + +inherit autotools + +do_stage() { + install -d ${STAGING_INCDIR}/classpath + install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/ +} + +do_install() { + autotools_do_install + mv ${D}${libdir}/security ${D}${libdir}/${PN} +} + +PACKAGES =+ "classpath-common classpath-examples classpath-tools" +FILES_classpath-common += "${datadir}/classpath/glibj.zip" +FILES_classpath-examples += "${datadir}/classpath/examples" +FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools" +FILES_classpath-dev += "${libdir}/*.so" +FILES_classpath-dbg += "${libdir}/classpath/.debug" diff --git a/packages/classpath/classpath_0.14.bb b/packages/obsolete/classpath/classpath_0.14.bb index e4d73bbd3a..a20aa73992 100644 --- a/packages/classpath/classpath_0.14.bb +++ b/packages/obsolete/classpath/classpath_0.14.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (${PV})" PR = "r2" diff --git a/packages/classpath/classpath_0.15.bb b/packages/obsolete/classpath/classpath_0.15.bb index e4d73bbd3a..a20aa73992 100644 --- a/packages/classpath/classpath_0.15.bb +++ b/packages/obsolete/classpath/classpath_0.15.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (${PV})" PR = "r2" diff --git a/packages/classpath/classpath_0.17.bb b/packages/obsolete/classpath/classpath_0.17.bb index e4d73bbd3a..a20aa73992 100644 --- a/packages/classpath/classpath_0.17.bb +++ b/packages/obsolete/classpath/classpath_0.17.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (${PV})" PR = "r2" diff --git a/packages/classpath/classpath_0.18.bb b/packages/obsolete/classpath/classpath_0.18.bb index 9b9e8c3451..8696501fcf 100644 --- a/packages/classpath/classpath_0.18.bb +++ b/packages/obsolete/classpath/classpath_0.18.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (>= ${PV})" PR = "r1" diff --git a/packages/classpath/classpath_0.19.bb b/packages/obsolete/classpath/classpath_0.19.bb index 9b9e8c3451..8696501fcf 100644 --- a/packages/classpath/classpath_0.19.bb +++ b/packages/obsolete/classpath/classpath_0.19.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (>= ${PV})" PR = "r1" diff --git a/packages/classpath/classpath_0.20.bb b/packages/obsolete/classpath/classpath_0.20.bb index 9b9e8c3451..8696501fcf 100644 --- a/packages/classpath/classpath_0.20.bb +++ b/packages/obsolete/classpath/classpath_0.20.bb @@ -1,6 +1,6 @@ require classpath.inc -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (>= ${PV})" PR = "r1" diff --git a/packages/classpath/classpath_cvs.bb b/packages/obsolete/classpath/classpath_cvs.bb index 9e5ac2f000..943af376a7 100644 --- a/packages/classpath/classpath_cvs.bb +++ b/packages/obsolete/classpath/classpath_cvs.bb @@ -7,7 +7,7 @@ PV = "0.20+cvs${SRCDATE}" DEFAULT_PREFERENCE = "-1" -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-common (>= ${PV})" SRC_URI = "cvs://anoncvs@cvs.gnu.org/cvsroot/classpath;method=pserver;rsh=ssh;module=classpath \ diff --git a/packages/obsolete/classpath/files/.mtn2git_empty b/packages/obsolete/classpath/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/classpath/files/.mtn2git_empty diff --git a/packages/classpath/files/disable-automake-checks-v2.patch b/packages/obsolete/classpath/files/disable-automake-checks-v2.patch index 0c1df1acae..0c1df1acae 100644 --- a/packages/classpath/files/disable-automake-checks-v2.patch +++ b/packages/obsolete/classpath/files/disable-automake-checks-v2.patch diff --git a/packages/classpath/files/disable-automake-checks.patch b/packages/obsolete/classpath/files/disable-automake-checks.patch index d6a55428ad..d6a55428ad 100644 --- a/packages/classpath/files/disable-automake-checks.patch +++ b/packages/obsolete/classpath/files/disable-automake-checks.patch diff --git a/packages/classpath/files/fix-endian-arm-floats.patch b/packages/obsolete/classpath/files/fix-endian-arm-floats.patch index a9af0611b2..a9af0611b2 100644 --- a/packages/classpath/files/fix-endian-arm-floats.patch +++ b/packages/obsolete/classpath/files/fix-endian-arm-floats.patch diff --git a/packages/classpath/files/gconf_version.patch b/packages/obsolete/classpath/files/gconf_version.patch index b1be1209a2..b1be1209a2 100644 --- a/packages/classpath/files/gconf_version.patch +++ b/packages/obsolete/classpath/files/gconf_version.patch diff --git a/packages/obsolete/jamvm/.mtn2git_empty b/packages/obsolete/jamvm/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/jamvm/.mtn2git_empty diff --git a/packages/obsolete/jamvm/files/.mtn2git_empty b/packages/obsolete/jamvm/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/jamvm/files/.mtn2git_empty diff --git a/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch b/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch new file mode 100644 index 0000000000..a41beee982 --- /dev/null +++ b/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch @@ -0,0 +1,12 @@ +--- jamvm-1.3.1.orig/src/jam.h 2005-07-17 23:53:34.000000000 +0200 ++++ jamvm-1.3.1/src/jam.h 2005-07-17 23:54:17.000000000 +0200 +@@ -548,7 +548,9 @@ + #endif + + /* default size of the Java stack */ ++#ifndef DEFAULT_STACK + #define DEFAULT_STACK 64*KB ++#endif + + /* size of emergency area - big enough to create + a StackOverflow exception */ diff --git a/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty b/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty diff --git a/packages/jamvm/jamvm-1.3.0/heap-size.patch b/packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch index 36d681889d..36d681889d 100644 --- a/packages/jamvm/jamvm-1.3.0/heap-size.patch +++ b/packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch diff --git a/packages/jamvm/jamvm_1.3.0.bb b/packages/obsolete/jamvm/jamvm_1.3.0.bb index ffdf74938f..ffdf74938f 100644 --- a/packages/jamvm/jamvm_1.3.0.bb +++ b/packages/obsolete/jamvm/jamvm_1.3.0.bb diff --git a/packages/jamvm/jamvm_1.3.1.bb b/packages/obsolete/jamvm/jamvm_1.3.1.bb index 20b1535707..20b1535707 100644 --- a/packages/jamvm/jamvm_1.3.1.bb +++ b/packages/obsolete/jamvm/jamvm_1.3.1.bb diff --git a/packages/jamvm/jamvm_1.3.2.bb b/packages/obsolete/jamvm/jamvm_1.3.2.bb index 9727fd6cda..9727fd6cda 100644 --- a/packages/jamvm/jamvm_1.3.2.bb +++ b/packages/obsolete/jamvm/jamvm_1.3.2.bb diff --git a/packages/jamvm/jamvm_1.4.1.bb b/packages/obsolete/jamvm/jamvm_1.4.1.bb index 9727fd6cda..9727fd6cda 100644 --- a/packages/jamvm/jamvm_1.4.1.bb +++ b/packages/obsolete/jamvm/jamvm_1.4.1.bb diff --git a/packages/obsolete/quilt/.mtn2git_empty b/packages/obsolete/quilt/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/quilt/.mtn2git_empty diff --git a/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty b/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty diff --git a/packages/quilt/quilt-0.39/non-gnu.patch b/packages/obsolete/quilt/quilt-0.39/non-gnu.patch index 8b07bc2923..8b07bc2923 100644 --- a/packages/quilt/quilt-0.39/non-gnu.patch +++ b/packages/obsolete/quilt/quilt-0.39/non-gnu.patch diff --git a/packages/quilt/quilt-0.39/nostrip.patch b/packages/obsolete/quilt/quilt-0.39/nostrip.patch index 4dedad96d4..4dedad96d4 100644 --- a/packages/quilt/quilt-0.39/nostrip.patch +++ b/packages/obsolete/quilt/quilt-0.39/nostrip.patch diff --git a/packages/quilt/quilt-native_0.39.bb b/packages/obsolete/quilt/quilt-native_0.39.bb index 7caa9f620c..7caa9f620c 100644 --- a/packages/quilt/quilt-native_0.39.bb +++ b/packages/obsolete/quilt/quilt-native_0.39.bb diff --git a/packages/quilt/quilt_0.39.bb b/packages/obsolete/quilt/quilt_0.39.bb index 5d8ae086c2..5d8ae086c2 100644 --- a/packages/quilt/quilt_0.39.bb +++ b/packages/obsolete/quilt/quilt_0.39.bb diff --git a/packages/quilt/quilt_0.39.inc b/packages/obsolete/quilt/quilt_0.39.inc index 4fbbb03316..4fbbb03316 100644 --- a/packages/quilt/quilt_0.39.inc +++ b/packages/obsolete/quilt/quilt_0.39.inc diff --git a/packages/openmoko2/settingsgui_0.7+0.8-beta.bb b/packages/openmoko2/settingsgui_0.7+0.8-beta.bb new file mode 100644 index 0000000000..502fad7309 --- /dev/null +++ b/packages/openmoko2/settingsgui_0.7+0.8-beta.bb @@ -0,0 +1,11 @@ +DESCRIPTION = "OpenMoko Settings GUI" +AUTHOR = "Kristian M." +SECTION = "openmoko/applications" +RDEPENDS = "python-pygtk python-subprocess python-threading" +LICENSE = "GPL" +PR = "r0" + +SRC_URI = "http://mput.de/~kristian/.openmoko/settingsgui-0.8-beta.tar.bz2" +S = "${WORKDIR}/settingsgui-0.8-beta" + +inherit distutils diff --git a/packages/openprotium-init/files/boot/disk b/packages/openprotium-init/files/boot/disk index b4bbaf1f3c..e1096e225a 100644 --- a/packages/openprotium-init/files/boot/disk +++ b/packages/openprotium-init/files/boot/disk @@ -25,9 +25,6 @@ then sleep=6 test "$sleep" -gt 0 && sleep "$sleep" else - # make the device links so turnup can use short disk names. - # probably only necessary on devfs based systems. - /etc/init.d/devices start scc -l redflash -f auto fi # diff --git a/packages/openprotium-init/files/functions b/packages/openprotium-init/files/functions index 25832cf3f9..2700551cc4 100644 --- a/packages/openprotium-init/files/functions +++ b/packages/openprotium-init/files/functions @@ -65,21 +65,13 @@ load_functions(){ # use this rather than hard-wiring the device because the partition # table can change - looking in /proc/mtd is more reliable. mtdev(){ - if test $(machine) = storcenter ; then - sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtd/\1!p' /proc/mtd - else sed -n 's!^\(mtd[0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/\1!p' /proc/mtd - fi } # # mtblockdev "name" # as mtdev but output the name of the block (not character) device mtblockdev(){ - if test "$(machine)" = storcenter ; then - sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock/\1!p' /proc/mtd - else sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock\1!p' /proc/mtd - fi } # # mtsize "name" diff --git a/packages/openprotium-init/files/initscripts/zleds b/packages/openprotium-init/files/initscripts/zleds new file mode 100644 index 0000000000..37adb8490e --- /dev/null +++ b/packages/openprotium-init/files/initscripts/zleds @@ -0,0 +1,29 @@ +#!/bin/sh +# +# This script is executed at the start and end of each run-level +# transition. It is the first 'stop' script and the last 'start' +# script. +# +# 'stop' indicates the start of a runlevel change +# 'start' at the end of the runlevel change - we are in the new +# runlevel. +# +# state outputs 'system', 'user' etc according the the nature of +# the runlevel it is passed (the *new* runlevel is used). +state(){ + case "$1" in + S|N) echo system;; + 0|6) echo shutdown;; + 1) echo singleuser;; + 2|3|4|5) echo user;; + *) echo "led change: $runlevel: runlevel unknown" >&2 + echo system;; + esac +} + +case "$1" in +start) scc -l blue -f auto;; +stop) scc -l redflash;; +*) echo "led change: $1: command ignored" >&2 + ;; +esac diff --git a/packages/openprotium-init/openprotium-init_0.10.bb b/packages/openprotium-init/openprotium-init_0.10.bb index 92c9d789cb..f8facbb36f 100644 --- a/packages/openprotium-init/openprotium-init_0.10.bb +++ b/packages/openprotium-init/openprotium-init_0.10.bb @@ -19,6 +19,7 @@ SRC_URI = "file://boot/flash \ file://initscripts/sysconfsetup \ file://initscripts/umountinitrd.sh \ file://initscripts/loadmodules.sh \ + file://initscripts/zleds \ file://functions \ file://modulefunctions \ file://conffiles \ @@ -35,7 +36,7 @@ SCRIPTS = "turnup reflash sysconf" BOOTSCRIPTS = "flash disk nfs network udhcpc.script" INITSCRIPTS = "syslog.buffer syslog.file syslog.network \ rmrecovery sysconfsetup umountinitrd.sh \ - fixfstab loadmodules.sh" + fixfstab loadmodules.sh zleds" # This just makes things easier... @@ -129,6 +130,8 @@ pkg_postinst_openprotium-init() { update-rc.d $opt syslog.file start 39 S . start 47 0 6 . update-rc.d $opt syslog.network start 44 S . start 39 0 6 . update-rc.d $opt rmrecovery start 99 1 2 3 4 5 . + update-rc.d $opt zleds start 99 1 2 3 4 5 . stop 5 0 1 2 3 4 5 6 . + } pkg_postrm_openprotium-init() { diff --git a/packages/pngcrush/.mtn2git_empty b/packages/pngcrush/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/pngcrush/.mtn2git_empty diff --git a/packages/pngcrush/pngcrush-native_1.6.4.bb b/packages/pngcrush/pngcrush-native_1.6.4.bb new file mode 100644 index 0000000000..4e119a167b --- /dev/null +++ b/packages/pngcrush/pngcrush-native_1.6.4.bb @@ -0,0 +1,9 @@ +require pngcrush_${PV}.bb + +inherit native + +S = "${WORKDIR}/pngcrush-${PV}" + +do_stage() { + install -m 755 ${S}/pngcrush ${STAGING_BINDIR}/ +} diff --git a/packages/pngcrush/pngcrush_1.6.4.bb b/packages/pngcrush/pngcrush_1.6.4.bb new file mode 100644 index 0000000000..9f0413a6cc --- /dev/null +++ b/packages/pngcrush/pngcrush_1.6.4.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Tool to optimize PNG images" +SECTION = "console/graphics" +HOMEPAGE = "http://pmt.sourceforge.net/pngcrush" + +SRC_URI = "${SOURCEFORGE_MIRROR}/pmt/pngcrush-${PV}.tar.gz" + +#DEPENDS += "libsdl-net smpeg" + +EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS}' LD='${CC}'" + +do_install () { + install -d ${D}${bindir} + install -m 755 ${PN} ${D}${bindir} +} diff --git a/packages/ppp-dialin/ppp-dialin_0.1.bb b/packages/ppp-dialin/ppp-dialin_0.1.bb index f0d410e455..6861d8ad44 100644 --- a/packages/ppp-dialin/ppp-dialin_0.1.bb +++ b/packages/ppp-dialin/ppp-dialin_0.1.bb @@ -2,7 +2,7 @@ SECTION = "console/network" DESCRIPTION = "Enables PPP dial-in through a serial connection" DEPENDS = "ppp" RDEPENDS = "ppp" -PR = "r4" +PR = "r5" LICENSE = "MIT" SRC_URI = "file://host-peer \ @@ -16,6 +16,7 @@ do_install() { install -m 0755 ${WORKDIR}/ppp-dialin ${D}${sbindir} } +PACKAGE_ARCH = "all" pkg_postinst() { if test "x$D" != "x"; then diff --git a/packages/ppp-dsl/files/.mtn2git_empty b/packages/ppp-dsl/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/ppp-dsl/files/.mtn2git_empty diff --git a/packages/ppp-dsl/dsl-provider b/packages/ppp-dsl/files/dsl-provider index 6feaf55752..6feaf55752 100644 --- a/packages/ppp-dsl/dsl-provider +++ b/packages/ppp-dsl/files/dsl-provider diff --git a/packages/ppp-dsl/ppp_on_boot.dsl b/packages/ppp-dsl/files/ppp_on_boot.dsl index f1d5183b38..f1d5183b38 100755 --- a/packages/ppp-dsl/ppp_on_boot.dsl +++ b/packages/ppp-dsl/files/ppp_on_boot.dsl diff --git a/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb b/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb deleted file mode 100644 index 216c87fffd..0000000000 --- a/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb +++ /dev/null @@ -1,5 +0,0 @@ -include ppp-dsl_0.1.bb - -RDEPENDS = "ppp rp-pppoe" - -S = "${WORKDIR}/ppp-dsl-0.1" diff --git a/packages/ppp-dsl/ppp-dsl_0.1.bb b/packages/ppp-dsl/ppp-dsl_0.1.bb index 8796da86da..8d63e8fc47 100644 --- a/packages/ppp-dsl/ppp-dsl_0.1.bb +++ b/packages/ppp-dsl/ppp-dsl_0.1.bb @@ -4,7 +4,7 @@ LICENSE = "PD" DEPENDS = "ppp rp-pppoe" RDEPENDS = "ppp rp-pppoe" RRECOMMENDS = "kernel-module-ppp-async kernel-module-ppp-generic kernel-module-slhc" -PR = "r2" +PR = "r5" SRC_URI = "file://dsl-provider \ file://ppp_on_boot.dsl" @@ -25,4 +25,6 @@ else fi } -CONFFILES_${PN}_nylon = "${sysconfdir}/ppp/peers/dsl-provider" +PACKAGE_ARCH = "all" + +CONFFILES_${PN} = "${sysconfdir}/ppp/peers/dsl-provider" diff --git a/packages/ppp/ppp-gprs/.mtn2git_empty b/packages/ppp/ppp-gprs/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/ppp/ppp-gprs/.mtn2git_empty diff --git a/packages/ppp/ppp-gprs/chats/.mtn2git_empty b/packages/ppp/ppp-gprs/chats/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/ppp/ppp-gprs/chats/.mtn2git_empty diff --git a/packages/ppp/ppp-gprs/chats/chat-gprs b/packages/ppp/ppp-gprs/chats/chat-gprs new file mode 100644 index 0000000000..b90e5ff2cf --- /dev/null +++ b/packages/ppp/ppp-gprs/chats/chat-gprs @@ -0,0 +1,9 @@ +# GPRS AP (Access Point) name should be passed via -T switch + +'' ATZ +OK AT+CGDCONT=1,"IP","\T" +# We setup profile #1 in the above command, and then use it to call +# GPRS. This is correct, but some buggy phone may parse only "ATD*99#" +OK "ATD*99***1#" +# OK "ATD*99#" +CONNECT '' diff --git a/packages/ppp/ppp-gprs/peers/.mtn2git_empty b/packages/ppp/ppp-gprs/peers/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/ppp/ppp-gprs/peers/.mtn2git_empty diff --git a/packages/ppp/ppp-gprs/peers/_gprs b/packages/ppp/ppp-gprs/peers/_gprs new file mode 100644 index 0000000000..cc316951a0 --- /dev/null +++ b/packages/ppp/ppp-gprs/peers/_gprs @@ -0,0 +1,68 @@ +# This is generic pppd config for GPRS connection +# To connect to specific provider, one +# more provider-specific config +# file is required, which will +# usually just set chat utility params +# to make connection and call this one. +# (And in most cases that will be symlink +# to a file with well-known settings). +# +# Usage: +# pppd <modem_device> call gprs call <country>-<provider> +# where /etc/ppp/peers/<country>-<provider> ends with line +# "call _gprs" +# Example: +# pppd /dev/rfcomm0 call ua-life +# Debugging PPP protocol problems: +# pppd /dev/rfcomm0 call ua-life debug nodetach +# +# By default, pppd will go to +# background once connection is +# established. 'nodetach' option will +# prevent this. If you want pppd to +# even establish connection in +# background, comment 'updetach' below. +# +# To finish connection, use Ctrl+C if +# 'nodetach' was used, or +# kill `head -1 /var/run/ppp-gprs.pid` +# otherwise. If you are sure there is +# only one pppd connection, you can use +# killall pppd + +## +## pppd options +## + +# create /var/run/ppp-gprs.pid +# with pid for this connection +linkname gprs +# Connect in foreground, but go +# to background after that +updetach + +# Treat port as a modem and use +# reasonable speed +modem +crtscts +115200 + +# Don't do CCP (compression) +# negotiation, some providers are +# rumored to be buggy with this, and +# most of the rest simply don't support. +noccp +# We don't request provider to auth +# to us +noauth +# Don't try to make up our IP address +noipdefault +# We want provider to supply us with +# IP addresses +ipcp-accept-remote +ipcp-accept-local +# Ask provider for DNS and use it +usepeerdns +# Route all Internet traffic thru +# this connection +defaultroute diff --git a/packages/ppp/ppp-gprs/peers/_gprs-ap-internet b/packages/ppp/ppp-gprs/peers/_gprs-ap-internet new file mode 100644 index 0000000000..d55eeb0266 --- /dev/null +++ b/packages/ppp/ppp-gprs/peers/_gprs-ap-internet @@ -0,0 +1,3 @@ +# -T options sets value of GPRS AP name. Change this for your cell provider +connect '/usr/sbin/chat -V -f /etc/ppp/chats/chat-gprs -T internet' +call gprs diff --git a/packages/ppp/ppp-gprs_1.0.bb b/packages/ppp/ppp-gprs_1.0.bb new file mode 100644 index 0000000000..2db6e808f4 --- /dev/null +++ b/packages/ppp/ppp-gprs_1.0.bb @@ -0,0 +1,22 @@ +SECTION = "console/network" +DESCRIPTION = "PPP scripts for easy GPRS connection" +LICENSE = "GPL" +RDEPENDS = "ppp" +PR = "r1" + +SRC_URI = "file://peers/* file://chats/*" + +do_install () { + install -d ${D}${sysconfdir}/ppp/peers/ + install -d ${D}${sysconfdir}/ppp/chats/ + install -m 0644 ${WORKDIR}/peers/* ${D}${sysconfdir}/ppp/peers/ + install -m 0644 ${WORKDIR}/chats/* ${D}${sysconfdir}/ppp/chats/ + + # Add links for providers sharing same well-known config + ln -sf _gprs-ap-internet ${D}${sysconfdir}/ppp/peers/ua-life +} + +PACKAGE_ARCH = "all" + +# In worst case, user may need to edit anything +CONFFILES_${PN} = "${sysconfdir}/ppp/peers/_gprs ${sysconfdir}/ppp/chats/chat-gprs" diff --git a/packages/python/python-2.5-manifest.inc b/packages/python/python-2.5-manifest.inc index f899eb2fea..165fd2ae60 100644 --- a/packages/python/python-2.5-manifest.inc +++ b/packages/python/python-2.5-manifest.inc @@ -1,5 +1,5 @@ ######################################################################################################################## -### AUTO-GENERATED by 'contrib/python/generate-manifest-2.5.py' [(C) 2002-2007 Michael 'Mickey' Lauer <mlauer@vanille-media.de>] on Fri Dec 7 11:51:27 2007 +### AUTO-GENERATED by '../../contrib/python/generate-manifest-2.5.py' [(C) 2002-2007 Michael 'Mickey' Lauer <mlauer@vanille-media.de>] on Sun Jan 13 16:02:57 2008 ### ### Visit THE Python for Embedded Systems Site => http://www.Vanille.de/projects/python.spy ### @@ -13,287 +13,287 @@ PROVIDES+="python-profile python-threading python-distutils python-textutils pyt PACKAGES="python-profile python-threading python-distutils python-textutils python-codecs python-ctypes python-pickle python-datetime python-core python-io python-compiler python-compression python-re python-xmlrpc python-terminal python-email python-image python-core-dbg python-resource python-devel python-math python-hotshot python-unixadmin python-syslog python-tkinter python-gdbm python-fcntl python-netclient python-pprint python-netserver python-curses python-smtpd python-html python-readline python-subprocess python-pydoc python-logging python-mailbox python-xml python-mime python-sqlite3 python-tests python-unittest python-stringold python-robotparser python-lib-old-and-deprecated python-compile python-debugger python-shell python-bsddb python-mmap python-zlib python-db python-crypt python-idle python-lang python-audio " DESCRIPTION_python-profile="Python Basic Profiling Support" -PR_python-profile="ml5" +PR_python-profile="ml6" RDEPENDS_python-profile="python-core" FILES_python-profile="${libdir}/python2.5/profile.* ${libdir}/python2.5/pstats.* " DESCRIPTION_python-threading="Python Threading & Synchronization Support" -PR_python-threading="ml5" +PR_python-threading="ml6" RDEPENDS_python-threading="python-core python-lang" FILES_python-threading="${libdir}/python2.5/_threading_local.* ${libdir}/python2.5/dummy_thread.* ${libdir}/python2.5/dummy_threading.* ${libdir}/python2.5/mutex.* ${libdir}/python2.5/threading.* ${libdir}/python2.5/Queue.* " DESCRIPTION_python-distutils="Python Distribution Utilities" -PR_python-distutils="ml5" +PR_python-distutils="ml6" RDEPENDS_python-distutils="python-core" FILES_python-distutils="${libdir}/python2.5/config ${libdir}/python2.5/distutils " DESCRIPTION_python-textutils="Python Option Parsing, Text Wrapping and Comma-Separated-Value Support" -PR_python-textutils="ml5" +PR_python-textutils="ml6" RDEPENDS_python-textutils="python-core python-io python-re python-stringold" FILES_python-textutils="${libdir}/python2.5/lib-dynload/_csv.so ${libdir}/python2.5/csv.* ${libdir}/python2.5/optparse.* ${libdir}/python2.5/textwrap.* " DESCRIPTION_python-codecs="Python Codecs, Encodings & i18n Support" -PR_python-codecs="ml5" +PR_python-codecs="ml6" RDEPENDS_python-codecs="python-core python-lang" FILES_python-codecs="${libdir}/python2.5/codecs.* ${libdir}/python2.5/encodings ${libdir}/python2.5/gettext.* ${libdir}/python2.5/locale.* ${libdir}/python2.5/lib-dynload/_locale.so ${libdir}/python2.5/lib-dynload/unicodedata.so ${libdir}/python2.5/stringprep.* ${libdir}/python2.5/xdrlib.* " DESCRIPTION_python-ctypes="Python C Types Support" -PR_python-ctypes="ml5" +PR_python-ctypes="ml6" RDEPENDS_python-ctypes="python-core" FILES_python-ctypes="${libdir}/python2.5/ctypes ${libdir}/python2.5/lib-dynload/_ctypes.so " DESCRIPTION_python-pickle="Python Persistence Support" -PR_python-pickle="ml5" +PR_python-pickle="ml6" RDEPENDS_python-pickle="python-core python-codecs python-io python-re" FILES_python-pickle="${libdir}/python2.5/pickle.* ${libdir}/python2.5/shelve.* ${libdir}/python2.5/lib-dynload/cPickle.so " DESCRIPTION_python-datetime="Python Calendar and Time support" -PR_python-datetime="ml5" +PR_python-datetime="ml6" RDEPENDS_python-datetime="python-core python-codecs" FILES_python-datetime="${libdir}/python2.5/_strptime.* ${libdir}/python2.5/calendar.* ${libdir}/python2.5/lib-dynload/datetime.so " DESCRIPTION_python-core="Python Interpreter and core modules (needed!)" -PR_python-core="ml5" +PR_python-core="ml6" RDEPENDS_python-core="" FILES_python-core="${libdir}/python2.5/__future__.* ${libdir}/python2.5/copy.* ${libdir}/python2.5/copy_reg.* ${libdir}/python2.5/ConfigParser.* ${libdir}/python2.5/getopt.* ${libdir}/python2.5/linecache.* ${libdir}/python2.5/new.* ${libdir}/python2.5/os.* ${libdir}/python2.5/posixpath.* ${libdir}/python2.5/struct.* ${libdir}/python2.5/warnings.* ${libdir}/python2.5/site.* ${libdir}/python2.5/stat.* ${libdir}/python2.5/UserDict.* ${libdir}/python2.5/UserList.* ${libdir}/python2.5/UserString.* ${libdir}/python2.5/lib-dynload/binascii.so ${libdir}/python2.5/lib-dynload/_struct.so ${libdir}/python2.5/lib-dynload/time.so ${libdir}/python2.5/lib-dynload/xreadlines.so ${libdir}/python2.5/types.* ${bindir}/python* " DESCRIPTION_python-io="Python Low-Level I/O" -PR_python-io="ml5" +PR_python-io="ml6" RDEPENDS_python-io="python-core python-math" FILES_python-io="${libdir}/python2.5/lib-dynload/_socket.so ${libdir}/python2.5/lib-dynload/_ssl.so ${libdir}/python2.5/lib-dynload/select.so ${libdir}/python2.5/lib-dynload/termios.so ${libdir}/python2.5/lib-dynload/cStringIO.so ${libdir}/python2.5/pipes.* ${libdir}/python2.5/socket.* ${libdir}/python2.5/tempfile.* ${libdir}/python2.5/StringIO.* " DESCRIPTION_python-compiler="Python Compiler Support" -PR_python-compiler="ml5" +PR_python-compiler="ml6" RDEPENDS_python-compiler="python-core" FILES_python-compiler="${libdir}/python2.5/compiler " DESCRIPTION_python-compression="Python High Level Compression Support" -PR_python-compression="ml5" +PR_python-compression="ml6" RDEPENDS_python-compression="python-core python-zlib" FILES_python-compression="${libdir}/python2.5/gzip.* ${libdir}/python2.5/zipfile.* " DESCRIPTION_python-re="Python Regular Expression APIs" -PR_python-re="ml5" +PR_python-re="ml6" RDEPENDS_python-re="python-core" FILES_python-re="${libdir}/python2.5/re.* ${libdir}/python2.5/sre.* ${libdir}/python2.5/sre_compile.* ${libdir}/python2.5/sre_constants* ${libdir}/python2.5/sre_parse.* " DESCRIPTION_python-xmlrpc="Python XMLRPC Support" -PR_python-xmlrpc="ml5" +PR_python-xmlrpc="ml6" RDEPENDS_python-xmlrpc="python-core python-xml python-netserver python-lang" FILES_python-xmlrpc="${libdir}/python2.5/xmlrpclib.* ${libdir}/python2.5/SimpleXMLRPCServer.* " DESCRIPTION_python-terminal="Python Terminal Controlling Support" -PR_python-terminal="ml5" +PR_python-terminal="ml6" RDEPENDS_python-terminal="python-core python-io" FILES_python-terminal="${libdir}/python2.5/pty.* ${libdir}/python2.5/tty.* " DESCRIPTION_python-email="Python Email Support" -PR_python-email="ml5" +PR_python-email="ml6" RDEPENDS_python-email="python-core python-io python-re python-mime python-audio python-image" FILES_python-email="${libdir}/python2.5/email " DESCRIPTION_python-image="Python Graphical Image Handling" -PR_python-image="ml5" +PR_python-image="ml6" RDEPENDS_python-image="python-core" FILES_python-image="${libdir}/python2.5/colorsys.* ${libdir}/python2.5/imghdr.* ${libdir}/python2.5/lib-dynload/imageop.so ${libdir}/python2.5/lib-dynload/rgbimg.so " DESCRIPTION_python-core-dbg="Python core module debug information" -PR_python-core-dbg="ml5" +PR_python-core-dbg="ml6" RDEPENDS_python-core-dbg="python-core" FILES_python-core-dbg="${libdir}/python2.5/lib-dynload/.debug ${bindir}/.debug ${libdir}/.debug " DESCRIPTION_python-resource="Python Resource Control Interface" -PR_python-resource="ml5" +PR_python-resource="ml6" RDEPENDS_python-resource="python-core" FILES_python-resource="${libdir}/python2.5/lib-dynload/resource.so " DESCRIPTION_python-devel="Python Development Package" -PR_python-devel="ml5" +PR_python-devel="ml6" RDEPENDS_python-devel="python-core" FILES_python-devel="${includedir} ${libdir}/python2.5/config " DESCRIPTION_python-math="Python Math Support" -PR_python-math="ml5" +PR_python-math="ml6" RDEPENDS_python-math="python-core" FILES_python-math="${libdir}/python2.5/lib-dynload/cmath.so ${libdir}/python2.5/lib-dynload/math.so ${libdir}/python2.5/lib-dynload/_random.so ${libdir}/python2.5/random.* ${libdir}/python2.5/sets.* " DESCRIPTION_python-hotshot="Python Hotshot Profiler" -PR_python-hotshot="ml5" +PR_python-hotshot="ml6" RDEPENDS_python-hotshot="python-core" FILES_python-hotshot="${libdir}/python2.5/hotshot ${libdir}/python2.5/lib-dynload/_hotshot.so " DESCRIPTION_python-unixadmin="Python Unix Administration Support" -PR_python-unixadmin="ml5" +PR_python-unixadmin="ml6" RDEPENDS_python-unixadmin="python-core" FILES_python-unixadmin="${libdir}/python2.5/lib-dynload/nis.so ${libdir}/python2.5/lib-dynload/grp.so ${libdir}/python2.5/lib-dynload/pwd.so ${libdir}/python2.5/getpass.* " DESCRIPTION_python-syslog="Python's syslog Interface" -PR_python-syslog="ml5" +PR_python-syslog="ml6" RDEPENDS_python-syslog="python-core" FILES_python-syslog="${libdir}/python2.5/lib-dynload/syslog.so " DESCRIPTION_python-tkinter="Python Tcl/Tk Bindings" -PR_python-tkinter="ml5" +PR_python-tkinter="ml6" RDEPENDS_python-tkinter="python-core" FILES_python-tkinter="${libdir}/python2.5/lib-dynload/_tkinter.so ${libdir}/python2.5/lib-tk " DESCRIPTION_python-gdbm="Python GNU Database Support" -PR_python-gdbm="ml5" +PR_python-gdbm="ml6" RDEPENDS_python-gdbm="python-core" FILES_python-gdbm="${libdir}/python2.5/lib-dynload/gdbm.so " DESCRIPTION_python-fcntl="Python's fcntl Interface" -PR_python-fcntl="ml5" +PR_python-fcntl="ml6" RDEPENDS_python-fcntl="python-core" FILES_python-fcntl="${libdir}/python2.5/lib-dynload/fcntl.so " DESCRIPTION_python-netclient="Python Internet Protocol Clients" -PR_python-netclient="ml5" +PR_python-netclient="ml6" RDEPENDS_python-netclient="python-core python-crypt python-datetime python-io python-lang python-logging python-mime" FILES_python-netclient="${libdir}/python2.5/*Cookie*.* ${libdir}/python2.5/base64.* ${libdir}/python2.5/cookielib.* ${libdir}/python2.5/ftplib.* ${libdir}/python2.5/gopherlib.* ${libdir}/python2.5/hmac.* ${libdir}/python2.5/httplib.* ${libdir}/python2.5/mimetypes.* ${libdir}/python2.5/nntplib.* ${libdir}/python2.5/poplib.* ${libdir}/python2.5/smtplib.* ${libdir}/python2.5/telnetlib.* ${libdir}/python2.5/urllib.* ${libdir}/python2.5/urllib2.* ${libdir}/python2.5/urlparse.* " DESCRIPTION_python-pprint="Python Pretty-Print Support" -PR_python-pprint="ml5" +PR_python-pprint="ml6" RDEPENDS_python-pprint="python-core" FILES_python-pprint="${libdir}/python2.5/pprint.* " DESCRIPTION_python-netserver="Python Internet Protocol Servers" -PR_python-netserver="ml5" +PR_python-netserver="ml6" RDEPENDS_python-netserver="python-core python-netclient" FILES_python-netserver="${libdir}/python2.5/cgi.* ${libdir}/python2.5/BaseHTTPServer.* ${libdir}/python2.5/SimpleHTTPServer.* ${libdir}/python2.5/SocketServer.* " DESCRIPTION_python-curses="Python Curses Support" -PR_python-curses="ml5" +PR_python-curses="ml6" RDEPENDS_python-curses="python-core" FILES_python-curses="${libdir}/python2.5/curses ${libdir}/python2.5/lib-dynload/_curses.so ${libdir}/python2.5/lib-dynload/_curses_panel.so " DESCRIPTION_python-smtpd="Python Simple Mail Transport Daemon" -PR_python-smtpd="ml5" +PR_python-smtpd="ml6" RDEPENDS_python-smtpd="python-core python-netserver python-email python-mime" FILES_python-smtpd="${bindir}/smtpd.* " DESCRIPTION_python-html="Python HTML Processing" -PR_python-html="ml5" +PR_python-html="ml6" RDEPENDS_python-html="python-core" FILES_python-html="${libdir}/python2.5/formatter.* ${libdir}/python2.5/htmlentitydefs.* ${libdir}/python2.5/htmllib.* ${libdir}/python2.5/markupbase.* ${libdir}/python2.5/sgmllib.* " DESCRIPTION_python-readline="Python Readline Support" -PR_python-readline="ml5" +PR_python-readline="ml6" RDEPENDS_python-readline="python-core" FILES_python-readline="${libdir}/python2.5/lib-dynload/readline.so ${libdir}/python2.5/rlcompleter.* " DESCRIPTION_python-subprocess="Python Subprocess Support" -PR_python-subprocess="ml5" +PR_python-subprocess="ml6" RDEPENDS_python-subprocess="python-core python-io python-re python-fcntl python-pickle" FILES_python-subprocess="${libdir}/python2.5/subprocess.* " DESCRIPTION_python-pydoc="Python Interactive Help Support" -PR_python-pydoc="ml5" +PR_python-pydoc="ml6" RDEPENDS_python-pydoc="python-core python-lang python-stringold python-re" FILES_python-pydoc="${bindir}/pydoc ${libdir}/python2.5/pydoc.* " DESCRIPTION_python-logging="Python Logging Support" -PR_python-logging="ml5" +PR_python-logging="ml6" RDEPENDS_python-logging="python-core python-io python-lang python-stringold" FILES_python-logging="${libdir}/python2.5/logging " DESCRIPTION_python-mailbox="Python Mailbox Format Support" -PR_python-mailbox="ml5" +PR_python-mailbox="ml6" RDEPENDS_python-mailbox="python-core python-mime" FILES_python-mailbox="${libdir}/python2.5/mailbox.* " DESCRIPTION_python-xml="Python basic XML support." -PR_python-xml="ml5" +PR_python-xml="ml6" RDEPENDS_python-xml="python-core python-re python-netclient" FILES_python-xml="${libdir}/python2.5/lib-dynload/pyexpat.so ${libdir}/python2.5/xml ${libdir}/python2.5/xmllib.* " DESCRIPTION_python-mime="Python MIME Handling APIs" -PR_python-mime="ml5" +PR_python-mime="ml6" RDEPENDS_python-mime="python-core python-io" FILES_python-mime="${libdir}/python2.5/mimetools.* ${libdir}/python2.5/uu.* ${libdir}/python2.5/quopri.* ${libdir}/python2.5/rfc822.* " DESCRIPTION_python-sqlite3="Python Sqlite3 Database Support" -PR_python-sqlite3="ml5" +PR_python-sqlite3="ml6" RDEPENDS_python-sqlite3="python-core" FILES_python-sqlite3="${libdir}/python2.5/sqlite3 " DESCRIPTION_python-tests="Python Tests" -PR_python-tests="ml5" +PR_python-tests="ml6" RDEPENDS_python-tests="python-core" FILES_python-tests="${libdir}/python2.5/test " DESCRIPTION_python-unittest="Python Unit Testing Framework" -PR_python-unittest="ml5" +PR_python-unittest="ml6" RDEPENDS_python-unittest="python-core python-stringold python-lang" FILES_python-unittest="${libdir}/python2.5/unittest.* " DESCRIPTION_python-stringold="Python String APIs [deprecated]" -PR_python-stringold="ml5" +PR_python-stringold="ml6" RDEPENDS_python-stringold="python-core python-re" FILES_python-stringold="${libdir}/python2.5/lib-dynload/strop.so ${libdir}/python2.5/string.* " DESCRIPTION_python-robotparser="Python robots.txt parser" -PR_python-robotparser="ml5" +PR_python-robotparser="ml6" RDEPENDS_python-robotparser="python-core python-netclient" FILES_python-robotparser="${libdir}/python2.5/robotparser.* " DESCRIPTION_python-lib-old-and-deprecated="Python Deprecated Libraries" -PR_python-lib-old-and-deprecated="ml5" +PR_python-lib-old-and-deprecated="ml6" RDEPENDS_python-lib-old-and-deprecated="python-core" FILES_python-lib-old-and-deprecated="${libdir}/python2.5/lib-old " DESCRIPTION_python-compile="Python Bytecode Compilation Support" -PR_python-compile="ml5" +PR_python-compile="ml6" RDEPENDS_python-compile="python-core" FILES_python-compile="${libdir}/python2.5/py_compile.* ${libdir}/python2.5/compileall.* " DESCRIPTION_python-debugger="Python Debugger" -PR_python-debugger="ml5" +PR_python-debugger="ml6" RDEPENDS_python-debugger="python-core python-io python-lang python-re python-stringold python-shell" FILES_python-debugger="${libdir}/python2.5/bdb.* ${libdir}/python2.5/pdb.* " DESCRIPTION_python-shell="Python Shell-Like Functionality" -PR_python-shell="ml5" +PR_python-shell="ml6" RDEPENDS_python-shell="python-core python-re" FILES_python-shell="${libdir}/python2.5/cmd.* ${libdir}/python2.5/commands.* ${libdir}/python2.5/dircache.* ${libdir}/python2.5/fnmatch.* ${libdir}/python2.5/glob.* ${libdir}/python2.5/popen2.* ${libdir}/python2.5/shutil.* " DESCRIPTION_python-bsddb="Python Berkeley Database Bindings" -PR_python-bsddb="ml5" +PR_python-bsddb="ml6" RDEPENDS_python-bsddb="python-core" FILES_python-bsddb="${libdir}/python2.5/bsddb " DESCRIPTION_python-mmap="Python Memory-Mapped-File Support" -PR_python-mmap="ml5" +PR_python-mmap="ml6" RDEPENDS_python-mmap="python-core python-io" FILES_python-mmap="${libdir}/python2.5/lib-dynload/mmap.so " DESCRIPTION_python-zlib="Python zlib Support." -PR_python-zlib="ml5" +PR_python-zlib="ml6" RDEPENDS_python-zlib="python-core" FILES_python-zlib="${libdir}/python2.5/lib-dynload/zlib.so " DESCRIPTION_python-db="Python File-Based Database Support" -PR_python-db="ml5" +PR_python-db="ml6" RDEPENDS_python-db="python-core" FILES_python-db="${libdir}/python2.5/anydbm.* ${libdir}/python2.5/dumbdbm.* ${libdir}/python2.5/whichdb.* " DESCRIPTION_python-crypt="Python Basic Cryptographic and Hashing Support" -PR_python-crypt="ml5" +PR_python-crypt="ml6" RDEPENDS_python-crypt="python-core" FILES_python-crypt="${libdir}/python2.5/hashlib.* ${libdir}/python2.5/md5.* ${libdir}/python2.5/sha.* ${libdir}/python2.5/lib-dynload/crypt.so ${libdir}/python2.5/lib-dynload/_hashlib.so ${libdir}/python2.5/lib-dynload/_sha256.so ${libdir}/python2.5/lib-dynload/_sha512.so " DESCRIPTION_python-idle="Python Integrated Development Environment" -PR_python-idle="ml5" +PR_python-idle="ml6" RDEPENDS_python-idle="python-core python-tkinter" FILES_python-idle="${bindir}/idle ${libdir}/python2.5/idlelib " DESCRIPTION_python-lang="Python Low-Level Language Support" -PR_python-lang="ml5" +PR_python-lang="ml6" RDEPENDS_python-lang="python-core" FILES_python-lang="${libdir}/python2.5/lib-dynload/array.so ${libdir}/python2.5/lib-dynload/parser.so ${libdir}/python2.5/lib-dynload/operator.so ${libdir}/python2.5/lib-dynload/_weakref.so ${libdir}/python2.5/lib-dynload/itertools.so ${libdir}/python2.5/lib-dynload/collections.so ${libdir}/python2.5/lib-dynload/_bisect.so ${libdir}/python2.5/lib-dynload/_heapq.so ${libdir}/python2.5/atexit.* ${libdir}/python2.5/bisect.* ${libdir}/python2.5/code.* ${libdir}/python2.5/codeop.* ${libdir}/python2.5/dis.* ${libdir}/python2.5/heapq.* ${libdir}/python2.5/inspect.* ${libdir}/python2.5/keyword.* ${libdir}/python2.5/opcode.* ${libdir}/python2.5/repr.* ${libdir}/python2.5/token.* ${libdir}/python2.5/tokenize.* ${libdir}/python2.5/traceback.* ${libdir}/python2.5/linecache.* ${libdir}/python2.5/weakref.* " DESCRIPTION_python-audio="Python Audio Handling" -PR_python-audio="ml5" +PR_python-audio="ml6" RDEPENDS_python-audio="python-core" FILES_python-audio="${libdir}/python2.5/wave.* ${libdir}/python2.5/chunk.* ${libdir}/python2.5/sndhdr.* ${libdir}/python2.5/lib-dynload/ossaudiodev.so ${libdir}/python2.5/lib-dynload/audioop.so " diff --git a/packages/python/python-ecore_cvs.bb b/packages/python/python-ecore_cvs.bb index 80bda20987..0ec598f5a0 100644 --- a/packages/python/python-ecore_cvs.bb +++ b/packages/python/python-ecore_cvs.bb @@ -1,7 +1,6 @@ require python-efl.inc DEPENDS += "ecore" - -PR = "r3" +PR = "r5" do_stage() { distutils_stage_all diff --git a/packages/python/python-edbus_cvs.bb b/packages/python/python-edbus_cvs.bb new file mode 100644 index 0000000000..7a4d53762f --- /dev/null +++ b/packages/python/python-edbus_cvs.bb @@ -0,0 +1,9 @@ +require python-efl.inc +# broken until someone adds dbus 1.1.x +DEPENDS += "edbus dbus-1.1" + +PR = "r0" + +SRC_URI = "${E_CVS};module=e17/proto/python-efl/python-e_dbus" +S = "${WORKDIR}/python-e_dbus" + diff --git a/packages/python/python-edje_cvs.bb b/packages/python/python-edje_cvs.bb index 6fc444a6e6..1205e7ec84 100644 --- a/packages/python/python-edje_cvs.bb +++ b/packages/python/python-edje_cvs.bb @@ -1,5 +1,4 @@ require python-efl.inc DEPENDS += "edje python-evas" - -PR = "r2" +PR = "r5" diff --git a/packages/python/python-efl-examples.bb b/packages/python/python-efl-examples.bb new file mode 100644 index 0000000000..0a4e32097f --- /dev/null +++ b/packages/python/python-efl-examples.bb @@ -0,0 +1,10 @@ +DESCRIPTION = "Python Examples for the Enlightenment Foundation Libraries" +LICENSE = "MIT" +SECTION = "devel/python" +RDEPENDS = "\ + python-efl python-ecore-examples python-emotion-examples python-edje-examples python-epsilon-examples \ + python-math python-textutils \ +" +PR = "ml2" + +ALLOW_EMPTY = "1" diff --git a/packages/python/python-efl.inc b/packages/python/python-efl.inc index fce05fe50f..e6cc62df5e 100644 --- a/packages/python/python-efl.inc +++ b/packages/python/python-efl.inc @@ -13,5 +13,25 @@ inherit setuptools SRC_URI = "${E_CVS};module=e17/proto/python-efl/${PN}" S = "${WORKDIR}/${PN}" +do_install_append() { + if [ -e examples ]; then + for i in `find examples -name "*.edc"`; do + pushd `dirname $i` + echo "Generating .edj file for $i..." + edje_cc `basename $i` + echo "Removing sources in this directory..." + rm -f *.edc *.png *.ttf *.jpeg + popd + done + install -d ${D}${datadir}/${PN}/ + cp -a examples ${D}${datadir}/${PN}/ + find ${D}${datadir}/${PN}/examples -name "CVS" | xargs rm -rf + find ${D}${datadir}/${PN}/examples -name ".cvsignore" | xargs rm -f + fi +} + FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/*.egg/*/*/.debug" +PACKAGES += "${PN}-examples" +FILES_${PN}-examples = "${datadir}/${PN}/examples" + diff --git a/packages/python/python-emotion_cvs.bb b/packages/python/python-emotion_cvs.bb index df0e561da8..d3f5109d86 100644 --- a/packages/python/python-emotion_cvs.bb +++ b/packages/python/python-emotion_cvs.bb @@ -1,4 +1,3 @@ require python-efl.inc DEPENDS += "emotion python-evas" - -PR = "r2" +PR = "r4" diff --git a/packages/python/python-epsilon_cvs.bb b/packages/python/python-epsilon_cvs.bb index 5b46ea5417..204dd95610 100644 --- a/packages/python/python-epsilon_cvs.bb +++ b/packages/python/python-epsilon_cvs.bb @@ -1,4 +1,3 @@ require python-efl.inc DEPENDS += "epsilon python-ecore" - -PR = "r1" +PR = "r4" diff --git a/packages/python/python-evas_cvs.bb b/packages/python/python-evas_cvs.bb index a24b50a850..e0de4569bd 100644 --- a/packages/python/python-evas_cvs.bb +++ b/packages/python/python-evas_cvs.bb @@ -1,7 +1,6 @@ require python-efl.inc DEPENDS += "evas" - -PR = "r3" +PR = "r4" do_stage() { distutils_stage_all diff --git a/packages/python/python_2.5.1.bb b/packages/python/python_2.5.1.bb index 2202e1d474..37f7bdefb8 100644 --- a/packages/python/python_2.5.1.bb +++ b/packages/python/python_2.5.1.bb @@ -79,7 +79,7 @@ do_install() { require python-${PYTHON_MAJMIN}-manifest.inc RPROVIDES_python-core = "python" -RRECOMMEND_python-core = "python-readline" +RRECOMMENDS_python-core = "python-readline" PACKAGES =+ "libpython2" FILES_libpython2 = "${libdir}/libpython*" diff --git a/packages/quilt/quilt-0.45/non-gnu.patch b/packages/quilt/files/non-gnu.patch index c1cbfb3983..c1cbfb3983 100644 --- a/packages/quilt/quilt-0.45/non-gnu.patch +++ b/packages/quilt/files/non-gnu.patch diff --git a/packages/quilt/files/install.patch b/packages/quilt/quilt-0.45/install.patch index 4122370d6a..4122370d6a 100644 --- a/packages/quilt/files/install.patch +++ b/packages/quilt/quilt-0.45/install.patch diff --git a/packages/quilt/quilt-0.46/.mtn2git_empty b/packages/quilt/quilt-0.46/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/quilt/quilt-0.46/.mtn2git_empty diff --git a/packages/quilt/quilt-0.46/aclocal.patch b/packages/quilt/quilt-0.46/aclocal.patch new file mode 100644 index 0000000000..1245f74922 --- /dev/null +++ b/packages/quilt/quilt-0.46/aclocal.patch @@ -0,0 +1,126 @@ +Add the aclocal.m4 as acinclude.m4 + +Index: quilt-0.46/acinclude.m4 +=================================================================== +--- /dev/null ++++ quilt-0.46/acinclude.m4 +@@ -0,0 +1,119 @@ ++dnl Allow configure to specify a specific binary ++dnl 1: Environment variable ++dnl 2: binary name ++dnl 3: optional list of alternative binary names ++dnl 4: optional list of additional search directories ++AC_DEFUN([QUILT_COMPAT_PROG_PATH],[ ++ m4_define([internal_$2_cmd],[esyscmd(ls compat/$2.in 2>/dev/null)]) ++ ++ AC_ARG_WITH($2, AC_HELP_STRING( ++ [--with-$2], [name of the $2 executable to use] ++ m4_if(internal_$2_cmd,[],[],[ (use --without-$2 ++ to use an internal mechanism)])), ++ [ ++ if test x"$withval" = xnone; then ++ AC_MSG_ERROR([Invalid configure argument. use --without-$2]) ++ fi ++ if test x"$withval" != xno; then ++ AC_MSG_CHECKING(for $2) ++ $1="$withval" ++ if test -e "$$1"; then ++ if test ! -f "$$1" -a ! -h "$$1" || test ! -x "$$1"; then ++ AC_MSG_ERROR([$$1 is not an executable file]) ++ fi ++ fi ++ AC_MSG_RESULT([$$1]) ++ if test ! -e "$$1"; then ++ AC_MSG_WARN([$$1 does not exist]) ++ fi ++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2" ++ fi ++ ],[ ++ m4_if([$3],[],[ ++ AC_PATH_PROG($1,$2,,$PATH:$4) ++ ],[ ++ AC_PATH_PROGS($1,$3,,$PATH:$4) ++ if test -n "$$1" -a "`expr "$$1" : '.*/\([[^/]]*\)$'`" != "$2"; then ++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2" ++ fi ++ ]) ++ m4_if([$4],[],[],[ ++ if test -n "$$1"; then ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++ for dir in "$4"; do ++ if test "`dirname $$1`" = "$dir"; then ++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2" ++ break ++ fi ++ done ++ IFS="$as_save_IFS" ++ fi ++ ]) ++ ]) ++ if test -z "$$1"; then ++ m4_if(internal_$2_cmd,[],[ ++ AC_MSG_ERROR([Please specify the location of $2 with the option '--with-$2']) ++ ],[ ++ AC_MSG_WARN([Using internal $2 mechanism. Use option '--with-$2' to override]) ++ COMPAT_PROGRAMS="$COMPAT_PROGRAMS $2" ++ $1=$2 ++ INTERNAL_$1=1 ++ ]) ++ fi ++ AC_SUBST($1) ++]) ++ ++dnl Allow configure to specify a specific binary ++dnl This variant is for optional binaries. ++dnl 1: Environment variable ++dnl 2: binary name ++dnl 3: optional list of alternative binary names ++dnl 4: optional list of additional search directories ++AC_DEFUN([QUILT_COMPAT_PROG_PATH_OPT],[ ++ AC_ARG_WITH($2, AC_HELP_STRING( ++ [--with-$2], [name of the $2 executable to use]), ++ [ ++ if test x"$withval" != xno; then ++ AC_MSG_CHECKING(for $2) ++ $1="$withval" ++ if test -e "$$1"; then ++ if test ! -f "$$1" -a ! -h "$$1" || test ! -x "$$1"; then ++ AC_MSG_ERROR([$$1 is not an executable file]) ++ fi ++ fi ++ AC_MSG_RESULT([$$1]) ++ if test ! -e "$$1"; then ++ AC_MSG_WARN([$$1 does not exist]) ++ fi ++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2" ++ fi ++ ],[ ++ m4_if([$3],[],[ ++ AC_PATH_PROG($1,$2,,$PATH:$4) ++ ],[ ++ AC_PATH_PROGS($1,$3,,$PATH:$4) ++ if test -n "$$1" -a "`expr "$$1" : '.*/\([[^/]]*\)$'`" != "$2"; then ++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2" ++ fi ++ ]) ++ m4_if([$4],[],[],[ ++ if test -n "$$1"; then ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++ for dir in "$4"; do ++ if test "`dirname $$1`" = "$dir"; then ++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2" ++ break ++ fi ++ done ++ IFS="$as_save_IFS" ++ fi ++ ]) ++ if test -z "$$1"; then ++ AC_MSG_WARN([$2 not found, some optional functionalities will be missing]) ++ fi ++ ]) ++ if test -z "$$1"; then ++ $1=$2 ++ fi ++ AC_SUBST($1) ++]) diff --git a/packages/quilt/quilt-0.46/install.patch b/packages/quilt/quilt-0.46/install.patch new file mode 100644 index 0000000000..3c9030d377 --- /dev/null +++ b/packages/quilt/quilt-0.46/install.patch @@ -0,0 +1,13 @@ +Index: quilt-0.46/Makefile.in +=================================================================== +--- quilt-0.46.orig/Makefile.in ++++ quilt-0.46/Makefile.in +@@ -12,7 +12,7 @@ datadir := @datadir@ + docdir := @docdir@ + mandir := @mandir@ + localedir := $(datadir)/locale +-etcdir := $(subst /usr/etc,/etc,$(prefix)/etc) ++etcdir := @sysconfdir@ + + INSTALL := @INSTALL@ + POD2MAN := @POD2MAN@ diff --git a/packages/quilt/quilt-native.inc b/packages/quilt/quilt-native.inc index 5861b2229c..f815969344 100644 --- a/packages/quilt/quilt-native.inc +++ b/packages/quilt/quilt-native.inc @@ -1,4 +1,4 @@ -require quilt_${PV}.inc +require quilt.inc SRC_URI_append_build-darwin = "? file://non-gnu.patch;patch=1 " RDEPENDS_${PN} = "diffstat-native patch-native bzip2-native util-linux-native" diff --git a/packages/quilt/quilt-native_0.45.bb b/packages/quilt/quilt-native_0.45.bb index 033f323a13..302df25afd 100644 --- a/packages/quilt/quilt-native_0.45.bb +++ b/packages/quilt/quilt-native_0.45.bb @@ -1,2 +1 @@ -PV="0.45" require quilt-native.inc diff --git a/packages/quilt/quilt-native_0.46.bb b/packages/quilt/quilt-native_0.46.bb new file mode 100644 index 0000000000..302df25afd --- /dev/null +++ b/packages/quilt/quilt-native_0.46.bb @@ -0,0 +1 @@ +require quilt-native.inc diff --git a/packages/quilt/quilt-package.inc b/packages/quilt/quilt-package.inc index bcdbcf026a..900884b917 100644 --- a/packages/quilt/quilt-package.inc +++ b/packages/quilt/quilt-package.inc @@ -1,10 +1,21 @@ +require quilt.inc + +RDEPENDS_${PN} += "patch diffstat bzip2 util-linux" + +SRC_URI += "file://aclocal.patch;patch=1" + +inherit autotools gettext + +do_install () { + oe_runmake 'BUILD_ROOT=${D}' install + + # Remove the compat symlinks + rm -rf "${D}"/usr/share/quilt/compat +} + PACKAGES += "guards guards-doc" FILES_${PN} = "${sysconfdir} ${datadir}/quilt \ ${bindir}/quilt ${libdir}/quilt" FILES_guards = "${bindir}/guards" FILES_${PN}-doc = "${mandir}/man1/quilt.1 ${docdir}/${P}" FILES_guards-doc = "${mandir}/man1/guards.1" - -do_install () { - oe_runmake 'BUILD_ROOT=${D}' install -} diff --git a/packages/quilt/quilt.inc b/packages/quilt/quilt.inc index ee90455fca..33bc0f62ea 100644 --- a/packages/quilt/quilt.inc +++ b/packages/quilt/quilt.inc @@ -2,8 +2,9 @@ DESCRIPTION = "Tool to work with series of patches." HOMEPAGE = "http://savannah.nongnu.org/projects/quilt/" SECTION = "devel" LICENSE = "GPL" -PR = "r1" +PR = "r2" -SRC_URI = "http://download.savannah.gnu.org/releases/quilt/quilt-${PV}.tar.gz " +SRC_URI = "http://download.savannah.gnu.org/releases/quilt/quilt-${PV}.tar.gz \ + file://install.patch;patch=1" S = "${WORKDIR}/quilt-${PV}" diff --git a/packages/quilt/quilt_0.45.bb b/packages/quilt/quilt_0.45.bb index d809c83518..de38f64782 100644 --- a/packages/quilt/quilt_0.45.bb +++ b/packages/quilt/quilt_0.45.bb @@ -1,9 +1 @@ -RDEPENDS_${PN} += "patch diffstat bzip2 util-linux" - -require quilt_${PV}.inc - -SRC_URI += "file://aclocal.patch;patch=1" - -inherit autotools gettext - require quilt-package.inc diff --git a/packages/quilt/quilt_0.45.inc b/packages/quilt/quilt_0.45.inc deleted file mode 100644 index bf6267b56c..0000000000 --- a/packages/quilt/quilt_0.45.inc +++ /dev/null @@ -1,3 +0,0 @@ -require quilt.inc - -SRC_URI += "file://install.patch;patch=1" diff --git a/packages/quilt/quilt_0.46.bb b/packages/quilt/quilt_0.46.bb new file mode 100644 index 0000000000..de38f64782 --- /dev/null +++ b/packages/quilt/quilt_0.46.bb @@ -0,0 +1 @@ +require quilt-package.inc diff --git a/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch b/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch new file mode 100644 index 0000000000..81ce2db335 --- /dev/null +++ b/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch @@ -0,0 +1,11 @@ +--- a/src/configure.in.org 2008-01-14 21:08:38.000000000 +0200 ++++ a/src/configure.in 2008-01-14 21:20:09.000000000 +0200 +@@ -208,7 +208,7 @@ + return 2; + } + }], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev, +-$ECHO "no defaults for cross-compiling"; exit 0) ++$ECHO "no defaults for cross-compiling"; exit 1) + ]) + + if test "$rpppoe_cv_pack_bitfields" = "rev" ; then diff --git a/packages/rp-pppoe/rp-pppoe_3.8.bb b/packages/rp-pppoe/rp-pppoe_3.8.bb index 35faf8839b..9852522da1 100644 --- a/packages/rp-pppoe/rp-pppoe_3.8.bb +++ b/packages/rp-pppoe/rp-pppoe_3.8.bb @@ -5,13 +5,14 @@ LICENSE = "GPLv2" RDEPENDS_${PN} = "ppp" RDEPENDS_${PN}-server = "${PN}" RRECOMMENDS_${PN} = "ppp-oe" -PR = "r5" +PR = "r6" SRC_URI = "http://www.roaringpenguin.com/files/download/${P}.tar.gz \ file://top-autoconf.patch;patch=1 \ file://configure_in_cross.patch;patch=1 \ file://pppoe-src-restrictions.patch;patch=1 \ file://update-config.patch;patch=1 \ + file://dont-swallow-errors.patch;patch=1 \ file://pppoe-server.default \ file://pppoe-server.init" diff --git a/packages/sablevm/sablevm-classpath_1.1.9.bb b/packages/sablevm/sablevm-classpath_1.1.9.bb index cda269c70a..c222572009 100644 --- a/packages/sablevm/sablevm-classpath_1.1.9.bb +++ b/packages/sablevm/sablevm-classpath_1.1.9.bb @@ -5,7 +5,7 @@ PRIORITY = "optional" SECTION = "libs" PR = "r1" -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native fastjar-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native fastjar-native" RDEPENDS_${PN} = "${PN}-native" SRC_URI = "http://sablevm.org/download/release/${PV}/${PN}-${PV}.tar.gz \ diff --git a/packages/sablevm/sablevm-classpath_1.11.3.bb b/packages/sablevm/sablevm-classpath_1.11.3.bb index 90de4e3ac8..0546dcacd6 100644 --- a/packages/sablevm/sablevm-classpath_1.11.3.bb +++ b/packages/sablevm/sablevm-classpath_1.11.3.bb @@ -4,7 +4,7 @@ LICENSE = "Classpath" PRIORITY = "optional" SECTION = "libs" -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-native (>= ${PV})" SRC_URI = "http://sablevm.org/download/release/${PV}/${PN}-${PV}.tar.gz \ diff --git a/packages/sablevm/sablevm-classpath_1.12.bb b/packages/sablevm/sablevm-classpath_1.12.bb index 90de4e3ac8..0546dcacd6 100644 --- a/packages/sablevm/sablevm-classpath_1.12.bb +++ b/packages/sablevm/sablevm-classpath_1.12.bb @@ -4,7 +4,7 @@ LICENSE = "Classpath" PRIORITY = "optional" SECTION = "libs" -DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native" +DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native" RDEPENDS_${PN} = "${PN}-native (>= ${PV})" SRC_URI = "http://sablevm.org/download/release/${PV}/${PN}-${PV}.tar.gz \ diff --git a/packages/sccd/files/scc.h b/packages/sccd/files/scc.h index 611092fd9c..b920791f66 100644 --- a/packages/sccd/files/scc.h +++ b/packages/sccd/files/scc.h @@ -33,7 +33,7 @@ */ #define SCC_PIDFILE "/var/run/sccd.pid" -#define SCC_DEVICE "/dev/tts/1" +#define SCC_DEVICE "/dev/ttyS1" #define SCC_SOCKET "/dev/sccd" #define SCC_PACKETLEN 8 diff --git a/packages/sccd/sccd_1.0.bb b/packages/sccd/sccd_1.0.bb index 5eeaeef343..bf25fbe90c 100644 --- a/packages/sccd/sccd_1.0.bb +++ b/packages/sccd/sccd_1.0.bb @@ -1,7 +1,7 @@ -DECSCRIPTION = "StorCenter Control Daemon - controls the leds, fans, softpower" +DECSCRIPTION = "StorCenter Control Daemon controls leds, fans, softpower" SECTION = "utils" LICENSE = "BSD" -PR = "r3" +PR = "r4" SRC_URI = "file://scc.h \ file://scc.c \ @@ -14,7 +14,7 @@ SRC_URI = "file://scc.h \ inherit autotools update-rc.d -INITSCRIPT_PARAMS = "defaults 91 20" +INITSCRIPT_PARAMS = "defaults 9 9" INITSCRIPT_NAME = "sccd" do_unpack() { diff --git a/packages/tasks/task-openmoko-feed.bb b/packages/tasks/task-openmoko-feed.bb index 49ab41054e..97f24a7624 100644 --- a/packages/tasks/task-openmoko-feed.bb +++ b/packages/tasks/task-openmoko-feed.bb @@ -1,7 +1,7 @@ DESCRIPTION = "OpenMoko: Misc. Feed Items" SECTION = "openmoko/base" LICENSE = "MIT" -PR = "r18" +PR = "r20" inherit task @@ -27,6 +27,7 @@ RDEPENDS_task-openmoko-feed = "\ python python-pygtk python-pyserial python-efl \ ruby \ libsdl-x11 libsdl-mixer libsdl-net libsdl-ttf \ + settingsgui \ synergy \ tzdata \ tor \ diff --git a/packages/tasks/task-openprotium.bb b/packages/tasks/task-openprotium.bb new file mode 100644 index 0000000000..4c5d762f8f --- /dev/null +++ b/packages/tasks/task-openprotium.bb @@ -0,0 +1,52 @@ +DESCRIPTION = "Basic image for openprotium" +HOMEPAGE = "http://www.openprotium.org" +PACKAGE_ARCH = "${MACHINE_ARCH}" +ALLOW_EMPTY = "1" +PR = "r1" + +inherit task + +# be sure to build the kernel: +DEPENDS = "virtual/kernel" + +# always make this one for testing. +DISTRO_KERNEL_MODULES = "kernel-module-dummy" +# do we still need this? +DISTRO_KERNEL_MODULES += "kernel-module-af-packet" +# unused for now +#DISTRO_KERNEL_MODULES += "kernel-module-netconsole" + +# these are listed separately because the are not needed +# for boot, but are needed by reflash, etc. +DISTRO_EXTRA_RDEPENDS += "diffutils cpio findutils" + +# pick up the fw_set/get env utils. +DISTRO_EXTRA_RDEPENDS += "u-boot-utils" + +RDEPENDS = " kernel \ + base-files \ + base-passwd \ + netbase \ + busybox \ + openprotium-init \ + initscripts-openprotium \ + update-modules \ + module-init-tools \ + modutils-initscripts \ + ipkg-collateral ipkg ipkg-link \ + portmap \ + e2fsprogs-blkid \ + mdadm \ + hdparm \ + mtd-utils \ + ${DISTRO_SSH_DAEMON} \ + ${DISTRO_DEV_MANAGER} \ + ${DISTRO_INIT_MANAGER} \ + ${DISTRO_LOGIN_MANAGER} \ + ${DISTRO_KERNEL_MODULES} \ + ${MACHINE_EXTRA_RDEPENDS} \ + ${DISTRO_EXTRA_RDEPENDS} " + +RRECOMMENDS += " \ + ${DISTRO_EXTRA_RRECOMMENDS} \ + ${MACHINE_EXTRA_RRECOMMENDS}" diff --git a/packages/tasks/task-python-everything.bb b/packages/tasks/task-python-everything.bb index ab33153057..61daa7e089 100644 --- a/packages/tasks/task-python-everything.bb +++ b/packages/tasks/task-python-everything.bb @@ -1,7 +1,7 @@ DESCRIPTION= "Everything Python" HOMEPAGE = "http://www.vanille.de/projects/python.spy" LICENSE = "MIT" -PR = "ml23" +PR = "ml24" RDEPENDS = "\ python-ao \ @@ -11,6 +11,7 @@ RDEPENDS = "\ python-dialog \ python-pydirectfb \ python-efl \ + python-efl-examples \ python-pycurl \ python-fam \ python-fnorb \ diff --git a/packages/u-boot/u-boot-openmoko_svn.bb b/packages/u-boot/u-boot-openmoko_svn.bb index 2dcf3d4c1f..3ec97f2a77 100644 --- a/packages/u-boot/u-boot-openmoko_svn.bb +++ b/packages/u-boot/u-boot-openmoko_svn.bb @@ -15,7 +15,7 @@ UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v1 gta02v2 gta02v3 gta02v4" DEFAULT_PREFERENCE = "-1" SRC_URI = "\ - git://www.denx.de/git/u-boot.git/;protocol=git;name=upstream \ + git://www.denx.de/git/u-boot.git/;protocol=git;name=upstream;tag=3afac79ec27b91df185f090b31dad9620779f440 \ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;proto=http;name=patches \ file://uboot-eabi-fix-HACK.patch;patch=1;maxrev=3773 \ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \ @@ -37,12 +37,6 @@ do_svnrev() { echo "echo ${LOCALVERSION}" >>tools/setlocalversion } -do_configure_prepend() { - find . -name "*.mk" -exec sed -i 's,-mabi=apcs-gnu,,' {} \; - find . -name "Makefile" -exec sed -i 's,-mabi=apcs-gnu,,' {} \; - cat ${WORKDIR}/uboot-eabi-fix-HACK.patch |patch -p1 -} - do_compile () { chmod +x board/neo1973/gta*/split_by_variant.sh for mach in ${UBOOT_MACHINES} diff --git a/packages/uicmoc/files/.mtn2git_empty b/packages/uicmoc/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/uicmoc/files/.mtn2git_empty diff --git a/packages/uicmoc/files/configure-fix.patch b/packages/uicmoc/files/configure-fix.patch new file mode 100644 index 0000000000..df195494ee --- /dev/null +++ b/packages/uicmoc/files/configure-fix.patch @@ -0,0 +1,13 @@ +Index: qtopia-core-opensource-src-4.3.3/configure +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/configure 2008-01-14 08:53:51.000000000 +0000 ++++ qtopia-core-opensource-src-4.3.3/configure 2008-01-14 08:54:07.000000000 +0000 +@@ -447,7 +447,7 @@ + # initalize variables + #------------------------------------------------------------------------------- + +-SYSTEM_VARIABLES="CC CXX CFLAGS CXXFLAGS LDFLAGS" ++SYSTEM_VARIABLES="CC CXX CFLAGS CXXFLAGS LDFLAGS LFLAGS" + for varname in $SYSTEM_VARIABLES; do + cmd=`echo \ + 'if [ -n "\$'${varname}'" ]; then diff --git a/packages/uicmoc/uicmoc4-native.inc b/packages/uicmoc/uicmoc4-native.inc index 298c103fb1..5313b90ee9 100644 --- a/packages/uicmoc/uicmoc4-native.inc +++ b/packages/uicmoc/uicmoc4-native.inc @@ -6,7 +6,8 @@ PRIORITY = "optional" LICENSE = "GPL" PR = "r0" -SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz" +SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \ + file://configure-fix.patch;patch=1" S = "${WORKDIR}/qtopia-core-opensource-src-${PV}" inherit native @@ -26,6 +27,8 @@ EXTRA_OECONF = "-prefix ${STAGING_DIR_NATIVE}/qt4 \ # yank default -e EXTRA_OEMAKE = " " +export LFLAGS="${LDFLAGS}" + do_configure() { sed -i 's:^QT += xml qt3support$:QT += xml qt3support network:' "${S}"/src/tools/uic3/uic3.pro echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}" diff --git a/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty b/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty diff --git a/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch b/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch new file mode 100644 index 0000000000..affdd32075 --- /dev/null +++ b/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch @@ -0,0 +1,4365 @@ +This patch is extracted and cleaned up version of filename character +set conversion patches for vsftpd by Dmitriy Balashov, +http://vsftpd.devnet.ru/eng/ . It provides dirty-pragmatics approach +towards serving Windows codepages encoded filenames to Windows clients +out of normal utf-8 filesystem. + +These patches will never be accepted upstream, they should never be merged +to main vsftpd package, and they for sure void "vs" in "vsftpd". So again, +they are for users to prefer stone-dead pragmatics. Use at you own risk. + +- Paul Sokolovsky, pmiscml@gmail.com + +diff -urN vsftpd-2.0.5.org/charconv.c vsftpd-2.0.5/charconv.c +--- vsftpd-2.0.5.org/charconv.c 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/charconv.c 2008-01-13 20:39:49.000000000 +0200 +@@ -0,0 +1,462 @@ ++/* ++ * Part of Very Secure FTPd ++ * Licence: GPL v2 ++ * Author: Dmitriy Balashov ++ * charconv.c ++ */ ++ ++#include "charconv.h" ++#include "tunables.h" ++#include "session.h" ++#include "str.h" ++#include "sysutil.h" ++ ++#include "char_maps/utf8.map" ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++#include "char_maps/cyrillic.map" ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++#include "char_maps/western.map" ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++#include "char_maps/central.map" ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++#include "char_maps/soutern.map" ++#endif ++ ++/* Tables mapping supported codepage names to runtime variables */ ++static struct available_charsets ++{ ++ const char* p_charset_name; ++ int p_variable; ++} ++available_charsets_array[] = ++{ ++ { VSFTP_CP_NONE , VSFTP_C_NONE }, ++ // Cyrillic ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++ { VSFTP_CP_UTF_8 , VSFTP_C_UTF8 }, ++ { VSFTP_CP_UTF8 , VSFTP_C_UTF8 }, ++ { VSFTP_CP_WIN_1251 , VSFTP_C_1251 }, ++ { VSFTP_CP_WIN1251 , VSFTP_C_1251 }, ++ { VSFTP_CP_CP1251 , VSFTP_C_1251 }, ++ { VSFTP_CP_1251 , VSFTP_C_1251 }, ++ { VSFTP_CP_KOI8_R , VSFTP_C_878R }, ++ { VSFTP_CP_KOI8R , VSFTP_C_878R }, ++ { VSFTP_CP_CP878 , VSFTP_C_878R }, ++ { VSFTP_CP_878 , VSFTP_C_878R }, ++ { VSFTP_CP_CP878R , VSFTP_C_878R }, ++ { VSFTP_CP_878R , VSFTP_C_878R }, ++ { VSFTP_CP_KOI8_U , VSFTP_C_878U }, ++ { VSFTP_CP_KOI8U , VSFTP_C_878U }, ++ { VSFTP_CP_CP878U , VSFTP_C_878U }, ++ { VSFTP_CP_878U , VSFTP_C_878U }, ++ { VSFTP_CP_IBM866 , VSFTP_C_866 }, ++ { VSFTP_CP_CP866 , VSFTP_C_866 }, ++ { VSFTP_CP_866 , VSFTP_C_866 }, ++ { VSFTP_CP_ISO8859_5 , VSFTP_C_ISO5 }, ++ { VSFTP_CP_ISO5 , VSFTP_C_ISO5 }, ++#endif ++ // Western European ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++ { VSFTP_CP_ISO8859_1 , VSFTP_C_ISO1 }, ++ { VSFTP_CP_ISO1 , VSFTP_C_ISO1 }, ++ { VSFTP_CP_LATIN1 , VSFTP_C_ISO1 }, ++ { VSFTP_CP_ISO8859_15, VSFTP_C_ISO15 }, ++ { VSFTP_CP_ISO15 , VSFTP_C_ISO15 }, ++ { VSFTP_CP_LATIN9 , VSFTP_C_ISO15 }, ++ { VSFTP_CP_WIN_1252 , VSFTP_C_1252 }, ++ { VSFTP_CP_WIN1252 , VSFTP_C_1252 }, ++ { VSFTP_CP_CP1252 , VSFTP_C_1252 }, ++ { VSFTP_CP_1252 , VSFTP_C_1252 }, ++#endif ++ // Central European ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++ { VSFTP_CP_ISO8859_2 , VSFTP_C_ISO2 }, ++ { VSFTP_CP_ISO2 , VSFTP_C_ISO2 }, ++ { VSFTP_CP_LATIN2 , VSFTP_C_ISO2 }, ++ { VSFTP_CP_ISO8859_16, VSFTP_C_ISO16 }, ++ { VSFTP_CP_ISO16 , VSFTP_C_ISO16 }, ++ { VSFTP_CP_WIN_1250 , VSFTP_C_1250 }, ++ { VSFTP_CP_WIN1250 , VSFTP_C_1250 }, ++ { VSFTP_CP_CP1250 , VSFTP_C_1250 }, ++ { VSFTP_CP_1250 , VSFTP_C_1250 }, ++#endif ++ // Soutern European ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++ { VSFTP_CP_ISO8859_3 , VSFTP_C_ISO3 }, ++ { VSFTP_CP_ISO3 , VSFTP_C_ISO3 }, ++ { VSFTP_CP_LATIN3 , VSFTP_C_ISO3 }, ++#endif ++ { 0, 0 } ++}; ++ ++/* Available convertions */ ++static struct available_convertions ++{ ++ int local; ++ int remote; ++ int localCharset; ++ int remoteCharset; ++} ++available_convertions_array[] = ++{ // Cyrillic ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++ { VSFTP_C_UTF8 , VSFTP_C_1251 , VSFTP_CS_UTF8CYR , VSFTP_CS_1251 }, ++ { VSFTP_C_UTF8 , VSFTP_C_878R , VSFTP_CS_UTF8CYR , VSFTP_CS_878R }, ++ { VSFTP_C_UTF8 , VSFTP_C_878U , VSFTP_CS_UTF8CYR , VSFTP_CS_878U }, ++ { VSFTP_C_UTF8 , VSFTP_C_866 , VSFTP_CS_UTF8CYR , VSFTP_CS_866 }, ++ { VSFTP_C_UTF8 , VSFTP_C_ISO5 , VSFTP_CS_UTF8CYR , VSFTP_CS_ISO5 }, ++ { VSFTP_C_1251 , VSFTP_C_UTF8 , VSFTP_CS_1251 , VSFTP_CS_UTF8CYR }, ++ { VSFTP_C_1251 , VSFTP_C_878R , VSFTP_CS_1251 , VSFTP_CS_878R }, ++ { VSFTP_C_1251 , VSFTP_C_878U , VSFTP_CS_1251 , VSFTP_CS_878U }, ++ { VSFTP_C_1251 , VSFTP_C_866 , VSFTP_CS_1251 , VSFTP_CS_866 }, ++ { VSFTP_C_1251 , VSFTP_C_ISO5 , VSFTP_CS_1251 , VSFTP_CS_ISO5 }, ++ { VSFTP_C_878R , VSFTP_C_UTF8 , VSFTP_CS_878R , VSFTP_CS_UTF8CYR }, ++ { VSFTP_C_878R , VSFTP_C_1251 , VSFTP_CS_878R , VSFTP_CS_1251 }, ++ { VSFTP_C_878R , VSFTP_C_878U , VSFTP_CS_878R , VSFTP_CS_878U }, ++ { VSFTP_C_878R , VSFTP_C_866 , VSFTP_CS_878R , VSFTP_CS_866 }, ++ { VSFTP_C_878R , VSFTP_C_ISO5 , VSFTP_CS_878R , VSFTP_CS_ISO5 }, ++ { VSFTP_C_866 , VSFTP_C_UTF8 , VSFTP_CS_866 , VSFTP_CS_UTF8CYR }, ++ { VSFTP_C_866 , VSFTP_C_1251 , VSFTP_CS_866 , VSFTP_CS_1251 }, ++ { VSFTP_C_866 , VSFTP_C_878R , VSFTP_CS_866 , VSFTP_CS_878R }, ++ { VSFTP_C_866 , VSFTP_C_878U , VSFTP_CS_866 , VSFTP_CS_878U }, ++ { VSFTP_C_866 , VSFTP_C_ISO5 , VSFTP_CS_866 , VSFTP_CS_ISO5 }, ++ { VSFTP_C_ISO5 , VSFTP_C_UTF8 , VSFTP_CS_ISO5 , VSFTP_CS_UTF8CYR }, ++ { VSFTP_C_ISO5 , VSFTP_C_1251 , VSFTP_CS_ISO5 , VSFTP_CS_1251 }, ++ { VSFTP_C_ISO5 , VSFTP_C_878R , VSFTP_CS_ISO5 , VSFTP_CS_878R }, ++ { VSFTP_C_ISO5 , VSFTP_C_878U , VSFTP_CS_ISO5 , VSFTP_CS_878U }, ++ { VSFTP_C_ISO5 , VSFTP_C_866 , VSFTP_CS_ISO5 , VSFTP_CS_866 }, ++#endif ++ // Western European ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++ { VSFTP_C_UTF8 , VSFTP_C_ISO1 , VSFTP_CS_UTF8WEST , VSFTP_CS_ISO1 }, ++ { VSFTP_C_UTF8 , VSFTP_C_ISO15 , VSFTP_CS_UTF8WEST , VSFTP_CS_ISO15 }, ++ { VSFTP_C_UTF8 , VSFTP_C_1252 , VSFTP_CS_UTF8WEST , VSFTP_CS_1252 }, ++ { VSFTP_C_ISO1 , VSFTP_C_UTF8 , VSFTP_CS_ISO1 , VSFTP_CS_UTF8WEST }, ++ { VSFTP_C_ISO1 , VSFTP_C_ISO15 , VSFTP_CS_ISO1 , VSFTP_CS_ISO15 }, ++ { VSFTP_C_ISO1 , VSFTP_C_1252 , VSFTP_CS_ISO1 , VSFTP_CS_1252 }, ++ { VSFTP_C_ISO15 , VSFTP_C_UTF8 , VSFTP_CS_ISO15 , VSFTP_CS_UTF8WEST }, ++ { VSFTP_C_ISO15 , VSFTP_C_ISO1 , VSFTP_CS_ISO15 , VSFTP_CS_ISO1 }, ++ { VSFTP_C_ISO15 , VSFTP_C_1252 , VSFTP_CS_ISO15 , VSFTP_CS_1252 }, ++ { VSFTP_C_1252 , VSFTP_C_UTF8 , VSFTP_CS_1252 , VSFTP_CS_UTF8WEST }, ++ { VSFTP_C_1252 , VSFTP_C_ISO1 , VSFTP_CS_1252 , VSFTP_CS_ISO1 }, ++ { VSFTP_C_1252 , VSFTP_C_ISO15 , VSFTP_CS_1252 , VSFTP_CS_ISO15 }, ++#endif ++ // Central European ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++ { VSFTP_C_UTF8 , VSFTP_C_ISO2 , VSFTP_CS_UTF8CENT , VSFTP_CS_ISO2 }, ++ { VSFTP_C_UTF8 , VSFTP_C_ISO16 , VSFTP_CS_UTF8CENT , VSFTP_CS_ISO16 }, ++ { VSFTP_C_UTF8 , VSFTP_C_1250 , VSFTP_CS_UTF8CENT , VSFTP_CS_1250 }, ++ { VSFTP_C_ISO2 , VSFTP_C_UTF8 , VSFTP_CS_ISO2 , VSFTP_CS_UTF8CENT }, ++ { VSFTP_C_ISO2 , VSFTP_C_ISO16 , VSFTP_CS_ISO2 , VSFTP_CS_ISO16 }, ++ { VSFTP_C_ISO2 , VSFTP_C_1250 , VSFTP_CS_ISO2 , VSFTP_CS_1250 }, ++ { VSFTP_C_ISO16 , VSFTP_C_UTF8 , VSFTP_CS_ISO16 , VSFTP_CS_UTF8CENT }, ++ { VSFTP_C_ISO16 , VSFTP_C_ISO2 , VSFTP_CS_ISO16 , VSFTP_CS_ISO2 }, ++ { VSFTP_C_ISO16 , VSFTP_C_1250 , VSFTP_CS_ISO16 , VSFTP_CS_1250 }, ++ { VSFTP_C_1250 , VSFTP_C_UTF8 , VSFTP_CS_1250 , VSFTP_CS_UTF8CENT }, ++ { VSFTP_C_1250 , VSFTP_C_ISO2 , VSFTP_CS_1250 , VSFTP_CS_ISO2 }, ++ { VSFTP_C_1250 , VSFTP_C_ISO16 , VSFTP_CS_1250 , VSFTP_CS_ISO16 }, ++#endif ++ // Soutern European ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++ { VSFTP_C_UTF8 , VSFTP_C_ISO3 , VSFTP_CS_UTF8SOUT , VSFTP_CS_ISO3 }, ++ { VSFTP_C_ISO3 , VSFTP_C_UTF8 , VSFTP_CS_ISO3 , VSFTP_CS_UTF8SOUT }, ++#endif ++ ++ { 0, 0, 0, 0 } ++}; ++ ++map_ptr map_array[] = ++{ ++ 0, ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++ codepage_utf8cyr_array, codepage_win1251_array, codepage_koi8r_array, ++ codepage_ibm866_array, codepage_iso5_array, codepage_koi8u_array, ++#else ++ 0, 0, 0, 0, 0, ++#endif ++ ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++ codepage_utf8west_array, codepage_iso1_array, codepage_iso15_array, ++ codepage_win1252_array, ++#else ++ 0, 0, 0, 0, ++#endif ++ ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++ codepage_utf8cent_array, codepage_iso2_array, codepage_iso16_array, ++ codepage_win1250_array, ++#else ++ 0, 0, 0, 0, ++#endif ++ ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++ codepage_utf8sout_array, codepage_iso3_array, ++#else ++ 0, 0, ++#endif ++ ++ 0 ++}; ++ ++/* Initial table for work with unprintable chars */ ++map_ptr init_array[] = ++{ ++ 0, ++ codepage_utf8_array, ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++ codepage_win1251_array, codepage_koi8r_array, codepage_ibm866_array, ++ codepage_iso5_array, codepage_koi8u_array, ++#else ++ 0, 0, 0, 0, ++#endif ++ ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++ codepage_iso1_array, codepage_iso15_array, codepage_win1252_array, ++#else ++ 0, 0, 0, ++#endif ++ ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++ codepage_iso2_array, codepage_iso16_array, codepage_win1250_array, ++#else ++ 0, 0, 0, ++#endif ++ ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++ codepage_iso3_array, ++#else ++ 0, ++#endif ++ ++ 0 ++}; ++ ++map_ptr localMap = 0, remoteMap = 0; ++map_ptr localTbl = 0, remoteTbl = 0; ++ ++void char_convertion(struct mystr* p_str, int direction, char unprintable); ++void InitTables(map_ptr* map, map_ptr* table, int indexx); ++static int char_len(unsigned int s); ++static unsigned int bsearch_index(map_ptr map, unsigned int low, unsigned int high, unsigned int char_code); ++ ++const char* vsf_charconv_charset_name(int code) ++{ ++ int i = 0; ++ while (available_charsets_array [i].p_charset_name && available_charsets_array [i].p_variable != code) i++; ++ return available_charsets_array [i].p_charset_name; ++} ++ ++int vsf_charconv_codepage(const char* p_str) ++{ ++ const struct available_charsets* charsets = available_charsets_array; ++ ++ while (charsets->p_charset_name != 0) ++ { ++ if (!vsf_sysutil_strcmp(charsets->p_charset_name, p_str)) ++ { ++ return charsets->p_variable; ++ } ++ charsets++; ++ } ++ ++ return 0; ++} ++ ++int vsf_charconv_avail_convertion(int localCode, int remoteCode) ++{ ++ const struct available_convertions* aconv = available_convertions_array; ++ ++ while (aconv->local != 0) ++ { ++ if (localCode == aconv->local && remoteCode == aconv->remote) ++ { ++ InitTables(&localMap, &localTbl, aconv->localCharset); ++ InitTables(&remoteMap, &remoteTbl, aconv->remoteCharset); ++ return 1; ++ } ++ aconv++; ++ } ++ ++ return 0; ++} ++ ++void vsf_charconv_init_local_codepage(int localCode) ++{ ++ if (!localCode) ++ { ++ return; ++ } ++ ++ localTbl = init_array [localCode]; ++ localMap = vsf_sysutil_malloc((localTbl [0].order + 1) * sizeof(_codepage_map)); ++ localMap [0].char_code = localTbl [0].char_code; ++ localMap [0].order = localTbl [0].order; ++ ++ int indexx = 1; ++ while (localTbl [indexx].char_code) ++ { ++ if (localTbl [indexx].order) ++ { ++ localMap [localTbl [indexx].order].char_code = localTbl [indexx].char_code; ++ localMap [localTbl [indexx].order].order = indexx; ++ } ++ indexx++; ++ } ++ ++ return; ++} ++ ++void vsf_charconv_convert(struct vsf_session* p_sess, struct mystr* p_str, int direction) ++{ ++ if (!p_sess->enable_conversion || !p_sess->remote_charset || !tunable_local_codepage) return; ++ ++ char_convertion(p_str, direction, '?'); ++} ++ ++void vsf_charconv_replace_unprintable(struct mystr* p_str, char new_char) ++{ ++ if (localMap) char_convertion(p_str, VSFTP_CONVDIRECT_UNPRINTABLE, new_char); ++} ++ ++void InitTables(map_ptr* map, map_ptr* table, int indexx) ++{ ++ *table = map_array [indexx]; ++ ++ if (*map) vsf_sysutil_free(*map); ++ ++ *map = vsf_sysutil_malloc(((*table) [0].order + 1) * sizeof(_codepage_map)); ++ (*map) [0].char_code = (*table) [0].char_code; ++ (*map) [0].order = (*table) [0].order; ++ ++ indexx = 1; ++ while ((*table) [indexx].char_code) ++ { ++ if ((*table) [indexx].order) ++ { ++ (*map) [(*table) [indexx].order].char_code = (*table) [indexx].char_code; ++ (*map) [(*table) [indexx].order].order = indexx; ++ } ++ indexx++; ++ } ++ ++ return; ++} ++ ++static int char_len(unsigned int s) ++{ ++ int len = 1; ++ if ((s & 0x80) == 0x00) len = 1; ++ else if ((s & 0xe0) == 0xc0) len = 2; ++ else if ((s & 0xf0) == 0xe0) len = 3; ++ else if ((s & 0xf8) == 0xf0) len = 4; ++// else if ((s & 0xfc) == 0xf8) len = 5; ++// else if ((s & 0xfe) == 0xce) len = 6; ++ return (len); ++} ++ ++static unsigned int bsearch_index(map_ptr map, unsigned int low, unsigned int high, unsigned int char_code) ++{ ++ unsigned int m, l = low, r = high; ++ ++ m = (l + r) >> 1; ++ while ((m != 0) && (map [m].char_code != char_code)) ++ { ++ if (map [m].char_code < char_code) l = m + 1; ++ else ++ if (map [m].char_code > char_code) r = m - 1; ++ if (l > r) ++ return 0; ++ else ++ m = (l + r) >> 1; ++ } ++ ++ if (m) m = map [m].order; ++ return m; ++} ++ ++void char_convertion(struct mystr* p_str, int direction, char unprintable) ++{ ++ const char* srcbuf; ++ unsigned int srclen; ++ char* dstbuf; ++ map_ptr src, dst; ++ unsigned int sl; ++ unsigned int srcpos = 0, dstpos = 0; ++ unsigned int char_code = 0; ++ ++ srclen = str_getlen(p_str); // Len of source string ++ srcbuf = str_getbuf(p_str); ++ ++ if (direction == VSFTP_CONVDIRECT_FORWARD) ++ { ++ src = localMap; ++ dst = remoteTbl; ++ } ++ else ++ if (direction == VSFTP_CONVDIRECT_BACKWARD) ++ { ++ src = remoteMap; ++ dst = localTbl; ++ } ++ else ++ { ++ src = localMap; ++ dst = localTbl; ++ } ++ ++ if (!src || !dst) ++ { ++ return; ++ } ++ ++ dstbuf = vsf_sysutil_malloc(srclen * dst [0].char_code + dst [0].char_code); ++ ++ while (srcpos < srclen) ++ { ++ char_code = (unsigned char)srcbuf [srcpos++]; ++ if (src [0].char_code > 1) ++ { ++ sl = char_len (char_code); ++ while (sl-- > 1) ++ { ++ char_code = (char_code << 8) | (unsigned char)srcbuf [srcpos++]; ++ } ++ } ++ ++ if (char_code > 127) ++ { ++ sl = bsearch_index (src, 1, src [0].order, char_code); ++ char_code = 0; ++ if (sl) char_code = dst [sl].char_code; ++ } ++ ++ if (char_code == 13 || char_code == 10) ++ { ++ char_code = 0; ++ } ++ else ++ if (char_code < 32 && char_code != 9) ++ { ++ char_code = (unsigned int)unprintable; ++ } ++ ++ if (char_code > 0 || direction != VSFTP_CONVDIRECT_UNPRINTABLE) ++ { ++ if (char_code & 0xff000000) dstbuf [dstpos++] = (char)((char_code >> 24) & 0xff); ++ if (char_code & 0x00ff0000) dstbuf [dstpos++] = (char)((char_code >> 16) & 0xff); ++ if (char_code & 0x0000ff00) dstbuf [dstpos++] = (char)((char_code >> 8) & 0xff); ++ if (char_code & 0x000000ff) dstbuf [dstpos++] = (char)((char_code ) & 0xff); ++ } ++ } ++ ++ dstbuf [dstpos] = '\0'; ++ ++ str_empty(p_str); ++ str_append_text(p_str, dstbuf); ++ ++ vsf_sysutil_free(dstbuf); ++} ++ +diff -urN vsftpd-2.0.5.org/charconv.h vsftpd-2.0.5/charconv.h +--- vsftpd-2.0.5.org/charconv.h 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/charconv.h 2008-01-13 19:32:11.000000000 +0200 +@@ -0,0 +1,182 @@ ++#ifndef VSF_CHARCONV_H ++#define VSF_CHARCONV_H ++ ++struct mystr; ++struct vsf_session; ++ ++#define VSFTP_CHARCONV_SUPPORT_CYRILLIC ++#define VSFTP_CHARCONV_SUPPORT_WESTERN ++#define VSFTP_CHARCONV_SUPPORT_CENTRAL ++#define VSFTP_CHARCONV_SUPPORT_SOUTERN ++ ++#define VSFTP_CONVDIRECT_FORWARD 1 ++#define VSFTP_CONVDIRECT_UNPRINTABLE 0 ++#define VSFTP_CONVDIRECT_BACKWARD -1 ++ ++/* Supported charset for convertion */ ++#define VSFTP_CP_NONE "NONE" ++#define VSFTP_CP_UTF_8 "UTF-8" ++#define VSFTP_CP_UTF8 "UTF8" ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++#define VSFTP_CP_WIN_1251 "Win-1251" ++#define VSFTP_CP_WIN1251 "WIN1251" ++#define VSFTP_CP_CP1251 "CP1251" ++#define VSFTP_CP_1251 "1251" ++#define VSFTP_CP_KOI8_R "Koi8-R" ++#define VSFTP_CP_KOI8R "KOI8R" ++#define VSFTP_CP_KOI8_U "Koi8-U" ++#define VSFTP_CP_KOI8U "KOI8U" ++#define VSFTP_CP_CP878 "CP878" ++#define VSFTP_CP_878 "878" ++#define VSFTP_CP_CP878R "CP878R" ++#define VSFTP_CP_878R "878R" ++#define VSFTP_CP_CP878U "CP878U" ++#define VSFTP_CP_878U "878U" ++#define VSFTP_CP_IBM866 "IBM866" ++#define VSFTP_CP_CP866 "CP866" ++#define VSFTP_CP_866 "866" ++#define VSFTP_CP_ISO8859_5 "ISO-8859-5" ++#define VSFTP_CP_ISO5 "ISO5" ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++#define VSFTP_CP_ISO8859_1 "ISO-8859-1" ++#define VSFTP_CP_ISO1 "ISO1" ++#define VSFTP_CP_LATIN1 "LATIN1" ++#define VSFTP_CP_ISO8859_15 "ISO-8859-15" ++#define VSFTP_CP_ISO15 "ISO15" ++#define VSFTP_CP_LATIN9 "LATIN9" ++#define VSFTP_CP_WIN_1252 "Win-1252" ++#define VSFTP_CP_WIN1252 "WIN1252" ++#define VSFTP_CP_CP1252 "CP1252" ++#define VSFTP_CP_1252 "1252" ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++#define VSFTP_CP_ISO8859_2 "ISO-8859-2" ++#define VSFTP_CP_ISO2 "ISO2" ++#define VSFTP_CP_LATIN2 "LATIN2" ++#define VSFTP_CP_ISO8859_16 "ISO-8859-16" ++#define VSFTP_CP_ISO16 "ISO16" ++#define VSFTP_CP_WIN_1250 "Win-1250" ++#define VSFTP_CP_WIN1250 "WIN1250" ++#define VSFTP_CP_CP1250 "CP1250" ++#define VSFTP_CP_1250 "1250" ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++#define VSFTP_CP_ISO8859_3 "ISO-8859-3" ++#define VSFTP_CP_ISO3 "ISO3" ++#define VSFTP_CP_LATIN3 "LATIN3" ++#endif ++ ++#define VSFTP_C_NONE 0 ++#define VSFTP_C_UTF8 1 ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++#define VSFTP_C_1251 2 ++#define VSFTP_C_878R 3 ++#define VSFTP_C_866 4 ++#define VSFTP_C_ISO5 5 ++#define VSFTP_C_878U 6 ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++#define VSFTP_C_ISO1 7 ++#define VSFTP_C_ISO15 8 ++#define VSFTP_C_1252 9 ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++#define VSFTP_C_ISO2 10 ++#define VSFTP_C_ISO16 11 ++#define VSFTP_C_1250 12 ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++#define VSFTP_C_ISO3 13 ++#endif ++ ++#define VSFTP_CS_NONE 0 ++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC ++#define VSFTP_CS_UTF8CYR 1 ++#define VSFTP_CS_1251 2 ++#define VSFTP_CS_878R 3 ++#define VSFTP_CS_866 4 ++#define VSFTP_CS_ISO5 5 ++#define VSFTP_CS_878U 6 ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN ++#define VSFTP_CS_UTF8WEST 7 ++#define VSFTP_CS_ISO1 8 ++#define VSFTP_CS_ISO15 9 ++#define VSFTP_CS_1252 10 ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL ++#define VSFTP_CS_UTF8CENT 11 ++#define VSFTP_CS_ISO2 12 ++#define VSFTP_CS_ISO16 13 ++#define VSFTP_CS_1250 14 ++#endif ++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN ++#define VSFTP_CS_UTF8SOUT 15 ++#define VSFTP_CS_ISO3 16 ++#endif ++ ++struct codepage_map ++{ ++ unsigned int char_code; // The first element is count bytes of char. ++ unsigned int order; ++} _codepage_map; ++ ++typedef struct codepage_map * map_ptr; ++ ++extern map_ptr localMap; ++ ++/* vsf_charconv_charset_name() ++ * PURPOSE ++ * Get charset name by code; ++ * PARAMETERS ++ * code - Internal charset code ++ * RETURNS ++ * Charset name ++ */ ++const char* vsf_charconv_charset_name(int code); ++ ++/* vsf_charconv_codepage() ++ * PURPOSE ++ * Get internal charset code ++ * PARAMETERS ++ * p_str - String value with code page ++ * RETURNS ++ * Internal charset code ++ */ ++int vsf_charconv_codepage(const char* p_str); ++ ++/* vsf_charconv_init_local_codepage(int localCode) ++ * PURPOSE ++ * Init local codepage for work with unprintable chars ++ * PARAMETERS ++ * localCode - source internal code page ++ */ ++void vsf_charconv_init_local_codepage(int localCode); ++ ++/* vsf_charconv_avail_convertion() ++ * PURPOS ++ * Checking for available convertion characters ++ * PARAMETERS ++ * localCode - source internal code page ++ * remoteCode - destination internal code page ++ * RETURNS ++ * Available ot not converion ++ */ ++int vsf_charconv_avail_convertion(int localCode, int remoteCode); ++ ++/* vsf_charconv_convert() ++ * PURPOSE ++ * Converting string via charsets ++ * PARAMETERS ++ * p_sess - the current session object ++ * p_str - string for convertin ++ * direction - converting from host to remoute charsetr or otherwise ++ */ ++void vsf_charconv_convert(struct vsf_session* p_sess, struct mystr* p_str, int direction); ++ ++/* vsf_charconv_replace_unprintable ++ */ ++void vsf_charconv_replace_unprintable(struct mystr* p_str, char new_char); ++ ++#endif +diff -urN vsftpd-2.0.5.org/char_maps/central.map vsftpd-2.0.5/char_maps/central.map +--- vsftpd-2.0.5.org/char_maps/central.map 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/char_maps/central.map 2008-01-13 20:09:59.000000000 +0200 +@@ -0,0 +1,738 @@ ++/* ++ !!! WARNING !!! ++ DON'T CHANGE ORDER OF CHARS ++*/ ++ ++struct codepage_map codepage_utf8cent_array[] = ++ { ++ { 0x000003, 178 }, // max size , char count ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00c280, 1 }, ++ { 0x00c281, 2 }, ++ { 0x00c282, 3 }, ++ { 0x00c283, 4 }, ++ { 0x00c284, 5 }, ++ { 0x00c285, 6 }, ++ { 0x00c286, 7 }, ++ { 0x00c287, 8 }, ++ { 0x00c288, 9 }, ++ { 0x00c289, 10 }, ++ { 0x00c28a, 11 }, ++ { 0x00c28b, 12 }, ++ { 0x00c28c, 13 }, ++ { 0x00c28d, 14 }, ++ { 0x00c28e, 15 }, ++ { 0x00c28f, 16 }, ++ { 0x00c290, 17 }, ++ { 0x00c291, 18 }, ++ { 0x00c292, 19 }, ++ { 0x00c293, 20 }, ++ { 0x00c294, 21 }, ++ { 0x00c295, 22 }, ++ { 0x00c296, 23 }, ++ { 0x00c297, 24 }, ++ { 0x00c298, 25 }, ++ { 0x00c299, 26 }, ++ { 0x00c29a, 27 }, ++ { 0x00c29b, 28 }, ++ { 0x00c29c, 29 }, ++ { 0x00c29d, 30 }, ++ { 0x00c29e, 31 }, ++ { 0x00c29f, 32 }, ++ { 0x00c2a0, 33 }, ++ { 0x00c2a4, 34 }, ++ { 0x00c2a6, 35 }, ++ { 0x00c2a7, 36 }, ++ { 0x00c2a8, 37 }, ++ { 0x00c2a9, 38 }, ++ { 0x00c2ab, 39 }, ++ { 0x00c2ad, 40 }, ++ { 0x00c2ad, 41 }, ++ { 0x00c2ae, 42 }, ++ { 0x00c2b0, 43 }, ++ { 0x00c2b1, 44 }, ++ { 0x00c2b4, 45 }, ++ { 0x00c2b5, 46 }, ++ { 0x00c2b6, 47 }, ++ { 0x00c2b7, 48 }, ++ { 0x00c2b8, 49 }, ++ { 0x00c2bb, 50 }, ++ { 0x00c380, 51 }, ++ { 0x00c381, 52 }, ++ { 0x00c382, 53 }, ++ { 0x00c384, 54 }, ++ { 0x00c386, 55 }, ++ { 0x00c387, 56 }, ++ { 0x00c388, 57 }, ++ { 0x00c389, 58 }, ++ { 0x00c38a, 59 }, ++ { 0x00c38b, 60 }, ++ { 0x00c38c, 61 }, ++ { 0x00c38d, 62 }, ++ { 0x00c38e, 63 }, ++ { 0x00c38f, 64 }, ++ { 0x00c392, 65 }, ++ { 0x00c393, 66 }, ++ { 0x00c394, 67 }, ++ { 0x00c396, 68 }, ++ { 0x00c397, 69 }, ++ { 0x00c399, 70 }, ++ { 0x00c39a, 71 }, ++ { 0x00c39b, 72 }, ++ { 0x00c39c, 73 }, ++ { 0x00c39d, 74 }, ++ { 0x00c39f, 75 }, ++ { 0x00c3a0, 76 }, ++ { 0x00c3a1, 77 }, ++ { 0x00c3a2, 78 }, ++ { 0x00c3a4, 79 }, ++ { 0x00c3a6, 80 }, ++ { 0x00c3a7, 81 }, ++ { 0x00c3a8, 82 }, ++ { 0x00c3a9, 83 }, ++ { 0x00c3aa, 84 }, ++ { 0x00c3ab, 85 }, ++ { 0x00c3ac, 86 }, ++ { 0x00c3ad, 87 }, ++ { 0x00c3ae, 88 }, ++ { 0x00c3af, 89 }, ++ { 0x00c3b2, 90 }, ++ { 0x00c3b3, 91 }, ++ { 0x00c3b4, 92 }, ++ { 0x00c3b6, 93 }, ++ { 0x00c3b7, 94 }, ++ { 0x00c3b9, 95 }, ++ { 0x00c3ba, 96 }, ++ { 0x00c3bb, 97 }, ++ { 0x00c3bc, 98 }, ++ { 0x00c3bd, 99 }, ++ { 0x00c3bf, 100 }, ++ { 0x00c482, 101 }, ++ { 0x00c483, 102 }, ++ { 0x00c484, 103 }, ++ { 0x00c485, 104 }, ++ { 0x00c486, 105 }, ++ { 0x00c487, 106 }, ++ { 0x00c48c, 107 }, ++ { 0x00c48d, 108 }, ++ { 0x00c48e, 109 }, ++ { 0x00c48f, 110 }, ++ { 0x00c490, 111 }, ++ { 0x00c491, 112 }, ++ { 0x00c498, 113 }, ++ { 0x00c499, 114 }, ++ { 0x00c49a, 115 }, ++ { 0x00c49b, 116 }, ++ { 0x00c4b9, 117 }, ++ { 0x00c4ba, 118 }, ++ { 0x00c4bd, 119 }, ++ { 0x00c4be, 120 }, ++ { 0x00c581, 121 }, ++ { 0x00c582, 122 }, ++ { 0x00c583, 123 }, ++ { 0x00c584, 124 }, ++ { 0x00c587, 125 }, ++ { 0x00c588, 126 }, ++ { 0x00c590, 127 }, ++ { 0x00c591, 128 }, ++ { 0x00c592, 129 }, ++ { 0x00c593, 130 }, ++ { 0x00c594, 131 }, ++ { 0x00c595, 132 }, ++ { 0x00c598, 133 }, ++ { 0x00c599, 134 }, ++ { 0x00c59a, 135 }, ++ { 0x00c59b, 136 }, ++ { 0x00c59e, 137 }, ++ { 0x00c59f, 138 }, ++ { 0x00c5a0, 139 }, ++ { 0x00c5a1, 140 }, ++ { 0x00c5a2, 141 }, ++ { 0x00c5a3, 142 }, ++ { 0x00c5a4, 143 }, ++ { 0x00c5a5, 144 }, ++ { 0x00c5ae, 145 }, ++ { 0x00c5af, 146 }, ++ { 0x00c5b0, 147 }, ++ { 0x00c5b1, 148 }, ++ { 0x00c5b8, 149 }, ++ { 0x00c5b9, 150 }, ++ { 0x00c5ba, 151 }, ++ { 0x00c5bb, 152 }, ++ { 0x00c5bc, 153 }, ++ { 0x00c5bd, 154 }, ++ { 0x00c5be, 155 }, ++ { 0x00cb87, 156 }, ++ { 0x00cb98, 157 }, ++ { 0x00cb99, 158 }, ++ { 0x00c89a, 159 }, ++ { 0x00cb9b, 160 }, ++ { 0x00cb9d, 161 }, ++ { 0xe28093, 162 }, ++ { 0xe28094, 163 }, ++ { 0xe28098, 164 }, ++ { 0xe28099, 165 }, ++ { 0xe2809a, 166 }, ++ { 0xe2809c, 167 }, ++ { 0xe2809d, 168 }, ++ { 0xe2809e, 169 }, ++ { 0xe280a0, 170 }, ++ { 0xe280a1, 171 }, ++ { 0xe280a2, 172 }, ++ { 0xe280a6, 173 }, ++ { 0xe280b0, 174 }, ++ { 0xe280b9, 175 }, ++ { 0xe280ba, 176 }, ++ { 0xe282ac, 177 }, ++ { 0xe284a2, 178 }, ++ { 0x000000, 0 } ++ }; ++ ++struct codepage_map codepage_iso2_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a3, 36 }, ++ { 0x00a4, 37 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00b3, 52 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x00be, 63 }, ++ { 0x00bf, 64 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c3, 68 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x00d8, 89 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f1, 114 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x00f8, 121 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x00fd, 126 }, ++ { 0x00fe, 127 }, ++ { 0x00ff, 128 }, ++ { 0x0000, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_iso16_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a7, 40 }, ++ { 0x003f, 0 }, ++ { 0x00a9, 42 }, ++ { 0x00ab, 44 }, ++ { 0x00ad, 46 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x003f, 0 }, ++ { 0x00bb, 60 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c4, 69 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d6, 87 }, ++ { 0x003f, 0 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x003f, 0 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e4, 101 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f6, 119 }, ++ { 0x003f, 0 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x003f, 0 }, ++ { 0x00ff, 128 }, ++ { 0x00c3, 68 }, ++ { 0x00e3, 100 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00c5, 70 }, ++ { 0x00e5, 102 }, ++ { 0x00b2, 51 }, ++ { 0x00b9, 58 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00d0, 81 }, ++ { 0x00f0, 113 }, ++ { 0x00dd, 94 }, ++ { 0x00fd, 126 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a3, 36 }, ++ { 0x00b3, 52 }, ++ { 0x00d1, 82 }, ++ { 0x00f1, 114 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00d5, 86 }, ++ { 0x00f5, 118 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00d7, 88 }, ++ { 0x00f7, 120 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a6, 39 }, ++ { 0x00a8, 41 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00d8, 89 }, ++ { 0x00f8, 121 }, ++ { 0x00be, 63 }, ++ { 0x00ac, 45 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00bf, 64 }, ++ { 0x00b4, 53 }, ++ { 0x00b8, 57 }, ++ { 0x003f, 0 }, ++ { 0x00aa, 43 }, ++ { 0x00ba, 59 }, ++ { 0x00de, 95 }, ++ { 0x00fe, 127 }, ++ { 0x00b5, 54 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a5, 38 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a4, 37 }, ++ { 0x003f, 0 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_win1250_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x0081, 2 }, ++ { 0x0083, 4 }, ++ { 0x0088, 9 }, ++ { 0x0090, 17 }, ++ { 0x0098, 25 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a0, 33 }, ++ { 0x00a4, 37 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00bb, 60 }, ++ { 0x003f, 0 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c4, 69 }, ++ { 0x003f, 0 }, ++ { 0x00c7, 72 }, ++ { 0x003f, 0 }, ++ { 0x00c9, 74 }, ++ { 0x003f, 0 }, ++ { 0x00cb, 76 }, ++ { 0x003f, 0 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x003f, 0 }, ++ { 0x00da, 91 }, ++ { 0x003f, 0 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00df, 96 }, ++ { 0x003f, 0 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e4, 101 }, ++ { 0x003f, 0 }, ++ { 0x00e7, 104 }, ++ { 0x003f, 0 }, ++ { 0x00e9, 106 }, ++ { 0x003f, 0 }, ++ { 0x00eb, 108 }, ++ { 0x003f, 0 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x003f, 0 }, ++ { 0x00fa, 123 }, ++ { 0x003f, 0 }, ++ { 0x00fc, 125 }, ++ { 0x00fd, 126 }, ++ { 0x003f, 0 }, ++ { 0x00c3, 68 }, ++ { 0x00e3, 100 }, ++ { 0x00a5, 38 }, ++ { 0x00b9, 58 }, ++ { 0x00c6, 71 }, ++ { 0x00e6, 103 }, ++ { 0x00c8, 73 }, ++ { 0x00e8, 105 }, ++ { 0x00cf, 80 }, ++ { 0x00ef, 112 }, ++ { 0x00d0, 81 }, ++ { 0x00f0, 113 }, ++ { 0x00ca, 75 }, ++ { 0x00ea, 107 }, ++ { 0x00cc, 77 }, ++ { 0x00ec, 109 }, ++ { 0x00c5, 70 }, ++ { 0x00e5, 102 }, ++ { 0x00bc, 61 }, ++ { 0x00be, 63 }, ++ { 0x00a3, 36 }, ++ { 0x00b3, 52 }, ++ { 0x00d1, 82 }, ++ { 0x00f1, 114 }, ++ { 0x00d2, 83 }, ++ { 0x00f2, 115 }, ++ { 0x00d5, 86 }, ++ { 0x00f5, 118 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00c0, 65 }, ++ { 0x00e0, 97 }, ++ { 0x00d8, 89 }, ++ { 0x00f8, 121 }, ++ { 0x008c, 13 }, ++ { 0x009c, 29 }, ++ { 0x00aa, 43 }, ++ { 0x00ba, 59 }, ++ { 0x008a, 11 }, ++ { 0x009a, 27 }, ++ { 0x00de, 95 }, ++ { 0x00fe, 127 }, ++ { 0x008d, 14 }, ++ { 0x009d, 30 }, ++ { 0x00d9, 90 }, ++ { 0x00f9, 122 }, ++ { 0x00db, 92 }, ++ { 0x00fb, 124 }, ++ { 0x003f, 0 }, ++ { 0x008f, 16 }, ++ { 0x009f, 32 }, ++ { 0x00af, 48 }, ++ { 0x00bf, 64 }, ++ { 0x008e, 15 }, ++ { 0x009e, 31 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00ff, 128 }, ++ { 0x003f, 0 }, ++ { 0x00b2, 51 }, ++ { 0x00bd, 62 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0082, 3 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0084, 5 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0095, 22 }, ++ { 0x0085, 6 }, ++ { 0x0089, 10 }, ++ { 0x008b, 12 }, ++ { 0x009b, 28 }, ++ { 0x0080, 1 }, ++ { 0x0099, 26 }, ++ { 0x0000, 0 } ++ }; ++ +diff -urN vsftpd-2.0.5.org/char_maps/cyrillic.map vsftpd-2.0.5/char_maps/cyrillic.map +--- vsftpd-2.0.5.org/char_maps/cyrillic.map 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/char_maps/cyrillic.map 2008-01-13 20:09:59.000000000 +0200 +@@ -0,0 +1,1349 @@ ++/* ++ !!! WARNING !!! ++ DON'T CHANGE ORDER OF CHARS ++*/ ++ ++struct codepage_map codepage_utf8cyr_array[] = ++ { ++ { 0x000003, 216 }, // max size , char count ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00c280, 1 }, ++ { 0x00c281, 2 }, ++ { 0x00c282, 3 }, ++ { 0x00c283, 4 }, ++ { 0x00c284, 5 }, ++ { 0x00c285, 6 }, ++ { 0x00c286, 7 }, ++ { 0x00c287, 8 }, ++ { 0x00c288, 9 }, ++ { 0x00c289, 10 }, ++ { 0x00c28a, 11 }, ++ { 0x00c28b, 12 }, ++ { 0x00c28c, 13 }, ++ { 0x00c28d, 14 }, ++ { 0x00c28e, 15 }, ++ { 0x00c28f, 16 }, ++ { 0x00c290, 17 }, ++ { 0x00c291, 18 }, ++ { 0x00c292, 19 }, ++ { 0x00c293, 20 }, ++ { 0x00c294, 21 }, ++ { 0x00c295, 22 }, ++ { 0x00c296, 23 }, ++ { 0x00c297, 24 }, ++ { 0x00c298, 25 }, ++ { 0x00c299, 26 }, ++ { 0x00c29a, 27 }, ++ { 0x00c29b, 28 }, ++ { 0x00c29c, 29 }, ++ { 0x00c29d, 30 }, ++ { 0x00c29e, 31 }, ++ { 0x00c29f, 32 }, ++ { 0x00c2a0, 33 }, ++ { 0x00c2a4, 34 }, ++ { 0x00c2a6, 35 }, ++ { 0x00c2a7, 36 }, ++ { 0x00c2a9, 37 }, ++ { 0x00c2ab, 38 }, ++ { 0x00c2ac, 39 }, ++ { 0x00c2ad, 40 }, ++ { 0x00c2ae, 41 }, ++ { 0x00c2b0, 42 }, ++ { 0x00c2b1, 43 }, ++ { 0x00c2b2, 44 }, ++ { 0x00c2b5, 45 }, ++ { 0x00c2b6, 46 }, ++ { 0x00c2b7, 47 }, ++ { 0x00c2bb, 48 }, ++ { 0x00c3b7, 49 }, ++ { 0x00d081, 50 }, ++ { 0x00d082, 51 }, ++ { 0x00d083, 52 }, ++ { 0x00d084, 53 }, ++ { 0x00d085, 54 }, ++ { 0x00d086, 55 }, ++ { 0x00d087, 56 }, ++ { 0x00d088, 57 }, ++ { 0x00d089, 58 }, ++ { 0x00d08a, 59 }, ++ { 0x00d08b, 60 }, ++ { 0x00d08c, 61 }, ++ { 0x00d08e, 62 }, ++ { 0x00d08f, 63 }, ++ { 0x00d090, 64 }, ++ { 0x00d091, 65 }, ++ { 0x00d092, 66 }, ++ { 0x00d093, 67 }, ++ { 0x00d094, 68 }, ++ { 0x00d095, 69 }, ++ { 0x00d096, 70 }, ++ { 0x00d097, 71 }, ++ { 0x00d098, 72 }, ++ { 0x00d099, 73 }, ++ { 0x00d09a, 74 }, ++ { 0x00d09b, 75 }, ++ { 0x00d09c, 76 }, ++ { 0x00d09d, 77 }, ++ { 0x00d09e, 78 }, ++ { 0x00d09f, 79 }, ++ { 0x00d0a0, 80 }, ++ { 0x00d0a1, 81 }, ++ { 0x00d0a2, 82 }, ++ { 0x00d0a3, 83 }, ++ { 0x00d0a4, 84 }, ++ { 0x00d0a5, 85 }, ++ { 0x00d0a6, 86 }, ++ { 0x00d0a7, 87 }, ++ { 0x00d0a8, 88 }, ++ { 0x00d0a9, 89 }, ++ { 0x00d0aa, 90 }, ++ { 0x00d0ab, 91 }, ++ { 0x00d0ac, 92 }, ++ { 0x00d0ad, 93 }, ++ { 0x00d0ae, 94 }, ++ { 0x00d0af, 95 }, ++ { 0x00d0b0, 96 }, ++ { 0x00d0b1, 97 }, ++ { 0x00d0b2, 98 }, ++ { 0x00d0b3, 99 }, ++ { 0x00d0b4, 100 }, ++ { 0x00d0b5, 101 }, ++ { 0x00d0b6, 102 }, ++ { 0x00d0b7, 103 }, ++ { 0x00d0b8, 104 }, ++ { 0x00d0b9, 105 }, ++ { 0x00d0ba, 106 }, ++ { 0x00d0bb, 107 }, ++ { 0x00d0bc, 108 }, ++ { 0x00d0bd, 109 }, ++ { 0x00d0be, 110 }, ++ { 0x00d0bf, 111 }, ++ { 0x00d180, 112 }, ++ { 0x00d181, 113 }, ++ { 0x00d182, 114 }, ++ { 0x00d183, 115 }, ++ { 0x00d184, 116 }, ++ { 0x00d185, 117 }, ++ { 0x00d186, 118 }, ++ { 0x00d187, 119 }, ++ { 0x00d188, 120 }, ++ { 0x00d189, 121 }, ++ { 0x00d18a, 122 }, ++ { 0x00d18b, 123 }, ++ { 0x00d18c, 124 }, ++ { 0x00d18d, 125 }, ++ { 0x00d18e, 126 }, ++ { 0x00d18f, 127 }, ++ { 0x00d191, 128 }, ++ { 0x00d192, 129 }, ++ { 0x00d193, 130 }, ++ { 0x00d194, 131 }, ++ { 0x00d195, 132 }, ++ { 0x00d196, 133 }, ++ { 0x00d197, 134 }, ++ { 0x00d198, 135 }, ++ { 0x00d199, 136 }, ++ { 0x00d19a, 137 }, ++ { 0x00d19b, 138 }, ++ { 0x00d19c, 139 }, ++ { 0x00d19e, 140 }, ++ { 0x00d19f, 141 }, ++ { 0x00d290, 142 }, ++ { 0x00d291, 143 }, ++ { 0xe28093, 144 }, ++ { 0xe28094, 145 }, ++ { 0xe28098, 146 }, ++ { 0xe28099, 147 }, ++ { 0xe2809a, 148 }, ++ { 0xe2809c, 149 }, ++ { 0xe2809d, 150 }, ++ { 0xe2809e, 151 }, ++ { 0xe280a0, 152 }, ++ { 0xe280a1, 153 }, ++ { 0xe280a2, 154 }, ++ { 0xe280a6, 155 }, ++ { 0xe280b0, 156 }, ++ { 0xe280b9, 157 }, ++ { 0xe280ba, 158 }, ++ { 0xe28496, 159 }, ++ { 0xe284a2, 160 }, ++ { 0xe28899, 161 }, ++ { 0xe2889a, 162 }, ++ { 0xe28988, 163 }, ++ { 0xe289a4, 164 }, ++ { 0xe289a5, 165 }, ++ { 0xe28ca0, 166 }, ++ { 0xe28ca1, 167 }, ++ { 0xe29480, 168 }, ++ { 0xe29482, 169 }, ++ { 0xe2948c, 170 }, ++ { 0xe29490, 171 }, ++ { 0xe29494, 172 }, ++ { 0xe29498, 173 }, ++ { 0xe2949c, 174 }, ++ { 0xe294a4, 175 }, ++ { 0xe294ac, 176 }, ++ { 0xe294b4, 177 }, ++ { 0xe294bc, 178 }, ++ { 0xe29590, 179 }, ++ { 0xe29591, 180 }, ++ { 0xe29592, 181 }, ++ { 0xe29593, 182 }, ++ { 0xe29594, 183 }, ++ { 0xe29595, 184 }, ++ { 0xe29596, 185 }, ++ { 0xe29597, 186 }, ++ { 0xe29598, 187 }, ++ { 0xe29599, 188 }, ++ { 0xe2959a, 189 }, ++ { 0xe2959b, 190 }, ++ { 0xe2959c, 191 }, ++ { 0xe2959d, 192 }, ++ { 0xe2959e, 193 }, ++ { 0xe2959f, 194 }, ++ { 0xe295a0, 195 }, ++ { 0xe295a1, 196 }, ++ { 0xe295a2, 197 }, ++ { 0xe295a3, 198 }, ++ { 0xe295a4, 199 }, ++ { 0xe295a5, 200 }, ++ { 0xe295a6, 201 }, ++ { 0xe295a7, 202 }, ++ { 0xe295a8, 203 }, ++ { 0xe295a9, 204 }, ++ { 0xe295aa, 205 }, ++ { 0xe295ab, 206 }, ++ { 0xe295ac, 207 }, ++ { 0xe29680, 208 }, ++ { 0xe29684, 209 }, ++ { 0xe29688, 210 }, ++ { 0xe2968c, 211 }, ++ { 0xe29690, 212 }, ++ { 0xe29691, 213 }, ++ { 0xe29692, 214 }, ++ { 0xe29693, 215 }, ++ { 0xe296a0, 216 }, ++ { 0x000000, 0 } ++ }; ++ ++struct codepage_map codepage_win1251_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x0088, 9 }, ++ { 0x0098, 25 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a0, 33 }, ++ { 0x00a4, 37 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a9, 42 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x003f, 0 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00bb, 60 }, ++ { 0x003f, 0 }, ++ { 0x00a8, 41 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x00aa, 43 }, ++ { 0x00bd, 62 }, ++ { 0x00b2, 51 }, ++ { 0x00af, 48 }, ++ { 0x00a3, 36 }, ++ { 0x008a, 11 }, ++ { 0x008c, 13 }, ++ { 0x008e, 15 }, ++ { 0x008d, 14 }, ++ { 0x00a1, 34 }, ++ { 0x008f, 16 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c3, 68 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x00d8, 89 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f1, 114 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x00f8, 121 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x00fd, 126 }, ++ { 0x00fe, 127 }, ++ { 0x00ff, 128 }, ++ { 0x00b8, 57 }, ++ { 0x0090, 17 }, ++ { 0x0083, 4 }, ++ { 0x00ba, 59 }, ++ { 0x00be, 63 }, ++ { 0x00b3, 52 }, ++ { 0x00bf, 64 }, ++ { 0x00bc, 61 }, ++ { 0x009a, 27 }, ++ { 0x009c, 29 }, ++ { 0x009e, 31 }, ++ { 0x009d, 30 }, ++ { 0x00a2, 35 }, ++ { 0x009f, 32 }, ++ { 0x00a5, 38 }, ++ { 0x00b4, 53 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0082, 3 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0084, 5 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0095, 22 }, ++ { 0x0085, 6 }, ++ { 0x0089, 10 }, ++ { 0x008b, 12 }, ++ { 0x009b, 28 }, ++ { 0x00b9, 58 }, ++ { 0x0099, 26 }, ++ { 0x0000, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_koi8u_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x009a, 27 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00bf, 64 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x009c, 29 }, ++ { 0x003f, 0 }, ++ { 0x009d, 30 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x009e, 31 }, ++ { 0x003f, 0 }, ++ { 0x009f, 32 }, ++ { 0x00b3, 52 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00b4, 53 }, ++ { 0x003f, 0 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00f7, 120 }, ++ { 0x00e7, 104 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00f6, 119 }, ++ { 0x00fa, 123 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00e6, 103 }, ++ { 0x00e8, 105 }, ++ { 0x00e3, 100 }, ++ { 0x00fe, 127 }, ++ { 0x00fb, 124 }, ++ { 0x00fd, 126 }, ++ { 0x00ff, 128 }, ++ { 0x00f9, 122 }, ++ { 0x00f8, 121 }, ++ { 0x00fc, 125 }, ++ { 0x00e0, 97 }, ++ { 0x00f1, 114 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00d7, 88 }, ++ { 0x00c7, 72 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00d6, 87 }, ++ { 0x00da, 91 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00c6, 71 }, ++ { 0x00c8, 73 }, ++ { 0x00c3, 68 }, ++ { 0x00de, 95 }, ++ { 0x00db, 92 }, ++ { 0x00dd, 94 }, ++ { 0x00df, 96 }, ++ { 0x00d9, 90 }, ++ { 0x00d8, 89 }, ++ { 0x00dc, 93 }, ++ { 0x00c0, 65 }, ++ { 0x00d1, 82 }, ++ { 0x00a3, 36 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a4, 37 }, ++ { 0x003f, 0 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00bd, 62 }, ++ { 0x00ad, 46 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x0093, 20 }, ++ { 0x009b, 28 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x003f, 0 }, ++ { 0x00a5, 38 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x003f, 0 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x003f, 0 }, ++ { 0x00b5, 54 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x003f, 0 }, ++ { 0x00be, 63 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0094, 21 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_ibm866_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00ff, 128 }, ++ { 0x00fd, 126 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f8, 121 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00fa, 123 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f0, 113 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f2, 115 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f4, 117 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f6, 119 }, ++ { 0x003f, 0 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a3, 36 }, ++ { 0x00a4, 37 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f1, 114 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f3, 116 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f5, 118 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f7, 120 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00fc, 125 }, ++ { 0x003f, 0 }, ++ { 0x00f9, 122 }, ++ { 0x00fb, 124 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00c4, 69 }, ++ { 0x00b3, 52 }, ++ { 0x00da, 91 }, ++ { 0x00bf, 64 }, ++ { 0x00c0, 65 }, ++ { 0x00d9, 90 }, ++ { 0x00c3, 68 }, ++ { 0x00b4, 53 }, ++ { 0x00c2, 67 }, ++ { 0x00c1, 66 }, ++ { 0x00c5, 70 }, ++ { 0x00cd, 78 }, ++ { 0x00ba, 59 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00c9, 74 }, ++ { 0x00b8, 57 }, ++ { 0x00b7, 56 }, ++ { 0x00bb, 60 }, ++ { 0x00d4, 85 }, ++ { 0x00d3, 84 }, ++ { 0x00c8, 73 }, ++ { 0x00be, 63 }, ++ { 0x00bd, 62 }, ++ { 0x00bc, 61 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00cc, 77 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b9, 58 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00cb, 76 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00ca, 75 }, ++ { 0x00d8, 89 }, ++ { 0x00d7, 88 }, ++ { 0x00ce, 79 }, ++ { 0x00df, 96 }, ++ { 0x00dc, 93 }, ++ { 0x00db, 92 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00fe, 127 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_iso5_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00fd, 126 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00ad, 46 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a3, 36 }, ++ { 0x00a4, 37 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00b3, 52 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x00be, 63 }, ++ { 0x00bf, 64 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c3, 68 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x00d8, 89 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f1, 114 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x00f8, 121 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x00fe, 127 }, ++ { 0x00ff, 128 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00f0, 113 }, ++ { 0x0000, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_koi8r_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x009a, 27 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x00bf, 64 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x009c, 29 }, ++ { 0x005f, 0 }, ++ { 0x009d, 30 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x009e, 31 }, ++ { 0x005f, 0 }, ++ { 0x009f, 32 }, ++ { 0x00b3, 52 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00f7, 120 }, ++ { 0x00e7, 104 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00f6, 119 }, ++ { 0x00fa, 123 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00e6, 103 }, ++ { 0x00e8, 105 }, ++ { 0x00e3, 100 }, ++ { 0x00fe, 127 }, ++ { 0x00fb, 124 }, ++ { 0x00fd, 126 }, ++ { 0x00ff, 128 }, ++ { 0x00f9, 122 }, ++ { 0x00f8, 121 }, ++ { 0x00fc, 125 }, ++ { 0x00e0, 97 }, ++ { 0x00f1, 114 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00d7, 88 }, ++ { 0x00c7, 72 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00d6, 87 }, ++ { 0x00da, 91 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00c6, 71 }, ++ { 0x00c8, 73 }, ++ { 0x00c3, 68 }, ++ { 0x00de, 95 }, ++ { 0x00db, 92 }, ++ { 0x00dd, 94 }, ++ { 0x00df, 96 }, ++ { 0x00d9, 90 }, ++ { 0x00d8, 89 }, ++ { 0x00dc, 93 }, ++ { 0x00c0, 65 }, ++ { 0x00d1, 82 }, ++ { 0x00a3, 36 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x005f, 0 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x0093, 20 }, ++ { 0x009b, 28 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a4, 37 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x00be, 63 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0094, 21 }, ++ { 0x0000, 0 } ++ }; ++ +diff -urN vsftpd-2.0.5.org/char_maps/soutern.map vsftpd-2.0.5/char_maps/soutern.map +--- vsftpd-2.0.5.org/char_maps/soutern.map 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/char_maps/soutern.map 2008-01-13 20:09:59.000000000 +0200 +@@ -0,0 +1,259 @@ ++/* ++ !!! WARNING !!! ++ DON'T CHANGE ORDER OF CHARS ++*/ ++ ++struct codepage_map codepage_utf8sout_array[] = ++ { ++ { 0x000003, 121 }, // max size , char count ++ { 0x00c280, 1 }, ++ { 0x00c281, 2 }, ++ { 0x00c282, 3 }, ++ { 0x00c283, 4 }, ++ { 0x00c284, 5 }, ++ { 0x00c285, 6 }, ++ { 0x00c286, 7 }, ++ { 0x00c287, 8 }, ++ { 0x00c288, 9 }, ++ { 0x00c289, 10 }, ++ { 0x00c28a, 11 }, ++ { 0x00c28b, 12 }, ++ { 0x00c28c, 13 }, ++ { 0x00c28d, 14 }, ++ { 0x00c28e, 15 }, ++ { 0x00c28f, 16 }, ++ { 0x00c290, 17 }, ++ { 0x00c291, 18 }, ++ { 0x00c292, 19 }, ++ { 0x00c293, 20 }, ++ { 0x00c294, 21 }, ++ { 0x00c295, 22 }, ++ { 0x00c296, 23 }, ++ { 0x00c297, 24 }, ++ { 0x00c298, 25 }, ++ { 0x00c299, 26 }, ++ { 0x00c29a, 27 }, ++ { 0x00c29b, 28 }, ++ { 0x00c29c, 29 }, ++ { 0x00c29d, 30 }, ++ { 0x00c29e, 31 }, ++ { 0x00c29f, 32 }, ++ { 0x00c2a0, 33 }, ++ { 0x00c2a3, 34 }, ++ { 0x00c2a4, 35 }, ++ { 0x00c2a7, 36 }, ++ { 0x00c2a8, 37 }, ++ { 0x00c2ad, 38 }, ++ { 0x00c2b0, 39 }, ++ { 0x00c2b2, 40 }, ++ { 0x00c2b3, 41 }, ++ { 0x00c2b4, 42 }, ++ { 0x00c2b5, 43 }, ++ { 0x00c2b7, 44 }, ++ { 0x00c2b8, 45 }, ++ { 0x00c2bd, 46 }, ++ { 0x00c380, 47 }, ++ { 0x00c381, 48 }, ++ { 0x00c382, 49 }, ++ { 0x00c384, 50 }, ++ { 0x00c387, 51 }, ++ { 0x00c388, 52 }, ++ { 0x00c389, 53 }, ++ { 0x00c38a, 54 }, ++ { 0x00c38b, 55 }, ++ { 0x00c38c, 56 }, ++ { 0x00c38d, 57 }, ++ { 0x00c38e, 58 }, ++ { 0x00c38f, 59 }, ++ { 0x00c391, 60 }, ++ { 0x00c392, 61 }, ++ { 0x00c393, 62 }, ++ { 0x00c394, 63 }, ++ { 0x00c396, 64 }, ++ { 0x00c397, 65 }, ++ { 0x00c399, 66 }, ++ { 0x00c39a, 67 }, ++ { 0x00c39b, 68 }, ++ { 0x00c39c, 69 }, ++ { 0x00c39f, 70 }, ++ { 0x00c3a0, 71 }, ++ { 0x00c3a1, 72 }, ++ { 0x00c3a2, 73 }, ++ { 0x00c3a4, 74 }, ++ { 0x00c3a7, 75 }, ++ { 0x00c3a8, 76 }, ++ { 0x00c3a9, 77 }, ++ { 0x00c3aa, 78 }, ++ { 0x00c3ab, 79 }, ++ { 0x00c3ac, 80 }, ++ { 0x00c3ad, 81 }, ++ { 0x00c3ae, 82 }, ++ { 0x00c3af, 83 }, ++ { 0x00c3b1, 84 }, ++ { 0x00c3b2, 85 }, ++ { 0x00c3b3, 86 }, ++ { 0x00c3b4, 87 }, ++ { 0x00c3b6, 88 }, ++ { 0x00c3b7, 89 }, ++ { 0x00c3b9, 90 }, ++ { 0x00c3ba, 91 }, ++ { 0x00c3bb, 92 }, ++ { 0x00c3bc, 93 }, ++ { 0x00c488, 94 }, ++ { 0x00c489, 95 }, ++ { 0x00c48a, 96 }, ++ { 0x00c48b, 97 }, ++ { 0x00c49c, 98 }, ++ { 0x00c49d, 99 }, ++ { 0x00c49e, 100 }, ++ { 0x00c49f, 101 }, ++ { 0x00c4a0, 102 }, ++ { 0x00c4a1, 103 }, ++ { 0x00c4a4, 104 }, ++ { 0x00c4a5, 105 }, ++ { 0x00c4a6, 106 }, ++ { 0x00c4a7, 107 }, ++ { 0x00c4b0, 108 }, ++ { 0x00c4b1, 109 }, ++ { 0x00c4b4, 110 }, ++ { 0x00c4b5, 111 }, ++ { 0x00c59c, 112 }, ++ { 0x00c59d, 113 }, ++ { 0x00c59e, 114 }, ++ { 0x00c59f, 115 }, ++ { 0x00c5ac, 116 }, ++ { 0x00c5ad, 117 }, ++ { 0x00c5bb, 118 }, ++ { 0x00c5bc, 119 }, ++ { 0x00cb98, 120 }, ++ { 0x00cb99, 121 }, ++ { 0x000000, 0 } ++ }; ++ ++struct codepage_map codepage_iso3_array[] = ++ { ++ { 0x0001, 121 }, // max size , char count for control ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x00a3, 36 }, ++ { 0x00a4, 37 }, ++ { 0x00a7, 39 }, ++ { 0x00a8, 40 }, ++ { 0x00ad, 45 }, ++ { 0x00b0, 47 }, ++ { 0x00b2, 49 }, ++ { 0x00b3, 50 }, ++ { 0x00b4, 51 }, ++ { 0x00b5, 52 }, ++ { 0x00b7, 54 }, ++ { 0x00b8, 55 }, ++ { 0x00bd, 60 }, ++ { 0x00c0, 62 }, ++ { 0x00c1, 63 }, ++ { 0x00c2, 64 }, ++ { 0x00c4, 65 }, ++ { 0x00c7, 68 }, ++ { 0x00c8, 69 }, ++ { 0x00c9, 70 }, ++ { 0x00ca, 71 }, ++ { 0x00cb, 72 }, ++ { 0x00cc, 73 }, ++ { 0x00cd, 74 }, ++ { 0x00ce, 75 }, ++ { 0x00cf, 76 }, ++ { 0x00d1, 77 }, ++ { 0x00d2, 78 }, ++ { 0x00d3, 79 }, ++ { 0x00d4, 80 }, ++ { 0x00d6, 82 }, ++ { 0x00d7, 83 }, ++ { 0x00d9, 85 }, ++ { 0x00da, 86 }, ++ { 0x00db, 87 }, ++ { 0x00dc, 88 }, ++ { 0x00df, 91 }, ++ { 0x00e0, 92 }, ++ { 0x00e1, 93 }, ++ { 0x00e2, 94 }, ++ { 0x00e4, 95 }, ++ { 0x00e7, 98 }, ++ { 0x00e8, 99 }, ++ { 0x00e9, 100 }, ++ { 0x00ea, 101 }, ++ { 0x00eb, 102 }, ++ { 0x00ec, 103 }, ++ { 0x00ed, 104 }, ++ { 0x00ee, 105 }, ++ { 0x00ef, 106 }, ++ { 0x00f1, 107 }, ++ { 0x00f2, 108 }, ++ { 0x00f3, 109 }, ++ { 0x00f4, 110 }, ++ { 0x00f6, 112 }, ++ { 0x00f7, 113 }, ++ { 0x00f9, 115 }, ++ { 0x00fa, 116 }, ++ { 0x00fb, 117 }, ++ { 0x00fc, 118 }, ++ { 0x00c6, 67 }, ++ { 0x00e6, 97 }, ++ { 0x00c5, 66 }, ++ { 0x00e5, 96 }, ++ { 0x00d8, 84 }, ++ { 0x00f8, 114 }, ++ { 0x00ab, 43 }, ++ { 0x00bb, 58 }, ++ { 0x00d5, 81 }, ++ { 0x00f5, 111 }, ++ { 0x00a6, 38 }, ++ { 0x00b6, 53 }, ++ { 0x00a1, 34 }, ++ { 0x00b1, 48 }, ++ { 0x00a9, 41 }, ++ { 0x00b9, 56 }, ++ { 0x00ac, 44 }, ++ { 0x00bc, 59 }, ++ { 0x00de, 90 }, ++ { 0x00fe, 120 }, ++ { 0x00aa, 42 }, ++ { 0x00ba, 57 }, ++ { 0x00dd, 89 }, ++ { 0x00fd, 119 }, ++ { 0x00af, 46 }, ++ { 0x00bf, 61 }, ++ { 0x00a2, 35 }, ++ { 0x00ff, 121 }, ++ { 0x0000, 0 } ++ }; ++ +diff -urN vsftpd-2.0.5.org/char_maps/utf8.map vsftpd-2.0.5/char_maps/utf8.map +--- vsftpd-2.0.5.org/char_maps/utf8.map 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/char_maps/utf8.map 2008-01-13 20:09:59.000000000 +0200 +@@ -0,0 +1,393 @@ ++/* ++ !!! WARNING !!! ++ DON'T CHANGE ORDER OF CHARS ++*/ ++ ++struct codepage_map codepage_utf8_array[] = ++ { ++ { 0x000003, 382 }, // max size , char count ++ { 0x00c280, 1 }, ++ { 0x00c281, 2 }, ++ { 0x00c282, 3 }, ++ { 0x00c283, 4 }, ++ { 0x00c284, 5 }, ++ { 0x00c285, 6 }, ++ { 0x00c286, 7 }, ++ { 0x00c287, 8 }, ++ { 0x00c288, 9 }, ++ { 0x00c289, 10 }, ++ { 0x00c28a, 11 }, ++ { 0x00c28b, 12 }, ++ { 0x00c28c, 13 }, ++ { 0x00c28d, 14 }, ++ { 0x00c28e, 15 }, ++ { 0x00c28f, 16 }, ++ { 0x00c290, 17 }, ++ { 0x00c291, 18 }, ++ { 0x00c292, 19 }, ++ { 0x00c293, 20 }, ++ { 0x00c294, 21 }, ++ { 0x00c295, 22 }, ++ { 0x00c296, 23 }, ++ { 0x00c297, 24 }, ++ { 0x00c298, 25 }, ++ { 0x00c299, 26 }, ++ { 0x00c29a, 27 }, ++ { 0x00c29b, 28 }, ++ { 0x00c29c, 29 }, ++ { 0x00c29d, 30 }, ++ { 0x00c29e, 31 }, ++ { 0x00c29f, 32 }, ++ { 0x00c2a0, 33 }, ++ { 0x00c2a1, 34 }, ++ { 0x00c2a2, 35 }, ++ { 0x00c2a3, 36 }, ++ { 0x00c2a4, 37 }, ++ { 0x00c2a5, 38 }, ++ { 0x00c2a6, 39 }, ++ { 0x00c2a7, 40 }, ++ { 0x00c2a8, 41 }, ++ { 0x00c2a9, 42 }, ++ { 0x00c2aa, 43 }, ++ { 0x00c2ab, 44 }, ++ { 0x00c2ac, 45 }, ++ { 0x00c2ad, 46 }, ++ { 0x00c2ae, 47 }, ++ { 0x00c2af, 48 }, ++ { 0x00c2b0, 49 }, ++ { 0x00c2b1, 50 }, ++ { 0x00c2b2, 51 }, ++ { 0x00c2b3, 52 }, ++ { 0x00c2b4, 53 }, ++ { 0x00c2b5, 54 }, ++ { 0x00c2b6, 55 }, ++ { 0x00c2b7, 56 }, ++ { 0x00c2b8, 57 }, ++ { 0x00c2b9, 58 }, ++ { 0x00c2ba, 59 }, ++ { 0x00c2bb, 60 }, ++ { 0x00c2bc, 61 }, ++ { 0x00c2bd, 62 }, ++ { 0x00c2be, 63 }, ++ { 0x00c2bf, 64 }, ++ { 0x00c380, 65 }, ++ { 0x00c381, 66 }, ++ { 0x00c382, 67 }, ++ { 0x00c383, 68 }, ++ { 0x00c384, 69 }, ++ { 0x00c385, 70 }, ++ { 0x00c386, 71 }, ++ { 0x00c387, 72 }, ++ { 0x00c388, 73 }, ++ { 0x00c389, 74 }, ++ { 0x00c38a, 75 }, ++ { 0x00c38b, 76 }, ++ { 0x00c38c, 77 }, ++ { 0x00c38d, 78 }, ++ { 0x00c38e, 79 }, ++ { 0x00c38f, 80 }, ++ { 0x00c390, 81 }, ++ { 0x00c391, 82 }, ++ { 0x00c392, 83 }, ++ { 0x00c393, 84 }, ++ { 0x00c394, 85 }, ++ { 0x00c395, 86 }, ++ { 0x00c396, 87 }, ++ { 0x00c397, 88 }, ++ { 0x00c398, 89 }, ++ { 0x00c399, 90 }, ++ { 0x00c39a, 91 }, ++ { 0x00c39b, 92 }, ++ { 0x00c39c, 93 }, ++ { 0x00c39d, 94 }, ++ { 0x00c39e, 95 }, ++ { 0x00c39f, 96 }, ++ { 0x00c3a0, 97 }, ++ { 0x00c3a1, 98 }, ++ { 0x00c3a2, 99 }, ++ { 0x00c3a3, 100 }, ++ { 0x00c3a4, 101 }, ++ { 0x00c3a5, 102 }, ++ { 0x00c3a6, 103 }, ++ { 0x00c3a7, 104 }, ++ { 0x00c3a8, 105 }, ++ { 0x00c3a9, 106 }, ++ { 0x00c3aa, 107 }, ++ { 0x00c3ab, 108 }, ++ { 0x00c3ac, 109 }, ++ { 0x00c3ad, 110 }, ++ { 0x00c3ae, 111 }, ++ { 0x00c3af, 112 }, ++ { 0x00c3b0, 113 }, ++ { 0x00c3b1, 114 }, ++ { 0x00c3b2, 115 }, ++ { 0x00c3b3, 116 }, ++ { 0x00c3b4, 117 }, ++ { 0x00c3b5, 118 }, ++ { 0x00c3b6, 119 }, ++ { 0x00c3b7, 120 }, ++ { 0x00c3b8, 121 }, ++ { 0x00c3b9, 122 }, ++ { 0x00c3ba, 123 }, ++ { 0x00c3bb, 124 }, ++ { 0x00c3bc, 125 }, ++ { 0x00c3bd, 126 }, ++ { 0x00c3be, 127 }, ++ { 0x00c3bf, 128 }, ++ { 0x00c482, 129 }, ++ { 0x00c483, 130 }, ++ { 0x00c484, 131 }, ++ { 0x00c485, 132 }, ++ { 0x00c486, 133 }, ++ { 0x00c487, 134 }, ++ { 0x00c488, 135 }, ++ { 0x00c489, 136 }, ++ { 0x00c48a, 137 }, ++ { 0x00c48b, 138 }, ++ { 0x00c48c, 139 }, ++ { 0x00c48d, 140 }, ++ { 0x00c48e, 141 }, ++ { 0x00c48f, 142 }, ++ { 0x00c490, 143 }, ++ { 0x00c491, 144 }, ++ { 0x00c498, 145 }, ++ { 0x00c499, 146 }, ++ { 0x00c49a, 147 }, ++ { 0x00c49b, 148 }, ++ { 0x00c49c, 149 }, ++ { 0x00c49d, 150 }, ++ { 0x00c49e, 151 }, ++ { 0x00c49f, 152 }, ++ { 0x00c4a0, 153 }, ++ { 0x00c4a1, 154 }, ++ { 0x00c4a4, 155 }, ++ { 0x00c4a5, 156 }, ++ { 0x00c4a6, 157 }, ++ { 0x00c4a7, 158 }, ++ { 0x00c4b0, 159 }, ++ { 0x00c4b1, 160 }, ++ { 0x00c4b4, 161 }, ++ { 0x00c4b5, 162 }, ++ { 0x00c4b9, 163 }, ++ { 0x00c4ba, 164 }, ++ { 0x00c4bd, 165 }, ++ { 0x00c4be, 166 }, ++ { 0x00c581, 167 }, ++ { 0x00c582, 168 }, ++ { 0x00c583, 169 }, ++ { 0x00c584, 170 }, ++ { 0x00c587, 171 }, ++ { 0x00c588, 172 }, ++ { 0x00c590, 173 }, ++ { 0x00c591, 174 }, ++ { 0x00c592, 175 }, ++ { 0x00c593, 176 }, ++ { 0x00c594, 177 }, ++ { 0x00c595, 178 }, ++ { 0x00c598, 179 }, ++ { 0x00c599, 180 }, ++ { 0x00c59a, 181 }, ++ { 0x00c59b, 182 }, ++ { 0x00c59c, 183 }, ++ { 0x00c59d, 184 }, ++ { 0x00c59e, 185 }, ++ { 0x00c59f, 186 }, ++ { 0x00c5a0, 187 }, ++ { 0x00c5a1, 188 }, ++ { 0x00c5a2, 189 }, ++ { 0x00c5a3, 190 }, ++ { 0x00c5a4, 191 }, ++ { 0x00c5a5, 192 }, ++ { 0x00c5ac, 193 }, ++ { 0x00c5ad, 194 }, ++ { 0x00c5ae, 195 }, ++ { 0x00c5af, 196 }, ++ { 0x00c5b0, 197 }, ++ { 0x00c5b1, 198 }, ++ { 0x00c5b8, 199 }, ++ { 0x00c5b9, 200 }, ++ { 0x00c5ba, 201 }, ++ { 0x00c5bb, 202 }, ++ { 0x00c5bc, 203 }, ++ { 0x00c5bd, 204 }, ++ { 0x00c5be, 205 }, ++ { 0x00c692, 206 }, ++ { 0x00c89a, 207 }, ++ { 0x00cb86, 208 }, ++ { 0x00cb87, 209 }, ++ { 0x00cb98, 210 }, ++ { 0x00cb99, 211 }, ++ { 0x00cb9b, 212 }, ++ { 0x00cb9c, 213 }, ++ { 0x00cb9d, 214 }, ++ { 0x00d081, 215 }, ++ { 0x00d082, 216 }, ++ { 0x00d083, 217 }, ++ { 0x00d084, 218 }, ++ { 0x00d085, 219 }, ++ { 0x00d086, 220 }, ++ { 0x00d087, 221 }, ++ { 0x00d088, 222 }, ++ { 0x00d089, 223 }, ++ { 0x00d08a, 224 }, ++ { 0x00d08b, 225 }, ++ { 0x00d08c, 226 }, ++ { 0x00d08e, 227 }, ++ { 0x00d08f, 228 }, ++ { 0x00d090, 229 }, ++ { 0x00d091, 230 }, ++ { 0x00d092, 231 }, ++ { 0x00d093, 232 }, ++ { 0x00d094, 233 }, ++ { 0x00d095, 234 }, ++ { 0x00d096, 235 }, ++ { 0x00d097, 236 }, ++ { 0x00d098, 237 }, ++ { 0x00d099, 238 }, ++ { 0x00d09a, 239 }, ++ { 0x00d09b, 240 }, ++ { 0x00d09c, 241 }, ++ { 0x00d09d, 242 }, ++ { 0x00d09e, 243 }, ++ { 0x00d09f, 244 }, ++ { 0x00d0a0, 245 }, ++ { 0x00d0a1, 246 }, ++ { 0x00d0a2, 247 }, ++ { 0x00d0a3, 248 }, ++ { 0x00d0a4, 249 }, ++ { 0x00d0a5, 250 }, ++ { 0x00d0a6, 251 }, ++ { 0x00d0a7, 252 }, ++ { 0x00d0a8, 253 }, ++ { 0x00d0a9, 254 }, ++ { 0x00d0aa, 255 }, ++ { 0x00d0ab, 256 }, ++ { 0x00d0ac, 257 }, ++ { 0x00d0ad, 258 }, ++ { 0x00d0ae, 259 }, ++ { 0x00d0af, 260 }, ++ { 0x00d0b0, 261 }, ++ { 0x00d0b1, 262 }, ++ { 0x00d0b2, 263 }, ++ { 0x00d0b3, 264 }, ++ { 0x00d0b4, 265 }, ++ { 0x00d0b5, 266 }, ++ { 0x00d0b6, 267 }, ++ { 0x00d0b7, 268 }, ++ { 0x00d0b8, 269 }, ++ { 0x00d0b9, 270 }, ++ { 0x00d0ba, 271 }, ++ { 0x00d0bb, 272 }, ++ { 0x00d0bc, 273 }, ++ { 0x00d0bd, 274 }, ++ { 0x00d0be, 275 }, ++ { 0x00d0bf, 276 }, ++ { 0x00d180, 277 }, ++ { 0x00d181, 278 }, ++ { 0x00d182, 279 }, ++ { 0x00d183, 280 }, ++ { 0x00d184, 281 }, ++ { 0x00d185, 282 }, ++ { 0x00d186, 283 }, ++ { 0x00d187, 284 }, ++ { 0x00d188, 285 }, ++ { 0x00d189, 286 }, ++ { 0x00d18a, 287 }, ++ { 0x00d18b, 288 }, ++ { 0x00d18c, 289 }, ++ { 0x00d18d, 290 }, ++ { 0x00d18e, 291 }, ++ { 0x00d18f, 292 }, ++ { 0x00d191, 293 }, ++ { 0x00d192, 294 }, ++ { 0x00d193, 295 }, ++ { 0x00d194, 296 }, ++ { 0x00d195, 297 }, ++ { 0x00d196, 298 }, ++ { 0x00d197, 299 }, ++ { 0x00d198, 300 }, ++ { 0x00d199, 301 }, ++ { 0x00d19a, 302 }, ++ { 0x00d19b, 303 }, ++ { 0x00d19c, 304 }, ++ { 0x00d19e, 305 }, ++ { 0x00d19f, 306 }, ++ { 0x00d290, 307 }, ++ { 0x00d291, 308 }, ++ { 0xe28093, 309 }, ++ { 0xe28094, 310 }, ++ { 0xe28098, 311 }, ++ { 0xe28099, 312 }, ++ { 0xe2809a, 313 }, ++ { 0xe2809c, 314 }, ++ { 0xe2809d, 315 }, ++ { 0xe2809e, 316 }, ++ { 0xe280a0, 317 }, ++ { 0xe280a1, 318 }, ++ { 0xe280a2, 319 }, ++ { 0xe280a6, 320 }, ++ { 0xe280b0, 321 }, ++ { 0xe280b9, 322 }, ++ { 0xe280ba, 323 }, ++ { 0xe282ac, 324 }, ++ { 0xe28496, 325 }, ++ { 0xe284a2, 326 }, ++ { 0xe28899, 327 }, ++ { 0xe2889a, 328 }, ++ { 0xe28988, 329 }, ++ { 0xe289a4, 330 }, ++ { 0xe289a5, 331 }, ++ { 0xe28ca0, 332 }, ++ { 0xe28ca1, 333 }, ++ { 0xe29480, 334 }, ++ { 0xe29482, 335 }, ++ { 0xe2948c, 336 }, ++ { 0xe29490, 337 }, ++ { 0xe29494, 338 }, ++ { 0xe29498, 339 }, ++ { 0xe2949c, 340 }, ++ { 0xe294a4, 341 }, ++ { 0xe294ac, 342 }, ++ { 0xe294b4, 343 }, ++ { 0xe294bc, 344 }, ++ { 0xe29590, 345 }, ++ { 0xe29591, 346 }, ++ { 0xe29592, 347 }, ++ { 0xe29593, 348 }, ++ { 0xe29594, 349 }, ++ { 0xe29595, 350 }, ++ { 0xe29596, 351 }, ++ { 0xe29597, 352 }, ++ { 0xe29598, 353 }, ++ { 0xe29599, 354 }, ++ { 0xe2959a, 355 }, ++ { 0xe2959b, 356 }, ++ { 0xe2959c, 357 }, ++ { 0xe2959d, 358 }, ++ { 0xe2959e, 359 }, ++ { 0xe2959f, 360 }, ++ { 0xe295a0, 361 }, ++ { 0xe295a1, 362 }, ++ { 0xe295a2, 363 }, ++ { 0xe295a3, 364 }, ++ { 0xe295a4, 365 }, ++ { 0xe295a5, 366 }, ++ { 0xe295a6, 367 }, ++ { 0xe295a7, 368 }, ++ { 0xe295a8, 369 }, ++ { 0xe295a9, 370 }, ++ { 0xe295aa, 371 }, ++ { 0xe295ab, 372 }, ++ { 0xe295ac, 373 }, ++ { 0xe29680, 374 }, ++ { 0xe29684, 375 }, ++ { 0xe29688, 376 }, ++ { 0xe2968c, 377 }, ++ { 0xe29690, 378 }, ++ { 0xe29691, 379 }, ++ { 0xe29692, 380 }, ++ { 0xe29693, 381 }, ++ { 0xe296a0, 382 }, ++ { 0x000000, 0 } ++ }; ++ +diff -urN vsftpd-2.0.5.org/char_maps/western.map vsftpd-2.0.5/char_maps/western.map +--- vsftpd-2.0.5.org/char_maps/western.map 1970-01-01 03:00:00.000000000 +0300 ++++ vsftpd-2.0.5/char_maps/western.map 2008-01-13 20:09:59.000000000 +0200 +@@ -0,0 +1,669 @@ ++/* ++ !!! WARNING !!! ++ DON'T CHANGE ORDER OF CHARS ++*/ ++ ++struct codepage_map codepage_utf8west_array[] = ++ { ++ { 0x000003, 155 }, // max size , char count ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00003f, 0 }, ++ { 0x00c280, 1 }, ++ { 0x00c281, 2 }, ++ { 0x00c282, 3 }, ++ { 0x00c283, 4 }, ++ { 0x00c284, 5 }, ++ { 0x00c285, 6 }, ++ { 0x00c286, 7 }, ++ { 0x00c287, 8 }, ++ { 0x00c288, 9 }, ++ { 0x00c289, 10 }, ++ { 0x00c28a, 11 }, ++ { 0x00c28b, 12 }, ++ { 0x00c28c, 13 }, ++ { 0x00c28d, 14 }, ++ { 0x00c28e, 15 }, ++ { 0x00c28f, 16 }, ++ { 0x00c290, 17 }, ++ { 0x00c291, 18 }, ++ { 0x00c292, 19 }, ++ { 0x00c293, 20 }, ++ { 0x00c294, 21 }, ++ { 0x00c295, 22 }, ++ { 0x00c296, 23 }, ++ { 0x00c297, 24 }, ++ { 0x00c298, 25 }, ++ { 0x00c299, 26 }, ++ { 0x00c29a, 27 }, ++ { 0x00c29b, 28 }, ++ { 0x00c29c, 29 }, ++ { 0x00c29d, 30 }, ++ { 0x00c29e, 31 }, ++ { 0x00c29f, 32 }, ++ { 0x00c2a0, 33 }, ++ { 0x00c2a1, 34 }, ++ { 0x00c2a2, 35 }, ++ { 0x00c2a3, 36 }, ++ { 0x00c2a4, 37 }, ++ { 0x00c2a5, 38 }, ++ { 0x00c2a6, 39 }, ++ { 0x00c2a7, 40 }, ++ { 0x00c2a8, 41 }, ++ { 0x00c2a9, 42 }, ++ { 0x00c2aa, 43 }, ++ { 0x00c2ab, 44 }, ++ { 0x00c2ac, 45 }, ++ { 0x00c2ad, 46 }, ++ { 0x00c2ae, 47 }, ++ { 0x00c2af, 48 }, ++ { 0x00c2b0, 49 }, ++ { 0x00c2b1, 50 }, ++ { 0x00c2b2, 51 }, ++ { 0x00c2b3, 52 }, ++ { 0x00c2b4, 53 }, ++ { 0x00c2b5, 54 }, ++ { 0x00c2b6, 55 }, ++ { 0x00c2b7, 56 }, ++ { 0x00c2b8, 57 }, ++ { 0x00c2b9, 58 }, ++ { 0x00c2ba, 59 }, ++ { 0x00c2bb, 60 }, ++ { 0x00c2bc, 61 }, ++ { 0x00c2bd, 62 }, ++ { 0x00c2be, 63 }, ++ { 0x00c2bf, 64 }, ++ { 0x00c380, 65 }, ++ { 0x00c381, 66 }, ++ { 0x00c382, 67 }, ++ { 0x00c383, 68 }, ++ { 0x00c384, 69 }, ++ { 0x00c385, 70 }, ++ { 0x00c386, 71 }, ++ { 0x00c387, 72 }, ++ { 0x00c388, 73 }, ++ { 0x00c389, 74 }, ++ { 0x00c38a, 75 }, ++ { 0x00c38b, 76 }, ++ { 0x00c38c, 77 }, ++ { 0x00c38d, 78 }, ++ { 0x00c38e, 79 }, ++ { 0x00c38f, 80 }, ++ { 0x00c390, 81 }, ++ { 0x00c391, 82 }, ++ { 0x00c392, 83 }, ++ { 0x00c393, 84 }, ++ { 0x00c394, 85 }, ++ { 0x00c395, 86 }, ++ { 0x00c396, 87 }, ++ { 0x00c397, 88 }, ++ { 0x00c398, 89 }, ++ { 0x00c399, 90 }, ++ { 0x00c39a, 91 }, ++ { 0x00c39b, 92 }, ++ { 0x00c39c, 93 }, ++ { 0x00c39d, 94 }, ++ { 0x00c39e, 95 }, ++ { 0x00c39f, 96 }, ++ { 0x00c3a0, 97 }, ++ { 0x00c3a1, 98 }, ++ { 0x00c3a2, 99 }, ++ { 0x00c3a3, 100 }, ++ { 0x00c3a4, 101 }, ++ { 0x00c3a5, 102 }, ++ { 0x00c3a6, 103 }, ++ { 0x00c3a7, 104 }, ++ { 0x00c3a8, 105 }, ++ { 0x00c3a9, 106 }, ++ { 0x00c3aa, 107 }, ++ { 0x00c3ab, 108 }, ++ { 0x00c3ac, 109 }, ++ { 0x00c3ad, 110 }, ++ { 0x00c3ae, 111 }, ++ { 0x00c3af, 112 }, ++ { 0x00c3b0, 113 }, ++ { 0x00c3b1, 114 }, ++ { 0x00c3b2, 115 }, ++ { 0x00c3b3, 116 }, ++ { 0x00c3b4, 117 }, ++ { 0x00c3b5, 118 }, ++ { 0x00c3b6, 119 }, ++ { 0x00c3b7, 120 }, ++ { 0x00c3b8, 121 }, ++ { 0x00c3b9, 122 }, ++ { 0x00c3ba, 123 }, ++ { 0x00c3bb, 124 }, ++ { 0x00c3bc, 125 }, ++ { 0x00c3bd, 126 }, ++ { 0x00c3be, 127 }, ++ { 0x00c3bf, 128 }, ++ { 0x00c592, 129 }, ++ { 0x00c593, 130 }, ++ { 0x00c5a0, 131 }, ++ { 0x00c5a1, 132 }, ++ { 0x00c5b8, 133 }, ++ { 0x00c5bd, 134 }, ++ { 0x00c5be, 135 }, ++ { 0x00c692, 136 }, ++ { 0x00cb86, 137 }, ++ { 0x00cb9c, 138 }, ++ { 0xe28093, 139 }, ++ { 0xe28094, 140 }, ++ { 0xe28098, 141 }, ++ { 0xe28099, 142 }, ++ { 0xe2809a, 143 }, ++ { 0xe2809c, 144 }, ++ { 0xe2809d, 145 }, ++ { 0xe2809e, 146 }, ++ { 0xe280a0, 147 }, ++ { 0xe280a1, 148 }, ++ { 0xe280a2, 149 }, ++ { 0xe280a6, 150 }, ++ { 0xe280b0, 151 }, ++ { 0xe280b9, 152 }, ++ { 0xe280ba, 153 }, ++ { 0xe282ac, 154 }, ++ { 0xe284a2, 155 }, ++ { 0x000000, 0 } ++ }; ++ ++struct codepage_map codepage_iso1_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a3, 36 }, ++ { 0x00a4, 37 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00b3, 52 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x00be, 63 }, ++ { 0x00bf, 64 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c3, 68 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x00d8, 89 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f1, 114 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x00f8, 121 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x00fd, 126 }, ++ { 0x00fe, 127 }, ++ { 0x00ff, 128 }, ++ { 0x0000, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_iso15_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x0080, 1 }, ++ { 0x0081, 2 }, ++ { 0x0082, 3 }, ++ { 0x0083, 4 }, ++ { 0x0084, 5 }, ++ { 0x0085, 6 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0088, 9 }, ++ { 0x0089, 10 }, ++ { 0x008a, 11 }, ++ { 0x008b, 12 }, ++ { 0x008c, 13 }, ++ { 0x008d, 14 }, ++ { 0x008e, 15 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0095, 22 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0098, 25 }, ++ { 0x0099, 26 }, ++ { 0x009a, 27 }, ++ { 0x009b, 28 }, ++ { 0x009c, 29 }, ++ { 0x009d, 30 }, ++ { 0x009e, 31 }, ++ { 0x009f, 32 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a3, 36 }, ++ { 0x003f, 0 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00b3, 52 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x00be, 63 }, ++ { 0x00bf, 64 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c3, 68 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x00d8, 89 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f1, 114 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x00f8, 121 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x00fd, 126 }, ++ { 0x00fe, 127 }, ++ { 0x00ff, 128 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a4, 37 }, ++ { 0x003f, 0 }, ++ { 0x0000, 0 } ++ }; ++ ++struct codepage_map codepage_win1252_array[] = ++ { ++ { 0x0001, 128 }, // max size , char count for control ++ { 0x0081, 2 }, ++ { 0x008d, 14 }, ++ { 0x008f, 16 }, ++ { 0x0090, 17 }, ++ { 0x009d, 30 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x003f, 0 }, ++ { 0x00a0, 33 }, ++ { 0x00a1, 34 }, ++ { 0x00a2, 35 }, ++ { 0x00a3, 36 }, ++ { 0x00a4, 37 }, ++ { 0x00a5, 38 }, ++ { 0x00a6, 39 }, ++ { 0x00a7, 40 }, ++ { 0x00a8, 41 }, ++ { 0x00a9, 42 }, ++ { 0x00aa, 43 }, ++ { 0x00ab, 44 }, ++ { 0x00ac, 45 }, ++ { 0x00ad, 46 }, ++ { 0x00ae, 47 }, ++ { 0x00af, 48 }, ++ { 0x00b0, 49 }, ++ { 0x00b1, 50 }, ++ { 0x00b2, 51 }, ++ { 0x00b3, 52 }, ++ { 0x00b4, 53 }, ++ { 0x00b5, 54 }, ++ { 0x00b6, 55 }, ++ { 0x00b7, 56 }, ++ { 0x00b8, 57 }, ++ { 0x00b9, 58 }, ++ { 0x00ba, 59 }, ++ { 0x00bb, 60 }, ++ { 0x00bc, 61 }, ++ { 0x00bd, 62 }, ++ { 0x00be, 63 }, ++ { 0x00bf, 64 }, ++ { 0x00c0, 65 }, ++ { 0x00c1, 66 }, ++ { 0x00c2, 67 }, ++ { 0x00c3, 68 }, ++ { 0x00c4, 69 }, ++ { 0x00c5, 70 }, ++ { 0x00c6, 71 }, ++ { 0x00c7, 72 }, ++ { 0x00c8, 73 }, ++ { 0x00c9, 74 }, ++ { 0x00ca, 75 }, ++ { 0x00cb, 76 }, ++ { 0x00cc, 77 }, ++ { 0x00cd, 78 }, ++ { 0x00ce, 79 }, ++ { 0x00cf, 80 }, ++ { 0x00d0, 81 }, ++ { 0x00d1, 82 }, ++ { 0x00d2, 83 }, ++ { 0x00d3, 84 }, ++ { 0x00d4, 85 }, ++ { 0x00d5, 86 }, ++ { 0x00d6, 87 }, ++ { 0x00d7, 88 }, ++ { 0x00d8, 89 }, ++ { 0x00d9, 90 }, ++ { 0x00da, 91 }, ++ { 0x00db, 92 }, ++ { 0x00dc, 93 }, ++ { 0x00dd, 94 }, ++ { 0x00de, 95 }, ++ { 0x00df, 96 }, ++ { 0x00e0, 97 }, ++ { 0x00e1, 98 }, ++ { 0x00e2, 99 }, ++ { 0x00e3, 100 }, ++ { 0x00e4, 101 }, ++ { 0x00e5, 102 }, ++ { 0x00e6, 103 }, ++ { 0x00e7, 104 }, ++ { 0x00e8, 105 }, ++ { 0x00e9, 106 }, ++ { 0x00ea, 107 }, ++ { 0x00eb, 108 }, ++ { 0x00ec, 109 }, ++ { 0x00ed, 110 }, ++ { 0x00ee, 111 }, ++ { 0x00ef, 112 }, ++ { 0x00f0, 113 }, ++ { 0x00f1, 114 }, ++ { 0x00f2, 115 }, ++ { 0x00f3, 116 }, ++ { 0x00f4, 117 }, ++ { 0x00f5, 118 }, ++ { 0x00f6, 119 }, ++ { 0x00f7, 120 }, ++ { 0x00f8, 121 }, ++ { 0x00f9, 122 }, ++ { 0x00fa, 123 }, ++ { 0x00fb, 124 }, ++ { 0x00fc, 125 }, ++ { 0x00fd, 126 }, ++ { 0x00fe, 127 }, ++ { 0x00ff, 128 }, ++ { 0x008c, 13 }, ++ { 0x009c, 29 }, ++ { 0x008a, 11 }, ++ { 0x009a, 27 }, ++ { 0x009f, 32 }, ++ { 0x008e, 15 }, ++ { 0x009e, 31 }, ++ { 0x0083, 4 }, ++ { 0x0088, 9 }, ++ { 0x0098, 25 }, ++ { 0x0096, 23 }, ++ { 0x0097, 24 }, ++ { 0x0091, 18 }, ++ { 0x0092, 19 }, ++ { 0x0082, 3 }, ++ { 0x0093, 20 }, ++ { 0x0094, 21 }, ++ { 0x0084, 5 }, ++ { 0x0086, 7 }, ++ { 0x0087, 8 }, ++ { 0x0095, 22 }, ++ { 0x0085, 6 }, ++ { 0x0089, 10 }, ++ { 0x008b, 12 }, ++ { 0x009b, 28 }, ++ { 0x0080, 1 }, ++ { 0x0099, 26 }, ++ { 0x0000, 0 } ++ }; ++ +diff -urN vsftpd-2.0.5.org/ftpcmdio.c vsftpd-2.0.5/ftpcmdio.c +--- vsftpd-2.0.5.org/ftpcmdio.c 2005-03-04 02:42:34.000000000 +0200 ++++ vsftpd-2.0.5/ftpcmdio.c 2008-01-13 19:34:50.000000000 +0200 +@@ -19,6 +19,7 @@ + #include "logging.h" + #include "session.h" + #include "readwrite.h" ++#include "charconv.h" + + /* Internal functions */ + static void control_getline(struct mystr* p_str, struct vsf_session* p_sess); +@@ -125,9 +126,13 @@ + vsf_log_line(p_sess, kVSFLogEntryFTPOutput, &s_write_buf_str); + } + str_copy(&s_text_mangle_str, p_str); ++ vsf_charconv_convert(p_sess, &s_text_mangle_str, VSFTP_CONVDIRECT_FORWARD); + /* Process the output response according to the specifications.. */ + /* Escape telnet characters properly */ +- str_replace_text(&s_text_mangle_str, "\377", "\377\377"); ++// if (tunable_double_377) ++ { ++ str_replace_text(&s_text_mangle_str, "\377", "\377\377");
++ } + /* Change \n for \0 in response */ + str_replace_char(&s_text_mangle_str, '\n', '\0'); + /* Build string to squirt down network */ +@@ -213,5 +218,6 @@ + --len; + } + } ++ vsf_charconv_convert(p_sess, p_str, VSFTP_CONVDIRECT_BACKWARD); + } + +diff -urN vsftpd-2.0.5.org/ftpdataio.c vsftpd-2.0.5/ftpdataio.c +--- vsftpd-2.0.5.org/ftpdataio.c 2005-03-12 04:00:00.000000000 +0200 ++++ vsftpd-2.0.5/ftpdataio.c 2008-01-13 19:35:59.000000000 +0200 +@@ -296,7 +296,7 @@ + { + p_subdir_list = &subdir_list; + } +- vsf_ls_populate_dir_list(&dir_list, p_subdir_list, p_dir, p_base_dir_str, ++ vsf_ls_populate_dir_list(p_sess, &dir_list, p_subdir_list, p_dir, p_base_dir_str, + p_option_str, p_filter_str, is_verbose); + if (p_subdir_list) + { +diff -urN vsftpd-2.0.5.org/ls.c vsftpd-2.0.5/ls.c +--- vsftpd-2.0.5.org/ls.c 2005-05-24 00:55:00.000000000 +0300 ++++ vsftpd-2.0.5/ls.c 2008-01-13 19:32:28.000000000 +0200 +@@ -14,13 +14,16 @@ + #include "sysstr.h" + #include "sysutil.h" + #include "tunables.h" ++#include "charconv.h" + +-static void build_dir_line(struct mystr* p_str, ++static void build_dir_line(struct vsf_session* p_sess, ++ struct mystr* p_str, + const struct mystr* p_filename_str, + const struct vsf_sysutil_statbuf* p_stat); + + void +-vsf_ls_populate_dir_list(struct mystr_list* p_list, ++vsf_ls_populate_dir_list(struct vsf_session* p_sess, ++ struct mystr_list* p_list, + struct mystr_list* p_subdir_list, + struct vsf_sysutil_dir* p_dir, + const struct mystr* p_base_dir_str, +@@ -157,7 +160,7 @@ + { + str_append_char(&s_final_file_str, '/'); + } +- build_dir_line(&dirline_str, &s_final_file_str, s_p_statbuf); ++ build_dir_line(p_sess, &dirline_str, &s_final_file_str, s_p_statbuf); + } + else + { +@@ -176,6 +179,7 @@ + str_append_char(&dirline_str, '@'); + } + } ++ vsf_charconv_convert(p_sess, &dirline_str, VSFTP_CONVDIRECT_FORWARD); + str_append_text(&dirline_str, "\r\n"); + } + /* Add filename into our sorted list - sorting by filename or time. Also, +@@ -357,7 +361,7 @@ + } + + static void +-build_dir_line(struct mystr* p_str, const struct mystr* p_filename_str, ++build_dir_line(struct vsf_session* p_sess, struct mystr* p_str, const struct mystr* p_filename_str, + const struct vsf_sysutil_statbuf* p_stat) + { + static struct mystr s_tmp_str; +@@ -431,6 +435,7 @@ + str_append_char(p_str, ' '); + /* Filename */ + str_append_str(p_str, p_filename_str); ++ vsf_charconv_convert(p_sess, p_str, VSFTP_CONVDIRECT_FORWARD); + str_append_text(p_str, "\r\n"); + } + +diff -urN vsftpd-2.0.5.org/ls.h vsftpd-2.0.5/ls.h +--- vsftpd-2.0.5.org/ls.h 2003-09-15 13:43:40.000000000 +0300 ++++ vsftpd-2.0.5/ls.h 2008-01-13 19:32:30.000000000 +0200 +@@ -4,12 +4,14 @@ + struct mystr; + struct mystr_list; + struct vsf_sysutil_dir; ++struct vsf_session; + + /* vsf_ls_populate_dir_list() + * PURPOSE + * Given a directory handle, populate a formatted directory entry list (/bin/ls + * format). Also optionally populate a list of subdirectories. + * PARAMETERS ++ * p_sess - the current FTP session object + * p_list - the string list object for the result list of entries + * p_subdir_list - the string list object for the result list of + * subdirectories. May be 0 if client is not interested. +@@ -19,7 +21,8 @@ + * p_filter_str - the filter string given to LIST/NLST - e.g. "*.mp3" + * is_verbose - set to 1 for LIST, 0 for NLST + */ +-void vsf_ls_populate_dir_list(struct mystr_list* p_list, ++void vsf_ls_populate_dir_list(struct vsf_session* p_sess, ++ struct mystr_list* p_list, + struct mystr_list* p_subdir_list, + struct vsf_sysutil_dir* p_dir, + const struct mystr* p_base_dir_str, +diff -urN vsftpd-2.0.5.org/main.c vsftpd-2.0.5/main.c +--- vsftpd-2.0.5.org/main.c 2006-07-03 15:26:08.000000000 +0300 ++++ vsftpd-2.0.5/main.c 2008-01-13 20:51:11.000000000 +0200 +@@ -63,7 +63,9 @@ + /* Secure connection state */ + 0, 0, 0, 0, 0, 0, -1, -1, + /* Login fails */ +- 0 ++ 0, ++ /* Filename charset conv */ ++ 0, 0, + }; + int config_specified = 0; + const char* p_config_name = VSFTP_DEFAULT_CONFIG; +@@ -106,6 +108,12 @@ + } + vsf_sysutil_free(p_statbuf); + } ++ /* Init local codepage */ ++ if (tunable_convert_charset_enable) ++ { ++ tunable_local_codepage = vsf_charconv_codepage(tunable_local_charset); ++ tunable_convert_charset_enable = (tunable_local_codepage) ? 1 : 0; ++ } + /* Resolve pasv_address if required */ + if (tunable_pasv_address && tunable_pasv_addr_resolve) + { +diff -urN vsftpd-2.0.5.org/Makefile vsftpd-2.0.5/Makefile +--- vsftpd-2.0.5.org/Makefile 2006-07-03 15:25:41.000000000 +0300 ++++ vsftpd-2.0.5/Makefile 2008-01-13 19:39:58.000000000 +0200 +@@ -14,7 +14,7 @@ + banner.o filestr.o parseconf.o secutil.o \ + ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o \ + tcpwrap.o ipaddrparse.o access.o features.o readwrite.o \ +- ssl.o sysutil.o sysdeputil.o ++ ssl.o sysutil.o sysdeputil.o charconv.o + + + .c.o: +diff -urN vsftpd-2.0.5.org/parseconf.c vsftpd-2.0.5/parseconf.c +--- vsftpd-2.0.5.org/parseconf.c 2006-07-02 02:05:10.000000000 +0300 ++++ vsftpd-2.0.5/parseconf.c 2008-01-13 20:21:57.000000000 +0200 +@@ -99,6 +99,7 @@ + { "mdtm_write", &tunable_mdtm_write }, + { "lock_upload_files", &tunable_lock_upload_files }, + { "pasv_addr_resolve", &tunable_pasv_addr_resolve }, ++ { "convert_charset_enable", &tunable_convert_charset_enable }, + { 0, 0 } + }; + +@@ -168,6 +169,8 @@ + { "ssl_ciphers", &tunable_ssl_ciphers }, + { "rsa_private_key_file", &tunable_rsa_private_key_file }, + { "dsa_private_key_file", &tunable_dsa_private_key_file }, ++ { "local_charset", &tunable_local_charset }, ++ { "remote_charset", &tunable_remote_charset }, + { 0, 0 } + }; + +diff -urN vsftpd-2.0.5.org/postlogin.c vsftpd-2.0.5/postlogin.c +--- vsftpd-2.0.5.org/postlogin.c 2006-06-12 01:45:25.000000000 +0300 ++++ vsftpd-2.0.5/postlogin.c 2008-01-13 20:58:37.000000000 +0200 +@@ -25,6 +25,7 @@ + #include "access.h" + #include "features.h" + #include "ssl.h" ++#include "charconv.h" + #include "vsftpver.h" + + /* Private local functions */ +@@ -98,6 +99,17 @@ + /* Handle any login message */ + vsf_banner_dir_changed(p_sess, FTP_LOGINOK); + vsf_cmdio_write(p_sess, FTP_LOGINOK, "Login successful."); ++ if (tunable_convert_charset_enable) ++ { ++ vsf_charconv_init_local_codepage(tunable_local_codepage); ++ tunable_remote_codepage = vsf_charconv_codepage(tunable_remote_charset); ++ p_sess->remote_charset = tunable_remote_codepage; ++ p_sess->enable_conversion = vsf_charconv_avail_convertion(tunable_local_codepage, p_sess->remote_charset); ++ } ++ else ++ { ++ p_sess->enable_conversion = 0; ++ } + while(1) + { + int cmd_ok = 1; +diff -urN vsftpd-2.0.5.org/session.h vsftpd-2.0.5/session.h +--- vsftpd-2.0.5.org/session.h 2006-07-02 03:34:48.000000000 +0300 ++++ vsftpd-2.0.5/session.h 2008-01-13 20:39:41.000000000 +0200 +@@ -91,6 +91,10 @@ + int ssl_slave_fd; + int ssl_consumer_fd; + unsigned int login_fails; ++ ++ /* Filename charset conv */ ++ int enable_conversion; ++ int remote_charset; + }; + + #endif /* VSF_SESSION_H */ +diff -urN vsftpd-2.0.5.org/tunables.c vsftpd-2.0.5/tunables.c +--- vsftpd-2.0.5.org/tunables.c 2006-07-02 02:06:56.000000000 +0300 ++++ vsftpd-2.0.5/tunables.c 2008-01-13 20:24:57.000000000 +0200 +@@ -71,6 +71,9 @@ + int tunable_mdtm_write = 1; + int tunable_lock_upload_files = 1; + int tunable_pasv_addr_resolve = 0; ++int tunable_convert_charset_enable = 0; ++int tunable_local_codepage = 0; ++int tunable_remote_codepage = 0; + + unsigned int tunable_accept_timeout = 60; + unsigned int tunable_connect_timeout = 60; +@@ -125,4 +128,6 @@ + const char* tunable_ssl_ciphers = "DES-CBC3-SHA"; + const char* tunable_rsa_private_key_file = 0; + const char* tunable_dsa_private_key_file = 0; ++const char* tunable_local_charset = "NONE"; ++const char* tunable_remote_charset = "NONE"; + +diff -urN vsftpd-2.0.5.org/tunables.h vsftpd-2.0.5/tunables.h +--- vsftpd-2.0.5.org/tunables.h 2006-07-02 02:07:00.000000000 +0300 ++++ vsftpd-2.0.5/tunables.h 2008-01-13 20:28:11.000000000 +0200 +@@ -67,6 +67,9 @@ + extern int tunable_mdtm_write; /* Allow MDTM to set timestamps */ + extern int tunable_lock_upload_files; /* Lock uploading files */ + extern int tunable_pasv_addr_resolve; /* DNS resolve pasv_addr */ ++extern int tunable_convert_charset_enable; /* Allow converting charsets for file names */ ++extern int tunable_local_codepage; /* Code of local charset */ ++extern int tunable_remote_codepage; /* Code of remote charset */ + + /* Integer/numeric defines */ + extern unsigned int tunable_accept_timeout; +@@ -120,6 +123,8 @@ + extern const char* tunable_ssl_ciphers; + extern const char* tunable_rsa_private_key_file; + extern const char* tunable_dsa_private_key_file; ++extern const char* tunable_local_charset; ++extern const char* tunable_remote_charset; + + #endif /* VSF_TUNABLES_H */ + diff --git a/packages/vsftpd/vsftpd-charconv_2.0.5.bb b/packages/vsftpd/vsftpd-charconv_2.0.5.bb new file mode 100644 index 0000000000..cc559c6259 --- /dev/null +++ b/packages/vsftpd/vsftpd-charconv_2.0.5.bb @@ -0,0 +1,50 @@ +DESCRIPTION = "Secure ftp daemon with filename charconv" +SECTION = "console/network" +LICENSE = "GPL" +PR = "r1" + +FILESPATH_append = ":${@os.path.dirname(bb.data.getVar('FILE',d,1))}/vsftpd-2.0.5" + +SRC_URI = "ftp://vsftpd.beasts.org/users/cevans/vsftpd-${PV}.tar.gz \ + file://vsftpd-charconv.patch;patch=1 \ + file://makefile.patch;patch=1 \ + file://nopam.patch;patch=1 \ + file://syscall.patch;patch=1 \ + file://init \ + file://vsftpd.conf" + +S = "${WORKDIR}/vsftpd-2.0.5" + +inherit update-rc.d + +do_configure() { + # Fix hardcoded /usr, /etc, /var mess. + cat tunables.c|sed s:\"/usr:\"${prefix}:g|sed s:\"/var:\"${localstatedir}:g \ + |sed s:\"${prefix}/share/empty:\"${localstatedir}/share/empty:g |sed s:\"/etc:\"${sysconfdir}:g > tunables.c.new + mv tunables.c.new tunables.c +} + +do_compile() { + oe_runmake "LIBS=-lcrypt -L${STAGING_LIBDIR}" +} + +do_install() { + install -d ${D}${sbindir} + install -d ${D}${mandir}/man8 + install -d ${D}${mandir}/man5 + oe_runmake 'DESTDIR=${D}' install + install -d ${D}${sysconfdir} + install -m 0755 ${WORKDIR}/vsftpd.conf ${D}${sysconfdir}/vsftpd.conf + install -d ${D}${sysconfdir}/init.d/ + install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/vsftpd +} + +pkg_postinst() { + addgroup ftp + adduser --system --home /var/tmp/ftp --no-create-home --ingroup ftp --disabled-password -s /bin/false ftp + mkdir -p ${localstatedir}/share/empty +} + +INITSCRIPT_NAME = "vsftpd" + +INITSCRIPT_PARAMS = "defaults" |