From 5e7a95307b8c10f67b2103557f128014853eb805 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Fri, 27 Jun 2008 13:00:39 +0000 Subject: cacao-native 0.99.1: New recipe. --- packages/cacao/cacao-native_0.99.1.bb | 14 +++++++ packages/cacao/cacao_0.99.1.bb | 10 +---- ...080519-build-java-runtime-library-classes.patch | 46 ++++++++++------------ 3 files changed, 35 insertions(+), 35 deletions(-) create mode 100644 packages/cacao/cacao-native_0.99.1.bb diff --git a/packages/cacao/cacao-native_0.99.1.bb b/packages/cacao/cacao-native_0.99.1.bb new file mode 100644 index 0000000000..a503c7d3d4 --- /dev/null +++ b/packages/cacao/cacao-native_0.99.1.bb @@ -0,0 +1,14 @@ +require cacao.inc + +PR = "r0" + +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ + file://cacao-${PV}-build-java-runtime-library-classes.patch;patch=1 \ + " + +# Quirks for Nokia N800: +# - with mfloat-abi=softfp the runtime fails to run anything +# - without --enable-softfloat it cannot find files within Jars +TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft" + +EXTRA_OECONF_append_nokia800 = "--enable-softfloat" diff --git a/packages/cacao/cacao_0.99.1.bb b/packages/cacao/cacao_0.99.1.bb index a503c7d3d4..217e948831 100644 --- a/packages/cacao/cacao_0.99.1.bb +++ b/packages/cacao/cacao_0.99.1.bb @@ -1,14 +1,6 @@ -require cacao.inc +require cacao-native.inc PR = "r0" SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ - file://cacao-${PV}-build-java-runtime-library-classes.patch;patch=1 \ " - -# Quirks for Nokia N800: -# - with mfloat-abi=softfp the runtime fails to run anything -# - without --enable-softfloat it cannot find files within Jars -TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft" - -EXTRA_OECONF_append_nokia800 = "--enable-softfloat" diff --git a/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch b/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch index 7df1c480ea..7c649c495c 100644 --- a/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch +++ b/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch @@ -1,36 +1,26 @@ -Index: cacao/configure.ac -=================================================================== ---- cacao.orig/configure.ac 2008-06-27 01:23:44.000000000 +0200 -+++ cacao/configure.ac 2008-06-27 01:24:02.000000000 +0200 -@@ -772,6 +772,7 @@ - - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_PREFIX - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_CLASSES -+AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES - - if test x"${ENABLE_JRE_LAYOUT}" = "xno"; then - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR Index: cacao/m4/java-runtime-library.m4 =================================================================== ---- cacao.orig/m4/java-runtime-library.m4 2008-06-27 01:23:44.000000000 +0200 -+++ cacao/m4/java-runtime-library.m4 2008-06-27 01:24:02.000000000 +0200 -@@ -93,20 +93,32 @@ +--- cacao.orig/m4/java-runtime-library.m4 2008-06-27 13:51:34.000000000 +0200 ++++ cacao/m4/java-runtime-library.m4 2008-06-27 13:53:31.000000000 +0200 +@@ -92,14 +92,28 @@ + AC_MSG_RESULT(${JAVA_RUNTIME_LIBRARY_CLASSES}) AC_DEFINE_UNQUOTED([JAVA_RUNTIME_LIBRARY_CLASSES], "${JAVA_RUNTIME_LIBRARY_CLASSES}", [Java runtime library classes]) AC_SUBST(JAVA_RUNTIME_LIBRARY_CLASSES) - ++]) ++ ++ +dnl where are Java core library classes located at compilation time + +AC_DEFUN([AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES],[ +AC_MSG_CHECKING(where Java core library classes are located at compile time) +AC_ARG_WITH([build-java-runtime-library-classes], -+ [AS_HELP_STRING(--with-build-java-runtime-library-classes=,path to Java core library classes (includes the name of the file and may be flat) [[default=${JAVA_RUNTIME_LIBRARY_PREFIX}/share/classpath/glibj.zip]])], ++ [AS_HELP_STRING(--with-build-java-runtime-library-classes=,path to Java core library classes (includes the name of the file and may be flat) [[default=${JAVA_RUNTIME_LIBRARY_CLASSES}]])], + [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${withval}], -+ [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${JAVA_RUNTIME_LIBRARY_PREFIX}/share/classpath/glibj.zip]) ++ [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${JAVA_RUNTIME_LIBRARY_CLASSES}]) +AC_MSG_RESULT(${BUILD_JAVA_RUNTIME_LIBRARY_CLASSES}) +AC_DEFINE_UNQUOTED([BUILD_JAVA_RUNTIME_LIBRARY_CLASSES], "${BUILD_JAVA_RUNTIME_LIBRARY_CLASSES}", [Java core library classes at compile time]) +AC_SUBST(BUILD_JAVA_RUNTIME_LIBRARY_CLASSES) -+]) -+ + dnl define BOOTCLASSPATH for Makefiles case "${WITH_JAVA_RUNTIME_LIBRARY}" in cldc1.1 | gnuclasspath) @@ -43,11 +33,15 @@ Index: cacao/m4/java-runtime-library.m4 ;; esac AC_SUBST(BOOTCLASSPATH) - ]) +Index: cacao/configure.ac +=================================================================== +--- cacao.orig/configure.ac 2008-06-27 13:51:34.000000000 +0200 ++++ cacao/configure.ac 2008-06-27 13:53:31.000000000 +0200 +@@ -772,6 +772,7 @@ -- --dnl where are Java runtime library native libraries installed -+dnl where are Java runtime library native libraries installed (at compilation time) + AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_PREFIX + AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_CLASSES ++AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES - AC_DEFUN([AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR],[ - AC_MSG_CHECKING(where Java runtime library native libraries are installed) + if test x"${ENABLE_JRE_LAYOUT}" = "xno"; then + AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR -- cgit v1.2.3 From ffe04fd5191aeb214933e1a5f6e5c57d5ec9e728 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Fri, 27 Jun 2008 13:21:58 +0000 Subject: disapproval of revision 'a846a4c23e94c3e771fd7aaf448e8bb4e11f4506' --- packages/cacao/cacao-native_0.99.1.bb | 14 ------- packages/cacao/cacao_0.99.1.bb | 10 ++++- ...080519-build-java-runtime-library-classes.patch | 46 ++++++++++++---------- 3 files changed, 35 insertions(+), 35 deletions(-) delete mode 100644 packages/cacao/cacao-native_0.99.1.bb diff --git a/packages/cacao/cacao-native_0.99.1.bb b/packages/cacao/cacao-native_0.99.1.bb deleted file mode 100644 index a503c7d3d4..0000000000 --- a/packages/cacao/cacao-native_0.99.1.bb +++ /dev/null @@ -1,14 +0,0 @@ -require cacao.inc - -PR = "r0" - -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ - file://cacao-${PV}-build-java-runtime-library-classes.patch;patch=1 \ - " - -# Quirks for Nokia N800: -# - with mfloat-abi=softfp the runtime fails to run anything -# - without --enable-softfloat it cannot find files within Jars -TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft" - -EXTRA_OECONF_append_nokia800 = "--enable-softfloat" diff --git a/packages/cacao/cacao_0.99.1.bb b/packages/cacao/cacao_0.99.1.bb index 217e948831..a503c7d3d4 100644 --- a/packages/cacao/cacao_0.99.1.bb +++ b/packages/cacao/cacao_0.99.1.bb @@ -1,6 +1,14 @@ -require cacao-native.inc +require cacao.inc PR = "r0" SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ + file://cacao-${PV}-build-java-runtime-library-classes.patch;patch=1 \ " + +# Quirks for Nokia N800: +# - with mfloat-abi=softfp the runtime fails to run anything +# - without --enable-softfloat it cannot find files within Jars +TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft" + +EXTRA_OECONF_append_nokia800 = "--enable-softfloat" diff --git a/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch b/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch index 7c649c495c..7df1c480ea 100644 --- a/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch +++ b/packages/cacao/files/cacao-0.98+hg20080519-build-java-runtime-library-classes.patch @@ -1,26 +1,36 @@ +Index: cacao/configure.ac +=================================================================== +--- cacao.orig/configure.ac 2008-06-27 01:23:44.000000000 +0200 ++++ cacao/configure.ac 2008-06-27 01:24:02.000000000 +0200 +@@ -772,6 +772,7 @@ + + AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_PREFIX + AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_CLASSES ++AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES + + if test x"${ENABLE_JRE_LAYOUT}" = "xno"; then + AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR Index: cacao/m4/java-runtime-library.m4 =================================================================== ---- cacao.orig/m4/java-runtime-library.m4 2008-06-27 13:51:34.000000000 +0200 -+++ cacao/m4/java-runtime-library.m4 2008-06-27 13:53:31.000000000 +0200 -@@ -92,14 +92,28 @@ - AC_MSG_RESULT(${JAVA_RUNTIME_LIBRARY_CLASSES}) +--- cacao.orig/m4/java-runtime-library.m4 2008-06-27 01:23:44.000000000 +0200 ++++ cacao/m4/java-runtime-library.m4 2008-06-27 01:24:02.000000000 +0200 +@@ -93,20 +93,32 @@ AC_DEFINE_UNQUOTED([JAVA_RUNTIME_LIBRARY_CLASSES], "${JAVA_RUNTIME_LIBRARY_CLASSES}", [Java runtime library classes]) AC_SUBST(JAVA_RUNTIME_LIBRARY_CLASSES) -+]) -+ -+ + +dnl where are Java core library classes located at compilation time + +AC_DEFUN([AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES],[ +AC_MSG_CHECKING(where Java core library classes are located at compile time) +AC_ARG_WITH([build-java-runtime-library-classes], -+ [AS_HELP_STRING(--with-build-java-runtime-library-classes=,path to Java core library classes (includes the name of the file and may be flat) [[default=${JAVA_RUNTIME_LIBRARY_CLASSES}]])], ++ [AS_HELP_STRING(--with-build-java-runtime-library-classes=,path to Java core library classes (includes the name of the file and may be flat) [[default=${JAVA_RUNTIME_LIBRARY_PREFIX}/share/classpath/glibj.zip]])], + [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${withval}], -+ [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${JAVA_RUNTIME_LIBRARY_CLASSES}]) ++ [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${JAVA_RUNTIME_LIBRARY_PREFIX}/share/classpath/glibj.zip]) +AC_MSG_RESULT(${BUILD_JAVA_RUNTIME_LIBRARY_CLASSES}) +AC_DEFINE_UNQUOTED([BUILD_JAVA_RUNTIME_LIBRARY_CLASSES], "${BUILD_JAVA_RUNTIME_LIBRARY_CLASSES}", [Java core library classes at compile time]) +AC_SUBST(BUILD_JAVA_RUNTIME_LIBRARY_CLASSES) - ++]) ++ dnl define BOOTCLASSPATH for Makefiles case "${WITH_JAVA_RUNTIME_LIBRARY}" in cldc1.1 | gnuclasspath) @@ -33,15 +43,11 @@ Index: cacao/m4/java-runtime-library.m4 ;; esac AC_SUBST(BOOTCLASSPATH) -Index: cacao/configure.ac -=================================================================== ---- cacao.orig/configure.ac 2008-06-27 13:51:34.000000000 +0200 -+++ cacao/configure.ac 2008-06-27 13:53:31.000000000 +0200 -@@ -772,6 +772,7 @@ + ]) - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_PREFIX - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_CLASSES -+AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES +- +-dnl where are Java runtime library native libraries installed ++dnl where are Java runtime library native libraries installed (at compilation time) - if test x"${ENABLE_JRE_LAYOUT}" = "xno"; then - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR + AC_DEFUN([AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR],[ + AC_MSG_CHECKING(where Java runtime library native libraries are installed) -- cgit v1.2.3 From dfc402f596ca3285ac0fb187a954d3f616ab1879 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Fri, 27 Jun 2008 13:26:14 +0000 Subject: cacao-native 0.99.1: New recipe. * add support for new configure options in cacao-native.inc --- packages/cacao/cacao-native.inc | 18 ++++++++++++------ packages/cacao/cacao-native_0.99.1.bb | 7 +++++++ 2 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 packages/cacao/cacao-native_0.99.1.bb diff --git a/packages/cacao/cacao-native.inc b/packages/cacao/cacao-native.inc index 26d3d37f58..8ae2874253 100644 --- a/packages/cacao/cacao-native.inc +++ b/packages/cacao/cacao-native.inc @@ -13,12 +13,18 @@ S = "${WORKDIR}/cacao-${PV}" inherit native autotools EXTRA_OECONF = "\ - --enable-debug \ - --with-classpath-libdir=${libdir} \ - --with-classpath-includedir=${includedir}/classpath \ - --with-classpath-classes=${datadir}/classpath/glibj.zip \ - --with-vm-zip=${datadir}/cacao/vm.zip \ - " + --enable-debug \ + --with-vm-zip=${datadir}/cacao/vm.zip \ + \ + --with-classpath-libdir=${libdir_jni}:${libdir} \ + --with-classpath-includedir=${includedir}/classpath \ + --with-classpath-classes=${datadir}/classpath/glibj.zip \ + \ + --with-java-runtime-library-classes=${datadir}/classpath/glibj.zip \ + --with-java-runtime-library-libdir=${libdir_jni}:${libdir} \ + --with-jni_md_h=${incdir}/classpath \ + --with-jni_h=${incdir}/classpath \ + " # force usage of ecj-initial (but Java5-compatible class library) export JAVAC="${STAGING_BINDIR_NATIVE}/ecj-initial -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath/glibj.zip" diff --git a/packages/cacao/cacao-native_0.99.1.bb b/packages/cacao/cacao-native_0.99.1.bb new file mode 100644 index 0000000000..1cf0cb70cf --- /dev/null +++ b/packages/cacao/cacao-native_0.99.1.bb @@ -0,0 +1,7 @@ +require cacao-native.inc + +PR = "r0" + +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ + " + -- cgit v1.2.3 From d52250fe759756daee3347bf43a54d6d4918fad9 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 30 Jun 2008 11:20:03 +0000 Subject: add fso-console-image, remove mplayer from fso-image --- packages/images/fso-console-image.bb | 12 ++++++++++++ packages/images/fso-image.bb | 1 - 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 packages/images/fso-console-image.bb diff --git a/packages/images/fso-console-image.bb b/packages/images/fso-console-image.bb new file mode 100644 index 0000000000..3de1e51da9 --- /dev/null +++ b/packages/images/fso-console-image.bb @@ -0,0 +1,12 @@ +#------------------------------------------------------ +# freesmartphone.org Console Image Recipe +#------------------------------------------------------ + +require fso-image.bb + +IMAGE_INSTALL = "\ + ${BASE_INSTALL} \ + ${AUDIO_INSTALL} \ + ${TOOLS_INSTALL} \ + ${PYTHON_INSTALL} \ +" diff --git a/packages/images/fso-image.bb b/packages/images/fso-image.bb index a08dac18b7..7333b32131 100644 --- a/packages/images/fso-image.bb +++ b/packages/images/fso-image.bb @@ -40,7 +40,6 @@ TOOLS_INSTALL = "\ # bash \ htop \ mickeyterm \ - mplayer \ nano \ powertop \ s3c24xx-gpio \ -- cgit v1.2.3 From 39b44ff0ab17cd89ccbdd971201a671349558adc Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 30 Jun 2008 18:05:42 +0000 Subject: linux-neuros 2.6.15: add patch to build with gcc4, still needs better defconfig and EABI patches --- packages/linux/linux-neuros/mtune-gcc4-fix.patch | 11 +++++++++++ packages/linux/linux-neuros_2.6.15.bb | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-neuros/mtune-gcc4-fix.patch diff --git a/packages/linux/linux-neuros/mtune-gcc4-fix.patch b/packages/linux/linux-neuros/mtune-gcc4-fix.patch new file mode 100644 index 0000000000..c42a5ae863 --- /dev/null +++ b/packages/linux/linux-neuros/mtune-gcc4-fix.patch @@ -0,0 +1,11 @@ +--- /tmp/Makefile 2008-06-30 19:58:09.000000000 +0200 ++++ linux-2.6.15/arch/arm/Makefile 2008-06-30 19:58:53.000000000 +0200 +@@ -55,7 +55,7 @@ + tune-$(CONFIG_CPU_ARM922T) :=-mtune=arm9tdmi + tune-$(CONFIG_CPU_ARM925T) :=-mtune=arm9tdmi + #tune-$(CONFIG_CPU_ARM926T) :=-mtune=arm9tdmi +-tune-$(CONFIG_CPU_ARM926T) :=-mtune=arm926ejs ++tune-$(CONFIG_CPU_ARM926T) :=-mtune=arm926ej-s + tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110 + tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100 + tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale diff --git a/packages/linux/linux-neuros_2.6.15.bb b/packages/linux/linux-neuros_2.6.15.bb index 82df2f44bd..f103d2c35f 100644 --- a/packages/linux/linux-neuros_2.6.15.bb +++ b/packages/linux/linux-neuros_2.6.15.bb @@ -1,7 +1,7 @@ #require linux-omap.inc PV = "2.6.15-torfu" -PR = "r4" +PR = "r5" COMPATIBLE_MACHINE = "(neuros-osd)" @@ -10,6 +10,7 @@ COMPATIBLE_MACHINE = "(neuros-osd)" SRC_URI = "svn://svn.neurostechnology.com/svn/neuros-bsp/branches/torfu/kernels;module=linux-2.6.15;proto=svn;rev= \ file://g0-20080113.patch;patch=1\ file://bsp_config.h \ + file://mtune-gcc4-fix.patch;patch=1 \ file://defconfig" S = "${WORKDIR}/linux-2.6.15" -- cgit v1.2.3 From 7339a83b4095582728045cee92aa215373607caf Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 30 Jun 2008 18:45:35 +0000 Subject: angstrom 2008: prefer uclibc 0.9.29 --- conf/distro/include/angstrom-2008-preferred-versions.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc index 2ebb06d5c0..7707215847 100644 --- a/conf/distro/include/angstrom-2008-preferred-versions.inc +++ b/conf/distro/include/angstrom-2008-preferred-versions.inc @@ -17,5 +17,7 @@ PREFERRED_VERSION_pkgconfig = "0.23" PREFERRED_VERSION_pkgconfig-native = "0.23" PREFERRED_VERSION_pulseaudio = "0.9.10" PREFERRED_VERSION_tiff = "3.8.2+4.0.0beta2" +PREFERRED_VERSION_uclibc ?= "0.9.29" +PREFERRED_VERSION_uclibc-initial ?= "0.9.29" PREFERRED_VERSION_udev = "118" PREFERRED_VERSION_xserver-kdrive = "1.4.0.90" -- cgit v1.2.3 From 873ce28c40814edb45f534003450318c6e9b2650 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Mon, 30 Jun 2008 21:33:37 +0000 Subject: conf/machine/cs-e9302.conf: New machine. Added defconfig for linux-2.6.24 but needs further tweaking. --- conf/machine/cs-e9302.conf | 23 + .../linux/linux-2.6.24/cs-e9302/.mtn2git_empty | 0 packages/linux/linux-2.6.24/cs-e9302/defconfig | 1165 ++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 3 +- 4 files changed, 1190 insertions(+), 1 deletion(-) create mode 100644 conf/machine/cs-e9302.conf create mode 100644 packages/linux/linux-2.6.24/cs-e9302/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.24/cs-e9302/defconfig diff --git a/conf/machine/cs-e9302.conf b/conf/machine/cs-e9302.conf new file mode 100644 index 0000000000..b99b1372be --- /dev/null +++ b/conf/machine/cs-e9302.conf @@ -0,0 +1,23 @@ +#@TYPE: Machine +#@Name: Olimex CS-E9302 Development Platform +#@DESCRIPTION: Machine configuration for Olimex CS-E9302 Development Platform + +TARGET_ARCH = "arm" +PACKAGE_EXTRA_ARCHS = "armv4t" + +PREFERRED_PROVIDER_virtual/kernel = "linux" + +#don't try to access tty1 +USE_VT = "0" + +MACHINE_FEATURES = "kernel26 apm alsa ext2 usbhost" + +# used by sysvinit_2 +SERIAL_CONSOLE = "57600 ttyAM0" + +# used by some images +ROOT_FLASH_SIZE = "8" +#extra jffs2 tweaks +EXTRA_IMAGECMD_jffs2 = "--eraseblock=0x40000 --pad=0x500000 " + +require conf/machine/include/tune-arm920t.inc diff --git a/packages/linux/linux-2.6.24/cs-e9302/.mtn2git_empty b/packages/linux/linux-2.6.24/cs-e9302/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.24/cs-e9302/defconfig b/packages/linux/linux-2.6.24/cs-e9302/defconfig new file mode 100644 index 0000000000..c7db3e6da0 --- /dev/null +++ b/packages/linux/linux-2.6.24/cs-e9302/defconfig @@ -0,0 +1,1165 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Mon Feb 4 15:05:53 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +# CONFIG_GENERIC_GPIO is not set +# 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 +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_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +# CONFIG_FAIR_GROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +CONFIG_ARCH_EP93XX=y +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA 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 + +# +# Cirrus EP93xx Implementation Options +# +CONFIG_CRUNCH=y + +# +# EP93xx Platforms +# +# CONFIG_MACH_ADSSPHERE is not set +CONFIG_MACH_EDB9302=y +# CONFIG_MACH_EDB9302A is not set +# CONFIG_MACH_EDB9307 is not set +# CONFIG_MACH_EDB9312 is not set +# CONFIG_MACH_EDB9315 is not set +# CONFIG_MACH_EDB9315A is not set +# CONFIG_MACH_GESBC9312 is not set +# CONFIG_MACH_MICRO9 is not set +# CONFIG_MACH_MICRO9H is not set +# CONFIG_MACH_MICRO9M is not set +# CONFIG_MACH_MICRO9L is not set +# CONFIG_MACH_TS72XX is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM920T=y +CONFIG_CPU_32v4T=y +CONFIG_CPU_ABRT_EV4T=y +CONFIG_CPU_CACHE_V4WT=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_ARM_THUMB is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_ARM_VIC=y + +# +# Bus support +# +CONFIG_ARM_AMBA=y +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_PREEMPT is not set +# CONFIG_NO_IDLE_HZ is not set +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyAM0 root=mtd5 rootfstype=jffs2 mtdparts=GESBC-NAND:64m(app),-(data)" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +CONFIG_FPE_NWFPE_XP=y +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +# CONFIG_PM is not set +CONFIG_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=y +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +# CONFIG_FW_LOADER is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=y +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x0 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=1 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_GESBC=y +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=12288 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_EP93XX_ETH=y +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_AMBA_PL010=y +CONFIG_SERIAL_AMBA_PL010_CONSOLE=y +# CONFIG_SERIAL_AMBA_PL011 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=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_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +CONFIG_SENSORS_DS1337=y +# 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=y +CONFIG_I2C_DEBUG_ALGO=y +CONFIG_I2C_DEBUG_BUS=y +CONFIG_I2C_DEBUG_CHIP=y + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +CONFIG_HWMON=y +# CONFIG_HWMON_VID is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_EP93XX_WATCHDOG=y + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Sound +# +# CONFIG_SOUND is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +CONFIG_USB_DYNAMIC_MINORS=y +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB 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 is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP2101 is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +# CONFIG_NEW_LEDS is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_EP93XX=y +# CONFIG_RTC_DRV_PL031 is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=y +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +# CONFIG_PROFILING is not set +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +CONFIG_DEBUG_SLAB=y +# CONFIG_DEBUG_SLAB_LEAK is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_MUTEXES=y +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# 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=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index 3a51a594f4..c88bff5d72 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -8,8 +8,9 @@ DEFAULT_PREFERENCE_simpad = "1" DEFAULT_PREFERENCE_atngw100 = "1" DEFAULT_PREFERENCE_at32stk1000 = "1" DEFAULT_PREFERENCE_ts72xx = "1" +DEFAULT_PREFERENCE_cs-e9302 = "1" -PR = "r12" +PR = "r13" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ -- cgit v1.2.3 From ec59626fb55501333ceaea156c85f0ffda21d5ef Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 09:56:29 +0000 Subject: linux-omap2-git: update beagleboard defconfig --- packages/linux/linux-omap2-git/beagleboard/defconfig | 2 +- packages/linux/linux-omap2_git.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index d4c1e9300a..3ef03cf5d5 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -254,7 +254,7 @@ CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_PREEMPT=y +CONFIG_PREEMPT=n CONFIG_HZ=128 CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 176bf0cd83..4ccf527bae 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "050684c18f2ea0b08fdd5233a0cd3c7f96e00a0e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r31" +PR = "r32" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ -- cgit v1.2.3 From 3e1ca224fe8db0cea63bb842b7a5288ebb14c317 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 11:54:07 +0000 Subject: avr32 site: add libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll} --- site/avr32-common | 2 ++ 1 file changed, 2 insertions(+) diff --git a/site/avr32-common b/site/avr32-common index db0ca53fb2..b43004e5ba 100644 --- a/site/avr32-common +++ b/site/avr32-common @@ -43,3 +43,5 @@ slrn_cv_va_copy=${slrn_cv_va_copy=yes} dpkg_cv_va_copy=${ac_cv_va_copy=yes} dpkg_cv___va_copy=${ac_cv___va_copy=yes} +#libidl +libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll} -- cgit v1.2.3 From 3f6ab484c306f9e91571ecdd6b8f12735ac47cf6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 11:54:49 +0000 Subject: linux-neuros git: bump SRCREV --- packages/linux/linux-neuros_git.bb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux-neuros_git.bb b/packages/linux/linux-neuros_git.bb index c798def1b7..db04361de6 100644 --- a/packages/linux/linux-neuros_git.bb +++ b/packages/linux/linux-neuros_git.bb @@ -2,15 +2,14 @@ require linux.inc DESCRIPTION = "Linux kernel for Neuros OSD devices" -SRCREV = "11c1e25ec8b9c6e1bef53d776ef3462aaacbd0a0" +SRCREV = "730beeee197cef4ff1e92ee322481380996a0390" PV = "2.6.23-${PR}+git${SRCREV}" -PR = "r2" +PR = "r3" COMPATIBLE_MACHINE = "(neuros-osd|neuros-osd2)" SRC_URI = "git://git.neurostechnology.com/git/linux-davinci-2.6;protocol=git;branch=neuros \ - file://binutils-buildid-arm.patch;patch=1 \ file://defconfig" S = "${WORKDIR}/git" -- cgit v1.2.3 From c8033872315421452d59b692827b248c73c6e933 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 12:17:25 +0000 Subject: libart: add avr32 art_config.h --- packages/gnome/libart-lgpl/avr32/.mtn2git_empty | 0 packages/gnome/libart-lgpl/avr32/art_config.h | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 packages/gnome/libart-lgpl/avr32/.mtn2git_empty create mode 100644 packages/gnome/libart-lgpl/avr32/art_config.h diff --git a/packages/gnome/libart-lgpl/avr32/.mtn2git_empty b/packages/gnome/libart-lgpl/avr32/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gnome/libart-lgpl/avr32/art_config.h b/packages/gnome/libart-lgpl/avr32/art_config.h new file mode 100644 index 0000000000..b0e74ad6ae --- /dev/null +++ b/packages/gnome/libart-lgpl/avr32/art_config.h @@ -0,0 +1,10 @@ +/* Automatically generated by gen_art_config.c */ + +#define ART_SIZEOF_CHAR 1 +#define ART_SIZEOF_SHORT 2 +#define ART_SIZEOF_INT 4 +#define ART_SIZEOF_LONG 4 + +typedef unsigned char art_u8; +typedef unsigned short art_u16; +typedef unsigned int art_u32; -- cgit v1.2.3 From 262f26f0843401bf5a9ab20c370ac7f8e74e12fc Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Tue, 1 Jul 2008 13:28:43 +0000 Subject: boost-jam-native : Add support for boost-jam-native-3.1.16. Add a boost-jam-native.inc file. New version is DEFAULT_PREFERENCE = "-1" for now. --- packages/boost/boost-jam-native.inc | 30 ++++++++++++++++++++++++++++++ packages/boost/boost-jam-native_3.1.11.bb | 28 +--------------------------- packages/boost/boost-jam-native_3.1.16.bb | 6 ++++++ 3 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 packages/boost/boost-jam-native.inc create mode 100644 packages/boost/boost-jam-native_3.1.16.bb diff --git a/packages/boost/boost-jam-native.inc b/packages/boost/boost-jam-native.inc new file mode 100644 index 0000000000..843f912f46 --- /dev/null +++ b/packages/boost/boost-jam-native.inc @@ -0,0 +1,30 @@ +# The Boost web site provides free peer-reviewed portable +# C++ source libraries. The emphasis is on libraries which +# work well with the C++ Standard Library. The libraries are +# intended to be widely useful, and are in regular use by +# thousands of programmers across a broad spectrum of applications. +DESCRIPTION = "Make system for boost (native)" +HOMEPAGE = "http://www.boost.org/" +SECTION = "devel" +PRIORITY = "optional" +LICENSE = "Boost Software License" +PR = "r0" + +SRC_URI = "${SOURCEFORGE_MIRROR}/boost/boost-jam-${PV}.tgz" +S = "${WORKDIR}/boost-jam-${PV}" + +inherit native + +do_compile() { + set -ex + rm -rf bin.* + ./build.sh gcc +} + +# This is too terrible - the build script doesn't give any good +# way I can see to find out where the binaries are placed, so +# rely on only one bin.foo directory being created. +do_stage() { + set -ex + install -c -m 755 bin.*/bjam ${STAGING_BINDIR}/ +} diff --git a/packages/boost/boost-jam-native_3.1.11.bb b/packages/boost/boost-jam-native_3.1.11.bb index 843f912f46..2e92146a83 100644 --- a/packages/boost/boost-jam-native_3.1.11.bb +++ b/packages/boost/boost-jam-native_3.1.11.bb @@ -1,30 +1,4 @@ -# The Boost web site provides free peer-reviewed portable -# C++ source libraries. The emphasis is on libraries which -# work well with the C++ Standard Library. The libraries are -# intended to be widely useful, and are in regular use by -# thousands of programmers across a broad spectrum of applications. -DESCRIPTION = "Make system for boost (native)" -HOMEPAGE = "http://www.boost.org/" -SECTION = "devel" -PRIORITY = "optional" -LICENSE = "Boost Software License" -PR = "r0" +include boost-jam-native.inc SRC_URI = "${SOURCEFORGE_MIRROR}/boost/boost-jam-${PV}.tgz" -S = "${WORKDIR}/boost-jam-${PV}" -inherit native - -do_compile() { - set -ex - rm -rf bin.* - ./build.sh gcc -} - -# This is too terrible - the build script doesn't give any good -# way I can see to find out where the binaries are placed, so -# rely on only one bin.foo directory being created. -do_stage() { - set -ex - install -c -m 755 bin.*/bjam ${STAGING_BINDIR}/ -} diff --git a/packages/boost/boost-jam-native_3.1.16.bb b/packages/boost/boost-jam-native_3.1.16.bb new file mode 100644 index 0000000000..955f7bfac8 --- /dev/null +++ b/packages/boost/boost-jam-native_3.1.16.bb @@ -0,0 +1,6 @@ +include boost-jam-native.inc + +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "${SOURCEFORGE_MIRROR}/boost/boost-jam-${PV}.tgz" + -- cgit v1.2.3 From efc869189d60a57c942e267502e4ab3918003f8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Tue, 1 Jul 2008 15:36:08 +0000 Subject: frameworkd: add conf-file and new RDEPENDS --- packages/freesmartphone/frameworkd/frameworkd.conf | 19 +++++++++++++++++++ packages/freesmartphone/frameworkd_git.bb | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/freesmartphone/frameworkd/frameworkd.conf b/packages/freesmartphone/frameworkd/frameworkd.conf index 8b13789179..2010889142 100644 --- a/packages/freesmartphone/frameworkd/frameworkd.conf +++ b/packages/freesmartphone/frameworkd/frameworkd.conf @@ -1 +1,20 @@ +[odeviced] +[kernel26] +# set 1 to disable the module +disable = 0 + +[idlenotifier] +# set 1 to disable the module +disable = 0 +# add inut nodes to ignore for idle activity +ignoreinput = 2,3,4 + +[powercontrol-neo] +disable = 0 + +[ophoned] +modemtype = ti_calypso + +[opreferencesd] +rootdir = ../etc/freesmartphone/opreferences:/etc/freesmartphone/opreferences:/usr/etc/freesmartphone/opreferences diff --git a/packages/freesmartphone/frameworkd_git.bb b/packages/freesmartphone/frameworkd_git.bb index ea3a4cb652..084117e5ff 100644 --- a/packages/freesmartphone/frameworkd_git.bb +++ b/packages/freesmartphone/frameworkd_git.bb @@ -5,7 +5,7 @@ SECTION = "console/network" DEPENDS = "python-cython-native python-pyrex-native" LICENSE = "GPL" PV = "0.8.0+gitr${SRCREV}" -PR = "r2" +PR = "r3" inherit distutils update-rc.d @@ -27,9 +27,11 @@ do_install_append() { RDEPENDS_${PN} += "\ python-dbus \ + python-datetime \ python-pygobject \ python-pyrtc \ python-pyserial \ + python-pyyaml \ python-shell \ python-syslog \ " -- cgit v1.2.3 From cdf15d26661ba6492530b6c9d20bde9edcdcb4e7 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 17:56:29 +0000 Subject: linux 2.6.24: update at32stk1000 defconfig --- packages/linux/linux-2.6.24/at32stk1000/defconfig | 227 ++++++++++++++-------- packages/linux/linux_2.6.24.bb | 2 +- 2 files changed, 152 insertions(+), 77 deletions(-) diff --git a/packages/linux/linux-2.6.24/at32stk1000/defconfig b/packages/linux/linux-2.6.24/at32stk1000/defconfig index 8a3e2ace8b..0a3a3a8426 100644 --- a/packages/linux/linux-2.6.24/at32stk1000/defconfig +++ b/packages/linux/linux-2.6.24/at32stk1000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.24.3 -# Fri Mar 14 12:39:45 2008 +# Tue Jul 1 19:44:49 2008 # CONFIG_AVR32=y CONFIG_GENERIC_GPIO=y @@ -40,7 +40,8 @@ CONFIG_POSIX_MQUEUE=y # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set # CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=14 # CONFIG_CGROUPS is not set # CONFIG_FAIR_GROUP_SCHED is not set @@ -80,10 +81,10 @@ CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_MODVERSIONS=y # CONFIG_MODULE_SRCVERSION_ALL is not set -# CONFIG_KMOD is not set +CONFIG_KMOD=y CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_LBD=y +CONFIG_BLK_DEV_IO_TRACE=y # CONFIG_LSF is not set # CONFIG_BLK_DEV_BSG is not set @@ -126,7 +127,7 @@ CONFIG_BOARD_ATSTK1002=y CONFIG_BOARD_ATSTK1000_EXTDAC=y # CONFIG_BOARD_ATSTK100X_ENABLE_AC97 is not set # CONFIG_BOARD_ATSTK1000_CF_HACKS is not set -# CONFIG_BOARD_ATSTK100X_ENABLE_PSIF is not set +CONFIG_BOARD_ATSTK100X_ENABLE_PSIF=y CONFIG_LOADER_U_BOOT=y # @@ -196,13 +197,22 @@ CONFIG_CPU_FREQ_AT32AP=y # Bus options # # CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCCARD is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_AT32_CF=y # # Executable file formats # CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set +CONFIG_BINFMT_MISC=m # # Networking @@ -314,7 +324,7 @@ CONFIG_WIRELESS_EXT=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_STANDALONE=y # CONFIG_PREVENT_FIRMWARE_BUILD is not set -# CONFIG_FW_LOADER is not set +CONFIG_FW_LOADER=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set @@ -422,7 +432,7 @@ CONFIG_ATMEL_SSC=m # SCSI device support # # CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m +CONFIG_SCSI=y CONFIG_SCSI_DMA=y # CONFIG_SCSI_TGT is not set # CONFIG_SCSI_NETLINK is not set @@ -457,10 +467,12 @@ CONFIG_SCSI_WAIT_SCAN=m # CONFIG_SCSI_SAS_LIBSAS is not set # CONFIG_SCSI_SRP_ATTRS is not set # CONFIG_SCSI_LOWLEVEL is not set -CONFIG_ATA=m +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +CONFIG_ATA=y # CONFIG_ATA_NONSTANDARD is not set -CONFIG_PATA_AT32=m -# CONFIG_PATA_PLATFORM is not set +CONFIG_PATA_AT32=y +CONFIG_PATA_PCMCIA=y +CONFIG_PATA_PLATFORM=y # CONFIG_MD is not set CONFIG_NETDEVICES=y # CONFIG_NETDEVICES_MULTIQUEUE is not set @@ -502,6 +514,7 @@ CONFIG_MACB=y # # CONFIG_WLAN_PRE80211 is not set # CONFIG_WLAN_80211 is not set +# CONFIG_NET_PCMCIA is not set # CONFIG_WAN is not set CONFIG_PPP=m # CONFIG_PPP_MULTILINK is not set @@ -532,19 +545,19 @@ CONFIG_INPUT_POLLDEV=m # # Userland interfaces # -CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV_PSAUX=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 # CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=m +CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set # # Input Device Drivers # CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_XTKBD is not set @@ -552,8 +565,15 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_STOWAWAY is not set CONFIG_KEYBOARD_GPIO=m CONFIG_INPUT_MOUSE=y -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_SERIAL=y +# CONFIG_MOUSE_APPLETOUCH is not set # CONFIG_MOUSE_VSXXXAA is not set CONFIG_MOUSE_GPIO=m # CONFIG_INPUT_JOYSTICK is not set @@ -564,7 +584,12 @@ CONFIG_MOUSE_GPIO=m # # Hardware I/O ports # -# CONFIG_SERIO is not set +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_AT32PSIF is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set # CONFIG_GAMEPORT is not set # @@ -597,6 +622,13 @@ CONFIG_UNIX98_PTYS=y # CONFIG_RTC is not set # CONFIG_GEN_RTC is not set # CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set CONFIG_I2C=m @@ -607,32 +639,32 @@ CONFIG_I2C_CHARDEV=m # I2C Algorithms # CONFIG_I2C_ALGOBIT=m -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ALGOPCA=m # # I2C Hardware Bus support # CONFIG_I2C_ATMELTWI=m CONFIG_I2C_GPIO=m -# 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_OCORES=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_STUB=m # # Miscellaneous I2C Chip support # -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set +CONFIG_SENSORS_DS1337=m +CONFIG_SENSORS_DS1374=m +CONFIG_DS1682=m +CONFIG_SENSORS_EEPROM=m +CONFIG_SENSORS_PCF8574=m +CONFIG_SENSORS_PCA9539=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_MAX6875=m +CONFIG_SENSORS_TSL2550=m # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set @@ -782,6 +814,12 @@ CONFIG_SND_ATMEL_AC97=m CONFIG_SND_AT73C213=m CONFIG_SND_AT73C213_TARGET_BITRATE=48000 +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + # # System on Chip audio support # @@ -801,9 +839,10 @@ CONFIG_SOUND_AT32_ABDAC=m CONFIG_AC97_BUS=m # CONFIG_HID_SUPPORT is not set CONFIG_USB_SUPPORT=y -# CONFIG_USB_ARCH_HAS_HCD is not set +CONFIG_USB_ARCH_HAS_HCD=y # CONFIG_USB_ARCH_HAS_OHCI is not set # CONFIG_USB_ARCH_HAS_EHCI is not set +# CONFIG_USB is not set # # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' @@ -933,13 +972,27 @@ CONFIG_EXT2_FS=y # CONFIG_EXT2_FS_XIP is not set CONFIG_EXT3_FS=y # CONFIG_EXT3_FS_XATTR is not set -# CONFIG_EXT4DEV_FS is not set +CONFIG_EXT4DEV_FS=m +CONFIG_EXT4DEV_FS_XATTR=y +# CONFIG_EXT4DEV_FS_POSIX_ACL is not set +# CONFIG_EXT4DEV_FS_SECURITY is not set CONFIG_JBD=y # CONFIG_JBD_DEBUG is not set +CONFIG_JBD2=m +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y # CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set +CONFIG_JFS_FS=m +# CONFIG_JFS_POSIX_ACL is not set +# CONFIG_JFS_SECURITY is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set # CONFIG_FS_POSIX_ACL is not set -# CONFIG_XFS_FS is not set +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_SECURITY is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set # CONFIG_GFS2_FS is not set # CONFIG_OCFS2_FS is not set # CONFIG_MINIX_FS is not set @@ -955,8 +1008,11 @@ CONFIG_FUSE_FS=m # # CD-ROM/DVD Filesystems # -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y # # DOS/FAT/NT Filesystems @@ -985,8 +1041,8 @@ CONFIG_CONFIGFS_FS=y # # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set @@ -1030,8 +1086,24 @@ CONFIG_SUNRPC=y # # Partition Types # -# CONFIG_PARTITION_ADVANCED is not set +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +CONFIG_AMIGA_PARTITION=y +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set CONFIG_NLS=m CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=m @@ -1127,45 +1199,48 @@ CONFIG_FORCED_INLINING=y # CONFIG_SECURITY_FILE_CAPABILITIES is not set CONFIG_CRYPTO=y CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_AEAD=m CONFIG_CRYPTO_BLKCIPHER=m CONFIG_CRYPTO_HASH=m CONFIG_CRYPTO_MANAGER=m CONFIG_CRYPTO_HMAC=m -# CONFIG_CRYPTO_XCBC is not set -# CONFIG_CRYPTO_NULL is not set -# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=m CONFIG_CRYPTO_SHA1=m -# CONFIG_CRYPTO_SHA256 is not set -# CONFIG_CRYPTO_SHA512 is not set -# CONFIG_CRYPTO_WP512 is not set -# CONFIG_CRYPTO_TGR192 is not set -# CONFIG_CRYPTO_GF128MUL is not set -# CONFIG_CRYPTO_ECB is not set +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 is not set -# CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_XTS is not set -# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_CRYPTD=m CONFIG_CRYPTO_DES=m -# CONFIG_CRYPTO_FCRYPT is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_TWOFISH is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_AES is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -# CONFIG_CRYPTO_TEA is not set -# CONFIG_CRYPTO_ARC4 is not set -# CONFIG_CRYPTO_KHAZAD is not set -# CONFIG_CRYPTO_ANUBIS is not set -# CONFIG_CRYPTO_SEED is not set +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_SEED=m CONFIG_CRYPTO_DEFLATE=m -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_CRC32C is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_TEST is not set -# CONFIG_CRYPTO_AUTHENC is not set +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m # CONFIG_CRYPTO_HW is not set # @@ -1173,11 +1248,11 @@ CONFIG_CRYPTO_DEFLATE=m # CONFIG_BITREVERSE=y CONFIG_CRC_CCITT=m -# CONFIG_CRC16 is not set +CONFIG_CRC16=m CONFIG_CRC_ITU_T=m CONFIG_CRC32=y CONFIG_CRC7=m -# CONFIG_LIBCRC32C is not set +CONFIG_LIBCRC32C=m CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index c88bff5d72..7fd2f457e4 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -10,7 +10,7 @@ DEFAULT_PREFERENCE_at32stk1000 = "1" DEFAULT_PREFERENCE_ts72xx = "1" DEFAULT_PREFERENCE_cs-e9302 = "1" -PR = "r13" +PR = "r14" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ -- cgit v1.2.3 From 39890f56f5b202d3dd35693ff754d510961311a6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 18:22:14 +0000 Subject: gcc 4.2.2: add more avr32 patches. * an image compiled from scratch boots straight into X, although the avahi seggault is still there --- packages/gcc/gcc-4.2.2.inc | 4 +- .../901-avr32-fix-no-cond-exec-before-reload.patch | 48 ++++++ .../902-avr32-fix-sync-insn-instructions.patch | 174 +++++++++++++++++++++ ...-fix-removal-of-redundant-cast-operations.patch | 16 ++ packages/gcc/gcc-cross_4.2.2.bb | 2 +- packages/gcc/gcc_4.2.2.bb | 2 +- 6 files changed, 243 insertions(+), 3 deletions(-) create mode 100644 packages/gcc/gcc-4.2.2/901-avr32-fix-no-cond-exec-before-reload.patch create mode 100644 packages/gcc/gcc-4.2.2/902-avr32-fix-sync-insn-instructions.patch create mode 100644 packages/gcc/gcc-4.2.2/903-avr32-fix-removal-of-redundant-cast-operations.patch diff --git a/packages/gcc/gcc-4.2.2.inc b/packages/gcc/gcc-4.2.2.inc index 5691fb647a..0f4de3cdc7 100644 --- a/packages/gcc/gcc-4.2.2.inc +++ b/packages/gcc/gcc-4.2.2.inc @@ -43,7 +43,9 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ SRC_URI_append_avr32 = " \ file://gcc-4.2.2.atmel.1.0.8.patch.bz2;patch=1 \ - file://901-avr32-no-cond-exec-before-reload-by-default.patch;patch=1 \ + file://901-avr32-fix-no-cond-exec-before-reload.patch;patch=1 \ + file://902-avr32-fix-sync-insn-instructions.patch;patch=1 \ + file://903-avr32-fix-removal-of-redundant-cast-operations.patch;patch=1 \ " diff --git a/packages/gcc/gcc-4.2.2/901-avr32-fix-no-cond-exec-before-reload.patch b/packages/gcc/gcc-4.2.2/901-avr32-fix-no-cond-exec-before-reload.patch new file mode 100644 index 0000000000..5d84dd82a8 --- /dev/null +++ b/packages/gcc/gcc-4.2.2/901-avr32-fix-no-cond-exec-before-reload.patch @@ -0,0 +1,48 @@ +Index: trunk/gcc/config/avr32/avr32.c +=================================================================== +--- trunk/gcc/config/avr32/avr32.c (revision 42108) ++++ trunk/gcc/config/avr32/avr32.c (revision 42335) +@@ -3737,7 +3737,34 @@ + return 0; + } + ++/* Return TRUE if X contains a MEM expression. */ ++int ++mem_mentioned_p (rtx x) ++{ ++ const char *fmt; ++ int i; + ++ if (MEM_P (x)) ++ return 1; ++ ++ fmt = GET_RTX_FORMAT (GET_CODE (x)); ++ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) ++ { ++ if (fmt[i] == 'E') ++ { ++ int j; ++ ++ for (j = XVECLEN (x, i) - 1; j >= 0; j--) ++ if (mem_mentioned_p (XVECEXP (x, i, j))) ++ return 1; ++ } ++ else if (fmt[i] == 'e' && mem_mentioned_p (XEXP (x, i))) ++ return 1; ++ } ++ ++ return 0; ++} ++ + int + avr32_legitimate_pic_operand_p (rtx x) + { +@@ -7547,7 +7574,7 @@ + /* We cannot move memory loads outside of the if-then-else + since the memory access should not be perfomed if the + condition is not met. */ +- && !MEM_P (SET_SRC (op)) ) ++ && !mem_mentioned_p (SET_SRC (op)) ) + { + rtx scratch_reg = gen_reg_rtx (mode); + rtx op_pattern = copy_rtx (op); diff --git a/packages/gcc/gcc-4.2.2/902-avr32-fix-sync-insn-instructions.patch b/packages/gcc/gcc-4.2.2/902-avr32-fix-sync-insn-instructions.patch new file mode 100644 index 0000000000..aab1490c98 --- /dev/null +++ b/packages/gcc/gcc-4.2.2/902-avr32-fix-sync-insn-instructions.patch @@ -0,0 +1,174 @@ +Index: a/gcc/config/avr32/predicates.md +=================================================================== +--- a/gcc/config/avr32/predicates.md (revision 42108) ++++ b/gcc/config/avr32/predicates.md (working copy) +@@ -333,6 +333,11 @@ + && ((GET_CODE(XEXP(op,0)) == CONST_INT) + || (GET_CODE(XEXP(op,1)) == CONST_INT))")) )) + ++;; An offset k16 memory operand ++(define_predicate "avr32_ks16_memory_operand" ++ (and (match_code "mem") ++ (match_test "avr32_ks16_address_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)))"))) ++ + ;; An immediate k11 address operand + (define_predicate "avr32_ks11_address_operand" + (and (match_operand 0 "address_operand") +Index: a/gcc/config/avr32/sync.md +=================================================================== +--- a/gcc/config/avr32/sync.md (revision 41409) ++++ b/gcc/config/avr32/sync.md (working copy) +@@ -32,9 +32,14 @@ + (define_code_attr atomic_insn [(plus "add") (minus "sub") (and "and") (ior "ior") (xor "xor")]) + + (define_insn "sync_loadsi" +- [(set (match_operand:SI 0 "register_operand" "=r") ++ ; NB! Put an early clobber on the destination operand to ++ ; avoid gcc using the same register in the source and ++ ; destination. This is done in order to avoid gcc to ++ ; clobber the source operand since these instructions ++ ; are actually inside a "loop". ++ [(set (match_operand:SI 0 "register_operand" "=&r") + (unspec_volatile:SI +- [(match_operand:SI 1 "memory_operand" "RKs16") ++ [(match_operand:SI 1 "avr32_ks16_memory_operand" "RKs16") + (label_ref (match_operand 2 "" ""))] + VUNSPEC_SYNC_SET_LOCK_AND_LOAD) )] + "" +@@ -46,7 +51,7 @@ + ) + + (define_insn "sync_store_if_lock" +- [(set (match_operand:SI 0 "memory_operand" "=RKs16") ++ [(set (match_operand:SI 0 "avr32_ks16_memory_operand" "=RKs16") + (unspec_volatile:SI + [(match_operand:SI 1 "register_operand" "r") + (label_ref (match_operand 2 "" ""))] +@@ -62,7 +67,7 @@ + (define_expand "sync_si" + [(set (match_dup 2) + (unspec_volatile:SI +- [(match_operand:SI 0 "memory_operand" "") ++ [(match_operand:SI 0 "avr32_ks16_memory_operand" "") + (match_dup 3)] + VUNSPEC_SYNC_SET_LOCK_AND_LOAD)) + (set (match_dup 2) +@@ -72,11 +77,33 @@ + (unspec_volatile:SI + [(match_dup 2) + (match_dup 3)] +- VUNSPEC_SYNC_STORE_IF_LOCK) )] ++ VUNSPEC_SYNC_STORE_IF_LOCK) ) ++ (use (match_dup 1)) ++ (use (match_dup 4))] + "" + { ++ rtx *mem_expr = &operands[0]; ++ rtx ptr_reg; ++ if ( !avr32_ks16_memory_operand (*mem_expr, GET_MODE (*mem_expr)) ) ++ { ++ ptr_reg = force_reg (Pmode, XEXP (*mem_expr, 0)); ++ XEXP (*mem_expr, 0) = ptr_reg; ++ } ++ else ++ { ++ rtx address = XEXP (*mem_expr, 0); ++ if ( REG_P (address) ) ++ ptr_reg = address; ++ else if ( REG_P (XEXP (address, 0)) ) ++ ptr_reg = XEXP (address, 0); ++ else ++ ptr_reg = XEXP (address, 1); ++ } ++ + operands[2] = gen_reg_rtx (SImode); + operands[3] = gen_rtx_LABEL_REF(Pmode, gen_label_rtx ()); ++ operands[4] = ptr_reg; ++ + } + ) + +@@ -85,7 +112,7 @@ + (define_expand "sync_old_si" + [(set (match_operand:SI 0 "register_operand" "") + (unspec_volatile:SI +- [(match_operand:SI 1 "memory_operand" "") ++ [(match_operand:SI 1 "avr32_ks16_memory_operand" "") + (match_dup 4)] + VUNSPEC_SYNC_SET_LOCK_AND_LOAD)) + (set (match_dup 3) +@@ -95,18 +122,39 @@ + (unspec_volatile:SI + [(match_dup 3) + (match_dup 4)] +- VUNSPEC_SYNC_STORE_IF_LOCK) )] ++ VUNSPEC_SYNC_STORE_IF_LOCK) ) ++ (use (match_dup 2)) ++ (use (match_dup 5))] + "" + { ++ rtx *mem_expr = &operands[1]; ++ rtx ptr_reg; ++ if ( !avr32_ks16_memory_operand (*mem_expr, GET_MODE (*mem_expr)) ) ++ { ++ ptr_reg = force_reg (Pmode, XEXP (*mem_expr, 0)); ++ XEXP (*mem_expr, 0) = ptr_reg; ++ } ++ else ++ { ++ rtx address = XEXP (*mem_expr, 0); ++ if ( REG_P (address) ) ++ ptr_reg = address; ++ else if ( REG_P (XEXP (address, 0)) ) ++ ptr_reg = XEXP (address, 0); ++ else ++ ptr_reg = XEXP (address, 1); ++ } ++ + operands[3] = gen_reg_rtx (SImode); + operands[4] = gen_rtx_LABEL_REF(Pmode, gen_label_rtx ()); ++ operands[5] = ptr_reg; + } + ) + + (define_expand "sync_new_si" + [(set (match_operand:SI 0 "register_operand" "") + (unspec_volatile:SI +- [(match_operand:SI 1 "memory_operand" "") ++ [(match_operand:SI 1 "avr32_ks16_memory_operand" "") + (match_dup 3)] + VUNSPEC_SYNC_SET_LOCK_AND_LOAD)) + (set (match_dup 0) +@@ -116,10 +164,31 @@ + (unspec_volatile:SI + [(match_dup 0) + (match_dup 3)] +- VUNSPEC_SYNC_STORE_IF_LOCK) )] ++ VUNSPEC_SYNC_STORE_IF_LOCK) ) ++ (use (match_dup 2)) ++ (use (match_dup 4))] + "" + { ++ rtx *mem_expr = &operands[1]; ++ rtx ptr_reg; ++ if ( !avr32_ks16_memory_operand (*mem_expr, GET_MODE (*mem_expr)) ) ++ { ++ ptr_reg = force_reg (Pmode, XEXP (*mem_expr, 0)); ++ XEXP (*mem_expr, 0) = ptr_reg; ++ } ++ else ++ { ++ rtx address = XEXP (*mem_expr, 0); ++ if ( REG_P (address) ) ++ ptr_reg = address; ++ else if ( REG_P (XEXP (address, 0)) ) ++ ptr_reg = XEXP (address, 0); ++ else ++ ptr_reg = XEXP (address, 1); ++ } ++ + operands[3] = gen_rtx_LABEL_REF(Pmode, gen_label_rtx ()); ++ operands[4] = ptr_reg; + } + ) + diff --git a/packages/gcc/gcc-4.2.2/903-avr32-fix-removal-of-redundant-cast-operations.patch b/packages/gcc/gcc-4.2.2/903-avr32-fix-removal-of-redundant-cast-operations.patch new file mode 100644 index 0000000000..59ecbff4f5 --- /dev/null +++ b/packages/gcc/gcc-4.2.2/903-avr32-fix-removal-of-redundant-cast-operations.patch @@ -0,0 +1,16 @@ +Index: trunk/gcc/config/avr32/avr32.c +=================================================================== +--- trunk/gcc/config/avr32/avr32.c (revision 43495) ++++ trunk/gcc/config/avr32/avr32.c (revision 43496) +@@ -6499,6 +6499,11 @@ + break; + } + ++ /* Check if we have a call and the register is used as an argument. */ ++ if (CALL_P (scan) ++ && find_reg_fusage (scan, USE, reg) ) ++ break; ++ + if (!reg_mentioned_p (reg, PATTERN (scan))) + continue; + diff --git a/packages/gcc/gcc-cross_4.2.2.bb b/packages/gcc/gcc-cross_4.2.2.bb index 816eddba19..38a69aafc3 100644 --- a/packages/gcc/gcc-cross_4.2.2.bb +++ b/packages/gcc/gcc-cross_4.2.2.bb @@ -1,4 +1,4 @@ -PR = "r10" +PR = "r11" require gcc-${PV}.inc require gcc-cross4.inc diff --git a/packages/gcc/gcc_4.2.2.bb b/packages/gcc/gcc_4.2.2.bb index a2ae0c0e92..ca22e0f69c 100644 --- a/packages/gcc/gcc_4.2.2.bb +++ b/packages/gcc/gcc_4.2.2.bb @@ -1,4 +1,4 @@ -PR = "r8" +PR = "r9" require gcc-${PV}.inc require gcc-configure-target.inc -- cgit v1.2.3 From 22b15c84b3bf5850c0ec574925a068a85da8db84 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 18:23:18 +0000 Subject: gnash-minimal: fix PV --- packages/gnash/gnash-minimal_cvs.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gnash/gnash-minimal_cvs.bb b/packages/gnash/gnash-minimal_cvs.bb index c079caadc6..de0e6f9db9 100644 --- a/packages/gnash/gnash-minimal_cvs.bb +++ b/packages/gnash/gnash-minimal_cvs.bb @@ -1,4 +1,6 @@ require gnash-minimal.inc +PV = "0.8.2+cvs${SRCDATE}" + SRC_URI = "cvs://anonymous:anonymous@cvs.sv.gnu.org/sources/gnash;module=gnash" S = ${WORKDIR}/gnash -- cgit v1.2.3 From 00b4052c0de0d3fd4df2e1fd59b0c98418254a4c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 1 Jul 2008 19:21:23 +0000 Subject: linux 2.6.25: add support for at32stk1000 --- .../linux/linux-2.6.25/at32stk1000/.mtn2git_empty | 0 packages/linux/linux-2.6.25/at32stk1000/defconfig | 1297 ++++++++++++++++++++ packages/linux/linux_2.6.25.bb | 7 + 3 files changed, 1304 insertions(+) create mode 100644 packages/linux/linux-2.6.25/at32stk1000/.mtn2git_empty create mode 100644 packages/linux/linux-2.6.25/at32stk1000/defconfig diff --git a/packages/linux/linux-2.6.25/at32stk1000/.mtn2git_empty b/packages/linux/linux-2.6.25/at32stk1000/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-2.6.25/at32stk1000/defconfig b/packages/linux/linux-2.6.25/at32stk1000/defconfig new file mode 100644 index 0000000000..9bacf1739d --- /dev/null +++ b/packages/linux/linux-2.6.25/at32stk1000/defconfig @@ -0,0 +1,1297 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.25 +# Tue Jul 1 21:14:57 2008 +# +CONFIG_AVR32=y +CONFIG_GENERIC_GPIO=y +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_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_BUG=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_GROUP_SCHED=y +# CONFIG_FAIR_GROUP_SCHED is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_USER_SCHED=y +# CONFIG_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +CONFIG_RELAY=y +# CONFIG_NAMESPACES is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_COMPAT_BRK=y +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +CONFIG_PROFILING=y +# CONFIG_MARKERS is not set +CONFIG_OPROFILE=m +CONFIG_HAVE_OPROFILE=y +CONFIG_KPROBES=y +CONFIG_HAVE_KPROBES=y +# CONFIG_HAVE_KRETPROBES is not set +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=1 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_KMOD is not set +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_CLASSIC_RCU=y + +# +# System Type and features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_SUBARCH_AVR32B=y +CONFIG_MMU=y +CONFIG_PERFORMANCE_COUNTERS=y +CONFIG_PLATFORM_AT32AP=y +CONFIG_CPU_AT32AP700X=y +CONFIG_CPU_AT32AP7000=y +CONFIG_BOARD_ATSTK1000=y +# CONFIG_BOARD_ATNGW100 is not set +CONFIG_BOARD_ATSTK1002=y +# CONFIG_BOARD_ATSTK1003 is not set +# CONFIG_BOARD_ATSTK1004 is not set +# CONFIG_BOARD_ATSTK1006 is not set +# CONFIG_BOARD_ATSTK100X_CUSTOM is not set +# CONFIG_BOARD_ATSTK100X_SPI1 is not set +# CONFIG_BOARD_ATSTK1000_J2_LED is not set +# CONFIG_BOARD_ATSTK1000_J2_LED8 is not set +# CONFIG_BOARD_ATSTK1000_J2_RGB is not set +CONFIG_BOARD_ATSTK1000_EXTDAC=y +# CONFIG_BOARD_ATSTK100X_ENABLE_AC97 is not set +# CONFIG_BOARD_ATSTK1000_CF_HACKS is not set +CONFIG_BOARD_ATSTK100X_ENABLE_PSIF=y +CONFIG_LOADER_U_BOOT=y + +# +# Atmel AVR32 AP options +# +# CONFIG_AP700X_32_BIT_SMC is not set +CONFIG_AP700X_16_BIT_SMC=y +# CONFIG_AP700X_8_BIT_SMC is not set +CONFIG_GPIO_DEV=y +CONFIG_LOAD_ADDRESS=0x10000000 +CONFIG_ENTRY_ADDRESS=0x90000000 +CONFIG_PHYS_OFFSET=0x10000000 +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set +# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set +# CONFIG_NEED_NODE_MEMMAP_SIZE is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +# CONFIG_ARCH_SPARSEMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +CONFIG_VIRT_TO_BUS=y +# CONFIG_OWNERSHIP_TRACE is not set +CONFIG_NMI_DEBUGGING=y +CONFIG_DW_DMAC=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +# CONFIG_SCHED_HRTICK is not set +CONFIG_CMDLINE=" debug " + +# +# Power management options +# +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_PM is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_STAT 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 is not set +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_AT32AP=y + +# +# Bus options +# +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_AT32_CF=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=m +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_TCPPROBE is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_CFI_INTELEXT is not set +CONFIG_MTD_CFI_AMDSTD=y +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_M25P80=m +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +CONFIG_MTD_NAND_ATMEL=y +CONFIG_MTD_NAND_ATMEL_ECC_HW=y +# CONFIG_MTD_NAND_ATMEL_ECC_SOFT is not set +# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +CONFIG_ATMEL_PWM=m +CONFIG_ATMEL_TCLIB=y +CONFIG_ATMEL_TCB_CLKSRC=y +CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 +# CONFIG_EEPROM_93CX6 is not set +CONFIG_ATMEL_SSC=m +# CONFIG_ENCLOSURE_SERVICES is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_SATA_MV is not set +CONFIG_PATA_AT32=m +CONFIG_PATA_PCMCIA=m +# CONFIG_PATA_PLATFORM is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +# CONFIG_MARVELL_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_FIXED_PHY is not set +# CONFIG_MDIO_BITBANG is not set +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set +CONFIG_MACB=y +# CONFIG_ENC28J60 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set +# CONFIG_NET_PCMCIA is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +CONFIG_INPUT_POLLDEV=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=m +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_GPIO=m +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_VSXXXAA is not set +CONFIG_MOUSE_GPIO=m +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_AT32PSIF is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=y +CONFIG_SERIAL_ATMEL_PDC=y +# CONFIG_SERIAL_ATMEL_TTYAT is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_IPWIRELESS is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +CONFIG_I2C_ATMELTWI=m +CONFIG_I2C_GPIO=m +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_PCF8575 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_TPS65010 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_ATMEL=y +# CONFIG_SPI_BITBANG is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +CONFIG_SPI_SPIDEV=m +# CONFIG_SPI_TLE62X0 is not set +CONFIG_HAVE_GPIO_LIB=y + +# +# GPIO Support +# +# CONFIG_DEBUG_GPIO is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_THERMAL is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_AT32AP700X_WDT=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_ATMEL=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_LCD_LTV350QV=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_ATMEL_LCDC=y +CONFIG_BACKLIGHT_CORGI=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=m +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# AVR32 devices +# +CONFIG_SND_ATMEL_AC97=m + +# +# SPI devices +# +CONFIG_SND_AT73C213=m +CONFIG_SND_AT73C213_TARGET_BITRATE=48000 + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# ALSA SoC audio for Freescale SOCs +# + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=m +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_AT32_ABDAC=m +CONFIG_AC97_BUS=m +# CONFIG_HID_SUPPORT is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set +# CONFIG_USB is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +CONFIG_USB_GADGET_ATMEL_USBA=y +CONFIG_USB_ATMEL_USBA=y +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +# CONFIG_MMC_BLOCK_BOUNCE is not set +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_ATMELMCI=y +CONFIG_MMC_SPI=m +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_ATMEL_PWM=m +CONFIG_LEDS_GPIO=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_S35390A is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_AT32AP700X=y + +# +# Userspace I/O +# +# CONFIG_UIO is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +# CONFIG_REISERFS_FS is not set +CONFIG_JFS_FS=m +# CONFIG_JFS_POSIX_ACL is not set +# CONFIG_JFS_SECURITY is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +# CONFIG_FS_POSIX_ACL is not set +CONFIG_XFS_FS=m +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_SECURITY is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_XFS_RT is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_DNOTIFY is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_CONFIGFS_FS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_WRITEBUFFER is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_KPROBES_SANITY_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_LKDTM is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=m +# CONFIG_CRYPTO_SEQIV is not set +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +# CONFIG_CRYPTO_ECB is not set +CONFIG_CRYPTO_CBC=m +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +# CONFIG_CRYPTO_ARC4 is not set +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_SALSA20 is not set +CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +# CONFIG_CRC16 is not set +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +CONFIG_CRC7=m +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux_2.6.25.bb b/packages/linux/linux_2.6.25.bb index ca15db543f..309ce5a5f7 100644 --- a/packages/linux/linux_2.6.25.bb +++ b/packages/linux/linux_2.6.25.bb @@ -1,5 +1,7 @@ require linux.inc +PR = "r1" + # Mark archs/machines that this kernel supports DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_mpc8313e-rdb = "1" @@ -7,6 +9,7 @@ DEFAULT_PREFERENCE_kilauea = "1" DEFAULT_PREFERENCE_sequoia = "1" DEFAULT_PREFERENCE_cm-x270 = "1" DEFAULT_PREFERENCE_alix = "1" +DEFAULT_PREFERENCE_at32stk1000 = "1" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \ file://defconfig" @@ -25,6 +28,10 @@ SRC_URI_append_cm-x270 = " \ file://0005-add-display-set-default-16bpp.patch;patch=1 \ " +SRC_URI_append_at32stk1000 = " \ + http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.25.6.atmel.1.patch.bz2;patch=1 \ +" + CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=1 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2" FILES_kernel-image_cm-x270 = "" -- cgit v1.2.3 From 6d002a2a1fdb9442476e19813b69ecc273a52027 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 1 Jul 2008 22:11:32 +0000 Subject: linux-openmoko-devel git catch up with defconfigs re. new touchscreen stuff --- packages/linux/linux-openmoko-devel/defconfig-om-gta01 | 3 +++ packages/linux/linux-openmoko-devel/defconfig-om-gta02 | 3 +++ packages/linux/linux-openmoko-devel_git.bb | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-openmoko-devel/defconfig-om-gta01 b/packages/linux/linux-openmoko-devel/defconfig-om-gta01 index 4dd9b12eff..889f7ec2e4 100644 --- a/packages/linux/linux-openmoko-devel/defconfig-om-gta01 +++ b/packages/linux/linux-openmoko-devel/defconfig-om-gta01 @@ -891,6 +891,9 @@ CONFIG_INPUT_MOUSE=y # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_FILTER=y +CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y +CONFIG_TOUCHSCREEN_FILTER_MEAN=y # CONFIG_TOUCHSCREEN_ADS7846 is not set # CONFIG_TOUCHSCREEN_FUJITSU is not set CONFIG_TOUCHSCREEN_S3C2410=y diff --git a/packages/linux/linux-openmoko-devel/defconfig-om-gta02 b/packages/linux/linux-openmoko-devel/defconfig-om-gta02 index eaa62e624f..f87c723d4c 100644 --- a/packages/linux/linux-openmoko-devel/defconfig-om-gta02 +++ b/packages/linux/linux-openmoko-devel/defconfig-om-gta02 @@ -890,6 +890,9 @@ CONFIG_INPUT_MOUSE=y # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_FILTER=y +CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y +CONFIG_TOUCHSCREEN_FILTER_MEAN=y # CONFIG_TOUCHSCREEN_ADS7846 is not set # CONFIG_TOUCHSCREEN_FUJITSU is not set CONFIG_TOUCHSCREEN_S3C2410=y diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb index d6bf57e3e3..9c14ebfa66 100644 --- a/packages/linux/linux-openmoko-devel_git.bb +++ b/packages/linux/linux-openmoko-devel_git.bb @@ -8,8 +8,8 @@ KERNEL_RELEASE = "2.6.24" KERNEL_VERSION = "${KERNEL_RELEASE}" # If you use a rc, you will need to use this: -PV = "${KERNEL_RELEASE}+git${SRCREV}" -PR = "r1" +PV = "${KERNEL_RELEASE}+gitr${SRCREV}" +PR = "r2" KERNEL_IMAGETYPE = "uImage" UBOOT_ENTRYPOINT = "30008000" -- cgit v1.2.3 From fb85fbb2e30978207c7168f231578021b757d562 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 1 Jul 2008 22:41:23 +0000 Subject: xserver-kdrive-common 0.1 (openmoko/Xserver) start X on VT1 (marginally streamlining startup) --- .../xserver-kdrive-common/openmoko/Xserver | 11 +++++------ packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver b/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver index f92b983788..d9ee794b75 100644 --- a/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver +++ b/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver @@ -65,7 +65,6 @@ case `module_id` in IMAGEON="w3220" ;; "Ramses") - # What is this "vt2" in aid of? ARGS="$ARGS -br -dpi 100 -rgba vrgb -screen 320x240@90 vt2" ;; # both 'Sharp-Collie' and just 'Collie' have been reported *Poodle) @@ -94,14 +93,14 @@ case `module_id` in modprobe mbxfb ARGS="$ARGS -br -fb /dev/fb1" ;; "GTA01" | "GTA02") - ARGS="$ARGS -dpi 285 -screen 480x640 -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-vga.ppm" ;; + ARGS="$ARGS -dpi 285 -screen 480x640 -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-vga.ppm vt1" ;; "Motorola Ezx Platform") - ARGS="$ARGS -dpi 170 -screen 240x320 -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm" ;; + ARGS="$ARGS -dpi 170 -screen 240x320 -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm vt1" ;; "Nokia N800") ARGS="$ARGS -br -dpi 225 -screen 800x480x16 -mouse tslib" ;; - "Freescale MX21ADS") - # That's what /proc/cpuinfo shows as hardware on the chumby - ARGS="$ARGS -dpi 121 -screen 320x240 -hide-cursor -mouse tslib -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm" ;; + "Freescale MX21ADS") + # That's what /proc/cpuinfo shows as hardware on the chumby + ARGS="$ARGS -dpi 121 -screen 320x240 -hide-cursor -mouse tslib -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm vt1" ;; *) # It is a device we do not know about, in which case we force # kdrive to use the current framebuffer geometry -- otherwise diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb b/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb index b070c7e599..e07a83ed3c 100644 --- a/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb +++ b/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Common X11 scripts" LICENSE = "GPL" SECTION = "x11" RDEPENDS_${PN} = "xmodmap libxrandr xdpyinfo xtscal xinit" -PR = "r28" +PR = "r29" SRC_URI = "\ file://Xdefaults \ -- cgit v1.2.3 From 5277518d2a2ca1d93bda682afe60bc7846756c41 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 2 Jul 2008 09:02:57 +0000 Subject: linux-omap2 git: run dos2unix over patch files --- .../beagleboard/0001-omap3-cpuidle.patch | 900 ++++++++++----------- .../beagleboard/0002-omap3-cpuidle.patch | 176 ++-- .../beagleboard/fix-dispc-clocks.patch | 294 +++---- .../omap3evm/0001-omap3-cpuidle.patch | 900 ++++++++++----------- .../omap3evm/0002-omap3-cpuidle.patch | 176 ++-- 5 files changed, 1223 insertions(+), 1223 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/0001-omap3-cpuidle.patch b/packages/linux/linux-omap2-git/beagleboard/0001-omap3-cpuidle.patch index 28b1ef2214..cdc9447b4c 100644 --- a/packages/linux/linux-omap2-git/beagleboard/0001-omap3-cpuidle.patch +++ b/packages/linux/linux-omap2-git/beagleboard/0001-omap3-cpuidle.patch @@ -1,450 +1,450 @@ -From: "Rajendra Nayak" -To: -Subject: [PATCH 01/02] OMAP3 CPUidle driver -Date: Tue, 10 Jun 2008 12:39:00 +0530 - -This patch adds the OMAP3 cpuidle driver. Irq enable/disable is done in the core cpuidle driver -before it queries the governor for the next state. - -Signed-off-by: Rajendra Nayak - ---- - arch/arm/mach-omap2/Makefile | 2 - arch/arm/mach-omap2/cpuidle34xx.c | 293 ++++++++++++++++++++++++++++++++++++++ - arch/arm/mach-omap2/cpuidle34xx.h | 51 ++++++ - arch/arm/mach-omap2/pm34xx.c | 5 - drivers/cpuidle/cpuidle.c | 10 + - 5 files changed, 359 insertions(+), 2 deletions(-) - -Index: linux-omap-2.6/arch/arm/mach-omap2/Makefile -=================================================================== ---- linux-omap-2.6.orig/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:33.855303920 +0530 -+++ linux-omap-2.6/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:39.569121361 +0530 -@@ -20,7 +20,7 @@ obj-y += pm.o - obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o - obj-$(CONFIG_ARCH_OMAP2420) += sleep242x.o - obj-$(CONFIG_ARCH_OMAP2430) += sleep243x.o --obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o -+obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o - obj-$(CONFIG_PM_DEBUG) += pm-debug.o - endif - -Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c 2008-06-10 11:41:27.644820323 +0530 -@@ -0,0 +1,293 @@ -+/* -+ * linux/arch/arm/mach-omap2/cpuidle34xx.c -+ * -+ * OMAP3 CPU IDLE Routines -+ * -+ * Copyright (C) 2007-2008 Texas Instruments, Inc. -+ * Rajendra Nayak -+ * -+ * Copyright (C) 2007 Texas Instruments, Inc. -+ * Karthik Dasu -+ * -+ * Copyright (C) 2006 Nokia Corporation -+ * Tony Lindgren -+ * -+ * Copyright (C) 2005 Texas Instruments, Inc. -+ * Richard Woodruff -+ * -+ * 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 -+#include -+#include -+#include -+#include -+#include -+#include "cpuidle34xx.h" -+ -+#ifdef CONFIG_CPU_IDLE -+ -+struct omap3_processor_cx omap3_power_states[OMAP3_MAX_STATES]; -+struct omap3_processor_cx current_cx_state; -+ -+static int omap3_idle_bm_check(void) -+{ -+ /* Check for omap3_fclks_active() here once available */ -+ return 0; -+} -+ -+/* omap3_enter_idle - Programs OMAP3 to enter the specified state. -+ * returns the total time during which the system was idle. -+ */ -+static int omap3_enter_idle(struct cpuidle_device *dev, -+ struct cpuidle_state *state) -+{ -+ struct omap3_processor_cx *cx = cpuidle_get_statedata(state); -+ struct timespec ts_preidle, ts_postidle, ts_idle; -+ struct powerdomain *mpu_pd, *core_pd, *per_pd, *neon_pd; -+ int neon_pwrst; -+ -+ current_cx_state = *cx; -+ -+ if (cx->type == OMAP3_STATE_C0) { -+ /* Do nothing for C0, not even a wfi */ -+ return 0; -+ } -+ -+ /* Used to keep track of the total time in idle */ -+ getnstimeofday(&ts_preidle); -+ -+ mpu_pd = pwrdm_lookup("mpu_pwrdm"); -+ core_pd = pwrdm_lookup("core_pwrdm"); -+ per_pd = pwrdm_lookup("per_pwrdm"); -+ neon_pd = pwrdm_lookup("neon_pwrdm"); -+ -+ /* Reset previous power state registers */ -+ pwrdm_clear_all_prev_pwrst(mpu_pd); -+ pwrdm_clear_all_prev_pwrst(neon_pd); -+ pwrdm_clear_all_prev_pwrst(core_pd); -+ pwrdm_clear_all_prev_pwrst(per_pd); -+ -+ if (omap_irq_pending()) -+ return 0; -+ -+ neon_pwrst = pwrdm_read_pwrst(neon_pd); -+ -+ /* Program MPU/NEON to target state */ -+ if (cx->mpu_state < PWRDM_POWER_ON) { -+ if (neon_pwrst == PWRDM_POWER_ON) { -+ if (cx->mpu_state == PWRDM_POWER_RET) -+ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_RET); -+ else if (cx->mpu_state == PWRDM_POWER_OFF) -+ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_OFF); -+ } -+ pwrdm_set_next_pwrst(mpu_pd, cx->mpu_state); -+ } -+ -+ /* Program CORE to target state */ -+ if (cx->core_state < PWRDM_POWER_ON) -+ pwrdm_set_next_pwrst(core_pd, cx->core_state); -+ -+ /* Execute ARM wfi */ -+ omap_sram_idle(); -+ -+ /* Program MPU/NEON to ON */ -+ if (cx->mpu_state < PWRDM_POWER_ON) { -+ if (neon_pwrst == PWRDM_POWER_ON) -+ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_ON); -+ pwrdm_set_next_pwrst(mpu_pd, PWRDM_POWER_ON); -+ } -+ -+ if (cx->core_state < PWRDM_POWER_ON) -+ pwrdm_set_next_pwrst(core_pd, PWRDM_POWER_ON); -+ -+ getnstimeofday(&ts_postidle); -+ ts_idle = timespec_sub(ts_postidle, ts_preidle); -+ return timespec_to_ns(&ts_idle); -+} -+ -+/* -+ * omap3_enter_idle_bm - enter function for states with CPUIDLE_FLAG_CHECK_BM -+ * -+ * This function checks for all the pre-requisites needed for OMAP3 to enter -+ * CORE RET/OFF state. It then calls omap3_enter_idle to program the desired -+ * C state. -+ */ -+static int omap3_enter_idle_bm(struct cpuidle_device *dev, -+ struct cpuidle_state *state) -+{ -+ struct cpuidle_state *new_state = NULL; -+ int i, j; -+ -+ if ((state->flags & CPUIDLE_FLAG_CHECK_BM) && omap3_idle_bm_check()) { -+ -+ /* Find current state in list */ -+ for (i = 0; i < OMAP3_MAX_STATES; i++) -+ if (state == &dev->states[i]) -+ break; -+ BUG_ON(i == OMAP3_MAX_STATES); -+ -+ /* Back up to non 'CHECK_BM' state */ -+ for (j = i - 1; j > 0; j--) { -+ struct cpuidle_state *s = &dev->states[j]; -+ -+ if (!(s->flags & CPUIDLE_FLAG_CHECK_BM)) { -+ new_state = s; -+ break; -+ } -+ } -+ -+ pr_debug("%s: Bus activity: Entering %s (instead of %s)\n", -+ __FUNCTION__, new_state->name, state->name); -+ } -+ -+ return omap3_enter_idle(dev, new_state ? : state); -+} -+ -+DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); -+ -+/* omap3_init_power_states - Initialises the OMAP3 specific C states. -+ * Below is the desciption of each C state. -+ * -+ C0 . System executing code -+ C1 . MPU WFI + Core active -+ C2 . MPU CSWR + Core active -+ C3 . MPU OFF + Core active -+ C4 . MPU CSWR + Core CSWR -+ C5 . MPU OFF + Core CSWR -+ C6 . MPU OFF + Core OFF -+ */ -+void omap_init_power_states(void) -+{ -+ /* C0 . System executing code */ -+ omap3_power_states[0].valid = 1; -+ omap3_power_states[0].type = OMAP3_STATE_C0; -+ omap3_power_states[0].sleep_latency = 0; -+ omap3_power_states[0].wakeup_latency = 0; -+ omap3_power_states[0].threshold = 0; -+ omap3_power_states[0].mpu_state = PWRDM_POWER_ON; -+ omap3_power_states[0].core_state = PWRDM_POWER_ON; -+ omap3_power_states[0].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_SHALLOW; -+ -+ /* C1 . MPU WFI + Core active */ -+ omap3_power_states[1].valid = 1; -+ omap3_power_states[1].type = OMAP3_STATE_C1; -+ omap3_power_states[1].sleep_latency = 10; -+ omap3_power_states[1].wakeup_latency = 10; -+ omap3_power_states[1].threshold = 30; -+ omap3_power_states[1].mpu_state = PWRDM_POWER_ON; -+ omap3_power_states[1].core_state = PWRDM_POWER_ON; -+ omap3_power_states[1].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_SHALLOW; -+ -+ /* C2 . MPU CSWR + Core active */ -+ omap3_power_states[2].valid = 1; -+ omap3_power_states[2].type = OMAP3_STATE_C2; -+ omap3_power_states[2].sleep_latency = 50; -+ omap3_power_states[2].wakeup_latency = 50; -+ omap3_power_states[2].threshold = 300; -+ omap3_power_states[2].mpu_state = PWRDM_POWER_RET; -+ omap3_power_states[2].core_state = PWRDM_POWER_ON; -+ omap3_power_states[2].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED; -+ -+ /* C3 . MPU OFF + Core active */ -+ omap3_power_states[3].valid = 0; -+ omap3_power_states[3].type = OMAP3_STATE_C3; -+ omap3_power_states[3].sleep_latency = 1500; -+ omap3_power_states[3].wakeup_latency = 1800; -+ omap3_power_states[3].threshold = 4000; -+ omap3_power_states[3].mpu_state = PWRDM_POWER_OFF; -+ omap3_power_states[3].core_state = PWRDM_POWER_RET; -+ omap3_power_states[3].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED; -+ -+ /* C4 . MPU CSWR + Core CSWR*/ -+ omap3_power_states[4].valid = 1; -+ omap3_power_states[4].type = OMAP3_STATE_C4; -+ omap3_power_states[4].sleep_latency = 2500; -+ omap3_power_states[4].wakeup_latency = 7500; -+ omap3_power_states[4].threshold = 12000; -+ omap3_power_states[4].mpu_state = PWRDM_POWER_RET; -+ omap3_power_states[4].core_state = PWRDM_POWER_RET; -+ omap3_power_states[4].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; -+ -+ /* C5 . MPU OFF + Core CSWR */ -+ omap3_power_states[5].valid = 0; -+ omap3_power_states[5].type = OMAP3_STATE_C5; -+ omap3_power_states[5].sleep_latency = 3000; -+ omap3_power_states[5].wakeup_latency = 8500; -+ omap3_power_states[5].threshold = 15000; -+ omap3_power_states[5].mpu_state = PWRDM_POWER_OFF; -+ omap3_power_states[5].core_state = PWRDM_POWER_RET; -+ omap3_power_states[5].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; -+ -+ /* C6 . MPU OFF + Core OFF */ -+ omap3_power_states[6].valid = 0; -+ omap3_power_states[6].type = OMAP3_STATE_C6; -+ omap3_power_states[6].sleep_latency = 10000; -+ omap3_power_states[6].wakeup_latency = 30000; -+ omap3_power_states[6].threshold = 300000; -+ omap3_power_states[6].mpu_state = PWRDM_POWER_OFF; -+ omap3_power_states[6].core_state = PWRDM_POWER_OFF; -+ omap3_power_states[6].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_DEEP | CPUIDLE_FLAG_CHECK_BM; -+} -+ -+struct cpuidle_driver omap3_idle_driver = { -+ .name = "omap3_idle", -+ .owner = THIS_MODULE, -+}; -+/* -+ * omap3_idle_init - Init routine for OMAP3 idle. -+ * Registers the OMAP3 specific cpuidle driver with the cpuidle f/w -+ * with the valid set of states. -+ */ -+int omap3_idle_init(void) -+{ -+ int i, count = 0; -+ struct omap3_processor_cx *cx; -+ struct cpuidle_state *state; -+ struct cpuidle_device *dev; -+ -+ omap_init_power_states(); -+ cpuidle_register_driver(&omap3_idle_driver); -+ -+ dev = &per_cpu(omap3_idle_dev, smp_processor_id()); -+ -+ for (i = 0; i < OMAP3_MAX_STATES; i++) { -+ cx = &omap3_power_states[i]; -+ state = &dev->states[count]; -+ -+ if (!cx->valid) -+ continue; -+ cpuidle_set_statedata(state, cx); -+ state->exit_latency = cx->sleep_latency + cx->wakeup_latency; -+ state->target_residency = cx->threshold; -+ state->flags = cx->flags; -+ state->enter = (state->flags & CPUIDLE_FLAG_CHECK_BM) ? -+ omap3_enter_idle_bm : omap3_enter_idle; -+ sprintf(state->name, "C%d", count+1); -+ count++; -+ } -+ -+ if (!count) -+ return -EINVAL; -+ dev->state_count = count; -+ -+ if (cpuidle_register_device(dev)) { -+ printk(KERN_ERR "%s: CPUidle register device failed\n", -+ __FUNCTION__); -+ return -EIO; -+ } -+ -+ return 0; -+} -+__initcall(omap3_idle_init); -+#endif /* CONFIG_CPU_IDLE */ -Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h 2008-06-09 20:15:39.569121361 +0530 -@@ -0,0 +1,51 @@ -+/* -+ * linux/arch/arm/mach-omap2/cpuidle34xx.h -+ * -+ * OMAP3 cpuidle structure definitions -+ * -+ * Copyright (C) 2007-2008 Texas Instruments, Inc. -+ * Written by Rajendra Nayak -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+ * -+ * History: -+ * -+ */ -+ -+#ifndef ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX -+#define ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX -+ -+#define OMAP3_MAX_STATES 7 -+#define OMAP3_STATE_C0 0 /* C0 - System executing code */ -+#define OMAP3_STATE_C1 1 /* C1 - MPU WFI + Core active */ -+#define OMAP3_STATE_C2 2 /* C2 - MPU CSWR + Core active */ -+#define OMAP3_STATE_C3 3 /* C3 - MPU OFF + Core active */ -+#define OMAP3_STATE_C4 4 /* C4 - MPU RET + Core RET */ -+#define OMAP3_STATE_C5 5 /* C5 - MPU OFF + Core RET */ -+#define OMAP3_STATE_C6 6 /* C6 - MPU OFF + Core OFF */ -+ -+extern void omap_sram_idle(void); -+extern int omap3_irq_pending(void); -+ -+struct omap3_processor_cx { -+ u8 valid; -+ u8 type; -+ u32 sleep_latency; -+ u32 wakeup_latency; -+ u32 mpu_state; -+ u32 core_state; -+ u32 threshold; -+ u32 flags; -+}; -+ -+void omap_init_power_states(void); -+int omap3_idle_init(void); -+ -+#endif /* ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX */ -+ -Index: linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c -=================================================================== ---- linux-omap-2.6.orig/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:15:33.855303920 +0530 -+++ linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:16:20.976798343 +0530 -@@ -141,7 +141,7 @@ static irqreturn_t prcm_interrupt_handle - return IRQ_HANDLED; - } - --static void omap_sram_idle(void) -+void omap_sram_idle(void) - { - /* Variable to tell what needs to be saved and restored - * in omap_sram_idle*/ -@@ -156,6 +156,7 @@ static void omap_sram_idle(void) - - mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm); - switch (mpu_next_state) { -+ case PWRDM_POWER_ON: - case PWRDM_POWER_RET: - /* No need to save context */ - save_state = 0; -@@ -386,7 +387,9 @@ int __init omap3_pm_init(void) - - prcm_setup_regs(); - -+#ifndef CONFIG_CPU_IDLE - pm_idle = omap3_pm_idle; -+#endif - - err1: - return ret; -Index: linux-omap-2.6/drivers/cpuidle/cpuidle.c -=================================================================== ---- linux-omap-2.6.orig/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:33.856303888 +0530 -+++ linux-omap-2.6/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:39.570121329 +0530 -@@ -58,6 +58,11 @@ static void cpuidle_idle_call(void) - return; - } - -+#ifdef CONFIG_ARCH_OMAP3 -+ local_irq_disable(); -+ local_fiq_disable(); -+#endif -+ - /* ask the governor for the next state */ - next_state = cpuidle_curr_governor->select(dev); - if (need_resched()) -@@ -70,6 +75,11 @@ static void cpuidle_idle_call(void) - target_state->time += (unsigned long long)dev->last_residency; - target_state->usage++; - -+#ifdef CONFIG_ARCH_OMAP3 -+ local_irq_enable(); -+ local_fiq_enable(); -+#endif -+ - /* give the governor an opportunity to reflect on the outcome */ - if (cpuidle_curr_governor->reflect) - cpuidle_curr_governor->reflect(dev); - --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - +From: "Rajendra Nayak" +To: +Subject: [PATCH 01/02] OMAP3 CPUidle driver +Date: Tue, 10 Jun 2008 12:39:00 +0530 + +This patch adds the OMAP3 cpuidle driver. Irq enable/disable is done in the core cpuidle driver +before it queries the governor for the next state. + +Signed-off-by: Rajendra Nayak + +--- + arch/arm/mach-omap2/Makefile | 2 + arch/arm/mach-omap2/cpuidle34xx.c | 293 ++++++++++++++++++++++++++++++++++++++ + arch/arm/mach-omap2/cpuidle34xx.h | 51 ++++++ + arch/arm/mach-omap2/pm34xx.c | 5 + drivers/cpuidle/cpuidle.c | 10 + + 5 files changed, 359 insertions(+), 2 deletions(-) + +Index: linux-omap-2.6/arch/arm/mach-omap2/Makefile +=================================================================== +--- linux-omap-2.6.orig/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:33.855303920 +0530 ++++ linux-omap-2.6/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:39.569121361 +0530 +@@ -20,7 +20,7 @@ obj-y += pm.o + obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o + obj-$(CONFIG_ARCH_OMAP2420) += sleep242x.o + obj-$(CONFIG_ARCH_OMAP2430) += sleep243x.o +-obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o ++obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o + obj-$(CONFIG_PM_DEBUG) += pm-debug.o + endif + +Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c 2008-06-10 11:41:27.644820323 +0530 +@@ -0,0 +1,293 @@ ++/* ++ * linux/arch/arm/mach-omap2/cpuidle34xx.c ++ * ++ * OMAP3 CPU IDLE Routines ++ * ++ * Copyright (C) 2007-2008 Texas Instruments, Inc. ++ * Rajendra Nayak ++ * ++ * Copyright (C) 2007 Texas Instruments, Inc. ++ * Karthik Dasu ++ * ++ * Copyright (C) 2006 Nokia Corporation ++ * Tony Lindgren ++ * ++ * Copyright (C) 2005 Texas Instruments, Inc. ++ * Richard Woodruff ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include "cpuidle34xx.h" ++ ++#ifdef CONFIG_CPU_IDLE ++ ++struct omap3_processor_cx omap3_power_states[OMAP3_MAX_STATES]; ++struct omap3_processor_cx current_cx_state; ++ ++static int omap3_idle_bm_check(void) ++{ ++ /* Check for omap3_fclks_active() here once available */ ++ return 0; ++} ++ ++/* omap3_enter_idle - Programs OMAP3 to enter the specified state. ++ * returns the total time during which the system was idle. ++ */ ++static int omap3_enter_idle(struct cpuidle_device *dev, ++ struct cpuidle_state *state) ++{ ++ struct omap3_processor_cx *cx = cpuidle_get_statedata(state); ++ struct timespec ts_preidle, ts_postidle, ts_idle; ++ struct powerdomain *mpu_pd, *core_pd, *per_pd, *neon_pd; ++ int neon_pwrst; ++ ++ current_cx_state = *cx; ++ ++ if (cx->type == OMAP3_STATE_C0) { ++ /* Do nothing for C0, not even a wfi */ ++ return 0; ++ } ++ ++ /* Used to keep track of the total time in idle */ ++ getnstimeofday(&ts_preidle); ++ ++ mpu_pd = pwrdm_lookup("mpu_pwrdm"); ++ core_pd = pwrdm_lookup("core_pwrdm"); ++ per_pd = pwrdm_lookup("per_pwrdm"); ++ neon_pd = pwrdm_lookup("neon_pwrdm"); ++ ++ /* Reset previous power state registers */ ++ pwrdm_clear_all_prev_pwrst(mpu_pd); ++ pwrdm_clear_all_prev_pwrst(neon_pd); ++ pwrdm_clear_all_prev_pwrst(core_pd); ++ pwrdm_clear_all_prev_pwrst(per_pd); ++ ++ if (omap_irq_pending()) ++ return 0; ++ ++ neon_pwrst = pwrdm_read_pwrst(neon_pd); ++ ++ /* Program MPU/NEON to target state */ ++ if (cx->mpu_state < PWRDM_POWER_ON) { ++ if (neon_pwrst == PWRDM_POWER_ON) { ++ if (cx->mpu_state == PWRDM_POWER_RET) ++ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_RET); ++ else if (cx->mpu_state == PWRDM_POWER_OFF) ++ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_OFF); ++ } ++ pwrdm_set_next_pwrst(mpu_pd, cx->mpu_state); ++ } ++ ++ /* Program CORE to target state */ ++ if (cx->core_state < PWRDM_POWER_ON) ++ pwrdm_set_next_pwrst(core_pd, cx->core_state); ++ ++ /* Execute ARM wfi */ ++ omap_sram_idle(); ++ ++ /* Program MPU/NEON to ON */ ++ if (cx->mpu_state < PWRDM_POWER_ON) { ++ if (neon_pwrst == PWRDM_POWER_ON) ++ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_ON); ++ pwrdm_set_next_pwrst(mpu_pd, PWRDM_POWER_ON); ++ } ++ ++ if (cx->core_state < PWRDM_POWER_ON) ++ pwrdm_set_next_pwrst(core_pd, PWRDM_POWER_ON); ++ ++ getnstimeofday(&ts_postidle); ++ ts_idle = timespec_sub(ts_postidle, ts_preidle); ++ return timespec_to_ns(&ts_idle); ++} ++ ++/* ++ * omap3_enter_idle_bm - enter function for states with CPUIDLE_FLAG_CHECK_BM ++ * ++ * This function checks for all the pre-requisites needed for OMAP3 to enter ++ * CORE RET/OFF state. It then calls omap3_enter_idle to program the desired ++ * C state. ++ */ ++static int omap3_enter_idle_bm(struct cpuidle_device *dev, ++ struct cpuidle_state *state) ++{ ++ struct cpuidle_state *new_state = NULL; ++ int i, j; ++ ++ if ((state->flags & CPUIDLE_FLAG_CHECK_BM) && omap3_idle_bm_check()) { ++ ++ /* Find current state in list */ ++ for (i = 0; i < OMAP3_MAX_STATES; i++) ++ if (state == &dev->states[i]) ++ break; ++ BUG_ON(i == OMAP3_MAX_STATES); ++ ++ /* Back up to non 'CHECK_BM' state */ ++ for (j = i - 1; j > 0; j--) { ++ struct cpuidle_state *s = &dev->states[j]; ++ ++ if (!(s->flags & CPUIDLE_FLAG_CHECK_BM)) { ++ new_state = s; ++ break; ++ } ++ } ++ ++ pr_debug("%s: Bus activity: Entering %s (instead of %s)\n", ++ __FUNCTION__, new_state->name, state->name); ++ } ++ ++ return omap3_enter_idle(dev, new_state ? : state); ++} ++ ++DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); ++ ++/* omap3_init_power_states - Initialises the OMAP3 specific C states. ++ * Below is the desciption of each C state. ++ * ++ C0 . System executing code ++ C1 . MPU WFI + Core active ++ C2 . MPU CSWR + Core active ++ C3 . MPU OFF + Core active ++ C4 . MPU CSWR + Core CSWR ++ C5 . MPU OFF + Core CSWR ++ C6 . MPU OFF + Core OFF ++ */ ++void omap_init_power_states(void) ++{ ++ /* C0 . System executing code */ ++ omap3_power_states[0].valid = 1; ++ omap3_power_states[0].type = OMAP3_STATE_C0; ++ omap3_power_states[0].sleep_latency = 0; ++ omap3_power_states[0].wakeup_latency = 0; ++ omap3_power_states[0].threshold = 0; ++ omap3_power_states[0].mpu_state = PWRDM_POWER_ON; ++ omap3_power_states[0].core_state = PWRDM_POWER_ON; ++ omap3_power_states[0].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_SHALLOW; ++ ++ /* C1 . MPU WFI + Core active */ ++ omap3_power_states[1].valid = 1; ++ omap3_power_states[1].type = OMAP3_STATE_C1; ++ omap3_power_states[1].sleep_latency = 10; ++ omap3_power_states[1].wakeup_latency = 10; ++ omap3_power_states[1].threshold = 30; ++ omap3_power_states[1].mpu_state = PWRDM_POWER_ON; ++ omap3_power_states[1].core_state = PWRDM_POWER_ON; ++ omap3_power_states[1].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_SHALLOW; ++ ++ /* C2 . MPU CSWR + Core active */ ++ omap3_power_states[2].valid = 1; ++ omap3_power_states[2].type = OMAP3_STATE_C2; ++ omap3_power_states[2].sleep_latency = 50; ++ omap3_power_states[2].wakeup_latency = 50; ++ omap3_power_states[2].threshold = 300; ++ omap3_power_states[2].mpu_state = PWRDM_POWER_RET; ++ omap3_power_states[2].core_state = PWRDM_POWER_ON; ++ omap3_power_states[2].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED; ++ ++ /* C3 . MPU OFF + Core active */ ++ omap3_power_states[3].valid = 0; ++ omap3_power_states[3].type = OMAP3_STATE_C3; ++ omap3_power_states[3].sleep_latency = 1500; ++ omap3_power_states[3].wakeup_latency = 1800; ++ omap3_power_states[3].threshold = 4000; ++ omap3_power_states[3].mpu_state = PWRDM_POWER_OFF; ++ omap3_power_states[3].core_state = PWRDM_POWER_RET; ++ omap3_power_states[3].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED; ++ ++ /* C4 . MPU CSWR + Core CSWR*/ ++ omap3_power_states[4].valid = 1; ++ omap3_power_states[4].type = OMAP3_STATE_C4; ++ omap3_power_states[4].sleep_latency = 2500; ++ omap3_power_states[4].wakeup_latency = 7500; ++ omap3_power_states[4].threshold = 12000; ++ omap3_power_states[4].mpu_state = PWRDM_POWER_RET; ++ omap3_power_states[4].core_state = PWRDM_POWER_RET; ++ omap3_power_states[4].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; ++ ++ /* C5 . MPU OFF + Core CSWR */ ++ omap3_power_states[5].valid = 0; ++ omap3_power_states[5].type = OMAP3_STATE_C5; ++ omap3_power_states[5].sleep_latency = 3000; ++ omap3_power_states[5].wakeup_latency = 8500; ++ omap3_power_states[5].threshold = 15000; ++ omap3_power_states[5].mpu_state = PWRDM_POWER_OFF; ++ omap3_power_states[5].core_state = PWRDM_POWER_RET; ++ omap3_power_states[5].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; ++ ++ /* C6 . MPU OFF + Core OFF */ ++ omap3_power_states[6].valid = 0; ++ omap3_power_states[6].type = OMAP3_STATE_C6; ++ omap3_power_states[6].sleep_latency = 10000; ++ omap3_power_states[6].wakeup_latency = 30000; ++ omap3_power_states[6].threshold = 300000; ++ omap3_power_states[6].mpu_state = PWRDM_POWER_OFF; ++ omap3_power_states[6].core_state = PWRDM_POWER_OFF; ++ omap3_power_states[6].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_DEEP | CPUIDLE_FLAG_CHECK_BM; ++} ++ ++struct cpuidle_driver omap3_idle_driver = { ++ .name = "omap3_idle", ++ .owner = THIS_MODULE, ++}; ++/* ++ * omap3_idle_init - Init routine for OMAP3 idle. ++ * Registers the OMAP3 specific cpuidle driver with the cpuidle f/w ++ * with the valid set of states. ++ */ ++int omap3_idle_init(void) ++{ ++ int i, count = 0; ++ struct omap3_processor_cx *cx; ++ struct cpuidle_state *state; ++ struct cpuidle_device *dev; ++ ++ omap_init_power_states(); ++ cpuidle_register_driver(&omap3_idle_driver); ++ ++ dev = &per_cpu(omap3_idle_dev, smp_processor_id()); ++ ++ for (i = 0; i < OMAP3_MAX_STATES; i++) { ++ cx = &omap3_power_states[i]; ++ state = &dev->states[count]; ++ ++ if (!cx->valid) ++ continue; ++ cpuidle_set_statedata(state, cx); ++ state->exit_latency = cx->sleep_latency + cx->wakeup_latency; ++ state->target_residency = cx->threshold; ++ state->flags = cx->flags; ++ state->enter = (state->flags & CPUIDLE_FLAG_CHECK_BM) ? ++ omap3_enter_idle_bm : omap3_enter_idle; ++ sprintf(state->name, "C%d", count+1); ++ count++; ++ } ++ ++ if (!count) ++ return -EINVAL; ++ dev->state_count = count; ++ ++ if (cpuidle_register_device(dev)) { ++ printk(KERN_ERR "%s: CPUidle register device failed\n", ++ __FUNCTION__); ++ return -EIO; ++ } ++ ++ return 0; ++} ++__initcall(omap3_idle_init); ++#endif /* CONFIG_CPU_IDLE */ +Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h 2008-06-09 20:15:39.569121361 +0530 +@@ -0,0 +1,51 @@ ++/* ++ * linux/arch/arm/mach-omap2/cpuidle34xx.h ++ * ++ * OMAP3 cpuidle structure definitions ++ * ++ * Copyright (C) 2007-2008 Texas Instruments, Inc. ++ * Written by Rajendra Nayak ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++ * ++ * History: ++ * ++ */ ++ ++#ifndef ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX ++#define ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX ++ ++#define OMAP3_MAX_STATES 7 ++#define OMAP3_STATE_C0 0 /* C0 - System executing code */ ++#define OMAP3_STATE_C1 1 /* C1 - MPU WFI + Core active */ ++#define OMAP3_STATE_C2 2 /* C2 - MPU CSWR + Core active */ ++#define OMAP3_STATE_C3 3 /* C3 - MPU OFF + Core active */ ++#define OMAP3_STATE_C4 4 /* C4 - MPU RET + Core RET */ ++#define OMAP3_STATE_C5 5 /* C5 - MPU OFF + Core RET */ ++#define OMAP3_STATE_C6 6 /* C6 - MPU OFF + Core OFF */ ++ ++extern void omap_sram_idle(void); ++extern int omap3_irq_pending(void); ++ ++struct omap3_processor_cx { ++ u8 valid; ++ u8 type; ++ u32 sleep_latency; ++ u32 wakeup_latency; ++ u32 mpu_state; ++ u32 core_state; ++ u32 threshold; ++ u32 flags; ++}; ++ ++void omap_init_power_states(void); ++int omap3_idle_init(void); ++ ++#endif /* ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX */ ++ +Index: linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c +=================================================================== +--- linux-omap-2.6.orig/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:15:33.855303920 +0530 ++++ linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:16:20.976798343 +0530 +@@ -141,7 +141,7 @@ static irqreturn_t prcm_interrupt_handle + return IRQ_HANDLED; + } + +-static void omap_sram_idle(void) ++void omap_sram_idle(void) + { + /* Variable to tell what needs to be saved and restored + * in omap_sram_idle*/ +@@ -156,6 +156,7 @@ static void omap_sram_idle(void) + + mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm); + switch (mpu_next_state) { ++ case PWRDM_POWER_ON: + case PWRDM_POWER_RET: + /* No need to save context */ + save_state = 0; +@@ -386,7 +387,9 @@ int __init omap3_pm_init(void) + + prcm_setup_regs(); + ++#ifndef CONFIG_CPU_IDLE + pm_idle = omap3_pm_idle; ++#endif + + err1: + return ret; +Index: linux-omap-2.6/drivers/cpuidle/cpuidle.c +=================================================================== +--- linux-omap-2.6.orig/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:33.856303888 +0530 ++++ linux-omap-2.6/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:39.570121329 +0530 +@@ -58,6 +58,11 @@ static void cpuidle_idle_call(void) + return; + } + ++#ifdef CONFIG_ARCH_OMAP3 ++ local_irq_disable(); ++ local_fiq_disable(); ++#endif ++ + /* ask the governor for the next state */ + next_state = cpuidle_curr_governor->select(dev); + if (need_resched()) +@@ -70,6 +75,11 @@ static void cpuidle_idle_call(void) + target_state->time += (unsigned long long)dev->last_residency; + target_state->usage++; + ++#ifdef CONFIG_ARCH_OMAP3 ++ local_irq_enable(); ++ local_fiq_enable(); ++#endif ++ + /* give the governor an opportunity to reflect on the outcome */ + if (cpuidle_curr_governor->reflect) + cpuidle_curr_governor->reflect(dev); + +-- +To unsubscribe from this list: send the line "unsubscribe linux-omap" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + diff --git a/packages/linux/linux-omap2-git/beagleboard/0002-omap3-cpuidle.patch b/packages/linux/linux-omap2-git/beagleboard/0002-omap3-cpuidle.patch index c17c690fe1..d35fd47567 100644 --- a/packages/linux/linux-omap2-git/beagleboard/0002-omap3-cpuidle.patch +++ b/packages/linux/linux-omap2-git/beagleboard/0002-omap3-cpuidle.patch @@ -1,88 +1,88 @@ -From: "Rajendra Nayak" -To: -Subject: [PATCH 02/02] Kconfig changes -Date: Tue, 10 Jun 2008 12:39:02 +0530 - -Updates the CPUidle Kconfig - -Signed-off-by: Rajendra Nayak - ---- - arch/arm/Kconfig | 10 ++++++++++ - drivers/cpuidle/Kconfig | 28 ++++++++++++++++++++++------ - 2 files changed, 32 insertions(+), 6 deletions(-) - -Index: linux-omap-2.6/arch/arm/Kconfig -=================================================================== ---- linux-omap-2.6.orig/arch/arm/Kconfig 2008-06-10 11:43:10.790502713 +0530 -+++ linux-omap-2.6/arch/arm/Kconfig 2008-06-10 11:43:38.701604549 +0530 -@@ -954,6 +954,16 @@ config ATAGS_PROC - - endmenu - -+if (ARCH_OMAP) -+ -+menu "CPUIdle" -+ -+source "drivers/cpuidle/Kconfig" -+ -+endmenu -+ -+endif -+ - if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA) - - menu "CPU Frequency scaling" -Index: linux-omap-2.6/drivers/cpuidle/Kconfig -=================================================================== ---- linux-omap-2.6.orig/drivers/cpuidle/Kconfig 2008-06-10 11:43:10.790502713 +0530 -+++ linux-omap-2.6/drivers/cpuidle/Kconfig 2008-06-10 12:06:36.139332151 +0530 -@@ -1,20 +1,36 @@ -+menu "CPU idle PM support" - - config CPU_IDLE - bool "CPU idle PM support" -- default ACPI -+ default n - help - CPU idle is a generic framework for supporting software-controlled - idle processor power management. It includes modular cross-platform - governors that can be swapped during runtime. - -- If you're using an ACPI-enabled platform, you should say Y here. -+ If you're using a mobile platform that supports CPU idle PM (e.g. -+ an ACPI-capable notebook), you should say Y here. -+ -+if CPU_IDLE -+ -+comment "Governors" - - config CPU_IDLE_GOV_LADDER -- bool -+ bool "ladder" - depends on CPU_IDLE -- default y -+ default n - - config CPU_IDLE_GOV_MENU -- bool -+ bool "menu" - depends on CPU_IDLE && NO_HZ -- default y -+ default n -+ help -+ This cpuidle governor evaluates all available states and chooses the -+ deepest state that meets all of the following constraints: BM activity, -+ expected time until next timer interrupt, and last break event time -+ delta. It is designed to minimize power consumption. Currently -+ dynticks is required. -+ -+endif # CPU_IDLE -+ -+endmenu - --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - +From: "Rajendra Nayak" +To: +Subject: [PATCH 02/02] Kconfig changes +Date: Tue, 10 Jun 2008 12:39:02 +0530 + +Updates the CPUidle Kconfig + +Signed-off-by: Rajendra Nayak + +--- + arch/arm/Kconfig | 10 ++++++++++ + drivers/cpuidle/Kconfig | 28 ++++++++++++++++++++++------ + 2 files changed, 32 insertions(+), 6 deletions(-) + +Index: linux-omap-2.6/arch/arm/Kconfig +=================================================================== +--- linux-omap-2.6.orig/arch/arm/Kconfig 2008-06-10 11:43:10.790502713 +0530 ++++ linux-omap-2.6/arch/arm/Kconfig 2008-06-10 11:43:38.701604549 +0530 +@@ -954,6 +954,16 @@ config ATAGS_PROC + + endmenu + ++if (ARCH_OMAP) ++ ++menu "CPUIdle" ++ ++source "drivers/cpuidle/Kconfig" ++ ++endmenu ++ ++endif ++ + if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA) + + menu "CPU Frequency scaling" +Index: linux-omap-2.6/drivers/cpuidle/Kconfig +=================================================================== +--- linux-omap-2.6.orig/drivers/cpuidle/Kconfig 2008-06-10 11:43:10.790502713 +0530 ++++ linux-omap-2.6/drivers/cpuidle/Kconfig 2008-06-10 12:06:36.139332151 +0530 +@@ -1,20 +1,36 @@ ++menu "CPU idle PM support" + + config CPU_IDLE + bool "CPU idle PM support" +- default ACPI ++ default n + help + CPU idle is a generic framework for supporting software-controlled + idle processor power management. It includes modular cross-platform + governors that can be swapped during runtime. + +- If you're using an ACPI-enabled platform, you should say Y here. ++ If you're using a mobile platform that supports CPU idle PM (e.g. ++ an ACPI-capable notebook), you should say Y here. ++ ++if CPU_IDLE ++ ++comment "Governors" + + config CPU_IDLE_GOV_LADDER +- bool ++ bool "ladder" + depends on CPU_IDLE +- default y ++ default n + + config CPU_IDLE_GOV_MENU +- bool ++ bool "menu" + depends on CPU_IDLE && NO_HZ +- default y ++ default n ++ help ++ This cpuidle governor evaluates all available states and chooses the ++ deepest state that meets all of the following constraints: BM activity, ++ expected time until next timer interrupt, and last break event time ++ delta. It is designed to minimize power consumption. Currently ++ dynticks is required. ++ ++endif # CPU_IDLE ++ ++endmenu + +-- +To unsubscribe from this list: send the line "unsubscribe linux-omap" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + diff --git a/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch b/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch index aade27fd8a..0b9e3441b6 100644 --- a/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch +++ b/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch @@ -1,147 +1,147 @@ -From linux-omap-owner@vger.kernel.org Sun Jun 22 10:11:39 2008 -Received: from localhost - ([127.0.0.1] helo=dominion ident=koen) - by dominion.dominion.void with esmtp (Exim 4.63) - (envelope-from ) - id 1KAKfj-0008Qc-FC - for koen@localhost; Sun, 22 Jun 2008 10:11:39 +0200 -Received: from xs.service.utwente.nl [130.89.5.250] - by dominion with POP3 (fetchmail-6.3.6) - for (single-drop); Sun, 22 Jun 2008 10:11:39 +0200 (CEST) -Received: from mail.service.utwente.nl ([130.89.5.253]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Sat, 21 Jun 2008 19:06:02 +0200 -Received: from smtp.utwente.nl ([130.89.2.9]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Sat, 21 Jun 2008 19:06:01 +0200 -Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) - by smtp.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m5LH5TSm026212 - for ; Sat, 21 Jun 2008 19:05:30 +0200 -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S1753396AbYFURFN (ORCPT ); - Sat, 21 Jun 2008 13:05:13 -0400 -Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753305AbYFURFN - (ORCPT ); - Sat, 21 Jun 2008 13:05:13 -0400 -Received: from utopia.booyaka.com ([72.9.107.138]:41675 "EHLO - utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1753145AbYFURFL (ORCPT - ); Sat, 21 Jun 2008 13:05:11 -0400 -Received: (qmail 20532 invoked by uid 526); 21 Jun 2008 17:05:10 -0000 -Date: Sat, 21 Jun 2008 11:05:10 -0600 (MDT) -From: Paul Walmsley -To: "Gadiyar, Anand" , - "linux-omap@vger.kernel.org" -cc: Dirk Behme , - "jouni.hogander@nokia.com" -Subject: [PATCH] OMAP3 clock: fix omap2_clk_wait_ready for OMAP3430ES2 DSS -In-Reply-To: <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com> -Message-ID: -References: <5A47E75E594F054BAF48C5E4FC4B92AB022BE46296@dbde02.ent.ti.com>,<485CA347.909@googlemail.com> <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com> -User-Agent: Alpine 1.00 (DEB 882 2007-12-20) -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=US-ASCII -Sender: linux-omap-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: linux-omap@vger.kernel.org -X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information. -X-UTwente-MailScanner: Found to be clean -X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org -X-Spam-Status: No -X-OriginalArrivalTime: 21 Jun 2008 17:06:02.0187 (UTC) FILETIME=[157001B0:01C8D3C1] - - -On OMAP3430ES2, DSS has both an initiator standby CM_IDLEST bit, and a -target idle CM_IDLEST bit. This is a departure from previous silicon, -which only had an initiator standby bit. - -This means we need to test the target idle bit after enabling -dss1_alwon_fclk. Previous clock code has done the wrong thing since ES2 -came out: it's either tested the wrong bit, causing intermittent - - Clock dss1_alwon_fck didn't enable in 100000 tries - -messages; or not tested anything at all, causing intermittent crashes -during DISPC initialization with: - - Unhandled fault: external abort on non-linefetch (0x1028) - -This patch modifies omap2_clk_wait_ready() to wait for the DSS to become -accessible after dss1_alwon_fclk is enabled. - -Thanks to Anand Gadiyar for identifying one of the -problem patches. - -Signed-off-by: Paul Walmsley ---- - - arch/arm/mach-omap2/clock.c | 30 ++++++++++++++++++++++++------ - arch/arm/mach-omap2/cm-regbits-34xx.h | 4 +++- - 2 files changed, 27 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c -index ed15868..1820f75 100644 ---- a/arch/arm/mach-omap2/clock.c -+++ b/arch/arm/mach-omap2/clock.c -@@ -244,18 +244,36 @@ static void omap2_clk_wait_ready(struct clk *clk) - } - - /* REVISIT: What are the appropriate exclusions for 34XX? */ -- /* OMAP3: ignore DSS-mod clocks */ -- if (cpu_is_omap34xx() && -- ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) || -- (((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0)) && -- clk->enable_bit == OMAP3430_EN_SSI_SHIFT))) -- return; -+ if (cpu_is_omap34xx()) { -+ -+ /* 3430ES1 DSS and SSI have no target idlest bits */ -+ if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0) && -+ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) || -+ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0) && -+ clk->enable_bit == OMAP3430_EN_SSI_SHIFT))) -+ return; -+ -+ /* Even for 3430ES2 DSS, only wait for dss1_alwon_fclk */ -+ if (is_sil_rev_greater_than(OMAP3430_REV_ES1_0) && -+ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) && -+ clk->enable_bit != OMAP3430_EN_DSS1_SHIFT) -+ return; -+ -+ } - - /* Check if both functional and interface clocks - * are running. */ - bit = 1 << clk->enable_bit; - if (!(__raw_readl((__force void __iomem *)other_reg) & bit)) - return; -+ -+ /* OMAP3430ES2 DSS is an unusual case */ -+ if (cpu_is_omap34xx() && -+ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) && -+ clk->enable_bit == OMAP3430_EN_DSS1_SHIFT) { -+ bit = OMAP3430ES2_ST_DSS_IDLE; -+ } -+ - st_reg = ((other_reg & ~0xf0) | 0x20); /* CM_IDLEST* */ - - omap2_wait_clock_ready((__force void __iomem *)st_reg, bit, clk->name); -diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h -index 6ec66f4..946c552 100644 ---- a/arch/arm/mach-omap2/cm-regbits-34xx.h -+++ b/arch/arm/mach-omap2/cm-regbits-34xx.h -@@ -500,7 +500,9 @@ - #define OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT 0 - - /* CM_IDLEST_DSS */ --#define OMAP3430_ST_DSS (1 << 0) -+#define OMAP3430ES2_ST_DSS_IDLE (1 << 1) -+#define OMAP3430ES2_ST_DSS_STDBY (1 << 0) -+#define OMAP3430ES1_ST_DSS (1 << 0) - - /* CM_AUTOIDLE_DSS */ - #define OMAP3430_AUTO_DSS (1 << 0) --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - +From linux-omap-owner@vger.kernel.org Sun Jun 22 10:11:39 2008 +Received: from localhost + ([127.0.0.1] helo=dominion ident=koen) + by dominion.dominion.void with esmtp (Exim 4.63) + (envelope-from ) + id 1KAKfj-0008Qc-FC + for koen@localhost; Sun, 22 Jun 2008 10:11:39 +0200 +Received: from xs.service.utwente.nl [130.89.5.250] + by dominion with POP3 (fetchmail-6.3.6) + for (single-drop); Sun, 22 Jun 2008 10:11:39 +0200 (CEST) +Received: from mail.service.utwente.nl ([130.89.5.253]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); + Sat, 21 Jun 2008 19:06:02 +0200 +Received: from smtp.utwente.nl ([130.89.2.9]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); + Sat, 21 Jun 2008 19:06:01 +0200 +Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) + by smtp.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m5LH5TSm026212 + for ; Sat, 21 Jun 2008 19:05:30 +0200 +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S1753396AbYFURFN (ORCPT ); + Sat, 21 Jun 2008 13:05:13 -0400 +Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753305AbYFURFN + (ORCPT ); + Sat, 21 Jun 2008 13:05:13 -0400 +Received: from utopia.booyaka.com ([72.9.107.138]:41675 "EHLO + utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S1753145AbYFURFL (ORCPT + ); Sat, 21 Jun 2008 13:05:11 -0400 +Received: (qmail 20532 invoked by uid 526); 21 Jun 2008 17:05:10 -0000 +Date: Sat, 21 Jun 2008 11:05:10 -0600 (MDT) +From: Paul Walmsley +To: "Gadiyar, Anand" , + "linux-omap@vger.kernel.org" +cc: Dirk Behme , + "jouni.hogander@nokia.com" +Subject: [PATCH] OMAP3 clock: fix omap2_clk_wait_ready for OMAP3430ES2 DSS +In-Reply-To: <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com> +Message-ID: +References: <5A47E75E594F054BAF48C5E4FC4B92AB022BE46296@dbde02.ent.ti.com>,<485CA347.909@googlemail.com> <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com> +User-Agent: Alpine 1.00 (DEB 882 2007-12-20) +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: linux-omap-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-omap@vger.kernel.org +X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information. +X-UTwente-MailScanner: Found to be clean +X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org +X-Spam-Status: No +X-OriginalArrivalTime: 21 Jun 2008 17:06:02.0187 (UTC) FILETIME=[157001B0:01C8D3C1] + + +On OMAP3430ES2, DSS has both an initiator standby CM_IDLEST bit, and a +target idle CM_IDLEST bit. This is a departure from previous silicon, +which only had an initiator standby bit. + +This means we need to test the target idle bit after enabling +dss1_alwon_fclk. Previous clock code has done the wrong thing since ES2 +came out: it's either tested the wrong bit, causing intermittent + + Clock dss1_alwon_fck didn't enable in 100000 tries + +messages; or not tested anything at all, causing intermittent crashes +during DISPC initialization with: + + Unhandled fault: external abort on non-linefetch (0x1028) + +This patch modifies omap2_clk_wait_ready() to wait for the DSS to become +accessible after dss1_alwon_fclk is enabled. + +Thanks to Anand Gadiyar for identifying one of the +problem patches. + +Signed-off-by: Paul Walmsley +--- + + arch/arm/mach-omap2/clock.c | 30 ++++++++++++++++++++++++------ + arch/arm/mach-omap2/cm-regbits-34xx.h | 4 +++- + 2 files changed, 27 insertions(+), 7 deletions(-) + +diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c +index ed15868..1820f75 100644 +--- a/arch/arm/mach-omap2/clock.c ++++ b/arch/arm/mach-omap2/clock.c +@@ -244,18 +244,36 @@ static void omap2_clk_wait_ready(struct clk *clk) + } + + /* REVISIT: What are the appropriate exclusions for 34XX? */ +- /* OMAP3: ignore DSS-mod clocks */ +- if (cpu_is_omap34xx() && +- ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) || +- (((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0)) && +- clk->enable_bit == OMAP3430_EN_SSI_SHIFT))) +- return; ++ if (cpu_is_omap34xx()) { ++ ++ /* 3430ES1 DSS and SSI have no target idlest bits */ ++ if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0) && ++ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) || ++ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0) && ++ clk->enable_bit == OMAP3430_EN_SSI_SHIFT))) ++ return; ++ ++ /* Even for 3430ES2 DSS, only wait for dss1_alwon_fclk */ ++ if (is_sil_rev_greater_than(OMAP3430_REV_ES1_0) && ++ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) && ++ clk->enable_bit != OMAP3430_EN_DSS1_SHIFT) ++ return; ++ ++ } + + /* Check if both functional and interface clocks + * are running. */ + bit = 1 << clk->enable_bit; + if (!(__raw_readl((__force void __iomem *)other_reg) & bit)) + return; ++ ++ /* OMAP3430ES2 DSS is an unusual case */ ++ if (cpu_is_omap34xx() && ++ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) && ++ clk->enable_bit == OMAP3430_EN_DSS1_SHIFT) { ++ bit = OMAP3430ES2_ST_DSS_IDLE; ++ } ++ + st_reg = ((other_reg & ~0xf0) | 0x20); /* CM_IDLEST* */ + + omap2_wait_clock_ready((__force void __iomem *)st_reg, bit, clk->name); +diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h +index 6ec66f4..946c552 100644 +--- a/arch/arm/mach-omap2/cm-regbits-34xx.h ++++ b/arch/arm/mach-omap2/cm-regbits-34xx.h +@@ -500,7 +500,9 @@ + #define OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT 0 + + /* CM_IDLEST_DSS */ +-#define OMAP3430_ST_DSS (1 << 0) ++#define OMAP3430ES2_ST_DSS_IDLE (1 << 1) ++#define OMAP3430ES2_ST_DSS_STDBY (1 << 0) ++#define OMAP3430ES1_ST_DSS (1 << 0) + + /* CM_AUTOIDLE_DSS */ + #define OMAP3430_AUTO_DSS (1 << 0) +-- +To unsubscribe from this list: send the line "unsubscribe linux-omap" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + diff --git a/packages/linux/linux-omap2-git/omap3evm/0001-omap3-cpuidle.patch b/packages/linux/linux-omap2-git/omap3evm/0001-omap3-cpuidle.patch index 28b1ef2214..cdc9447b4c 100644 --- a/packages/linux/linux-omap2-git/omap3evm/0001-omap3-cpuidle.patch +++ b/packages/linux/linux-omap2-git/omap3evm/0001-omap3-cpuidle.patch @@ -1,450 +1,450 @@ -From: "Rajendra Nayak" -To: -Subject: [PATCH 01/02] OMAP3 CPUidle driver -Date: Tue, 10 Jun 2008 12:39:00 +0530 - -This patch adds the OMAP3 cpuidle driver. Irq enable/disable is done in the core cpuidle driver -before it queries the governor for the next state. - -Signed-off-by: Rajendra Nayak - ---- - arch/arm/mach-omap2/Makefile | 2 - arch/arm/mach-omap2/cpuidle34xx.c | 293 ++++++++++++++++++++++++++++++++++++++ - arch/arm/mach-omap2/cpuidle34xx.h | 51 ++++++ - arch/arm/mach-omap2/pm34xx.c | 5 - drivers/cpuidle/cpuidle.c | 10 + - 5 files changed, 359 insertions(+), 2 deletions(-) - -Index: linux-omap-2.6/arch/arm/mach-omap2/Makefile -=================================================================== ---- linux-omap-2.6.orig/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:33.855303920 +0530 -+++ linux-omap-2.6/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:39.569121361 +0530 -@@ -20,7 +20,7 @@ obj-y += pm.o - obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o - obj-$(CONFIG_ARCH_OMAP2420) += sleep242x.o - obj-$(CONFIG_ARCH_OMAP2430) += sleep243x.o --obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o -+obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o - obj-$(CONFIG_PM_DEBUG) += pm-debug.o - endif - -Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c 2008-06-10 11:41:27.644820323 +0530 -@@ -0,0 +1,293 @@ -+/* -+ * linux/arch/arm/mach-omap2/cpuidle34xx.c -+ * -+ * OMAP3 CPU IDLE Routines -+ * -+ * Copyright (C) 2007-2008 Texas Instruments, Inc. -+ * Rajendra Nayak -+ * -+ * Copyright (C) 2007 Texas Instruments, Inc. -+ * Karthik Dasu -+ * -+ * Copyright (C) 2006 Nokia Corporation -+ * Tony Lindgren -+ * -+ * Copyright (C) 2005 Texas Instruments, Inc. -+ * Richard Woodruff -+ * -+ * 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 -+#include -+#include -+#include -+#include -+#include -+#include "cpuidle34xx.h" -+ -+#ifdef CONFIG_CPU_IDLE -+ -+struct omap3_processor_cx omap3_power_states[OMAP3_MAX_STATES]; -+struct omap3_processor_cx current_cx_state; -+ -+static int omap3_idle_bm_check(void) -+{ -+ /* Check for omap3_fclks_active() here once available */ -+ return 0; -+} -+ -+/* omap3_enter_idle - Programs OMAP3 to enter the specified state. -+ * returns the total time during which the system was idle. -+ */ -+static int omap3_enter_idle(struct cpuidle_device *dev, -+ struct cpuidle_state *state) -+{ -+ struct omap3_processor_cx *cx = cpuidle_get_statedata(state); -+ struct timespec ts_preidle, ts_postidle, ts_idle; -+ struct powerdomain *mpu_pd, *core_pd, *per_pd, *neon_pd; -+ int neon_pwrst; -+ -+ current_cx_state = *cx; -+ -+ if (cx->type == OMAP3_STATE_C0) { -+ /* Do nothing for C0, not even a wfi */ -+ return 0; -+ } -+ -+ /* Used to keep track of the total time in idle */ -+ getnstimeofday(&ts_preidle); -+ -+ mpu_pd = pwrdm_lookup("mpu_pwrdm"); -+ core_pd = pwrdm_lookup("core_pwrdm"); -+ per_pd = pwrdm_lookup("per_pwrdm"); -+ neon_pd = pwrdm_lookup("neon_pwrdm"); -+ -+ /* Reset previous power state registers */ -+ pwrdm_clear_all_prev_pwrst(mpu_pd); -+ pwrdm_clear_all_prev_pwrst(neon_pd); -+ pwrdm_clear_all_prev_pwrst(core_pd); -+ pwrdm_clear_all_prev_pwrst(per_pd); -+ -+ if (omap_irq_pending()) -+ return 0; -+ -+ neon_pwrst = pwrdm_read_pwrst(neon_pd); -+ -+ /* Program MPU/NEON to target state */ -+ if (cx->mpu_state < PWRDM_POWER_ON) { -+ if (neon_pwrst == PWRDM_POWER_ON) { -+ if (cx->mpu_state == PWRDM_POWER_RET) -+ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_RET); -+ else if (cx->mpu_state == PWRDM_POWER_OFF) -+ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_OFF); -+ } -+ pwrdm_set_next_pwrst(mpu_pd, cx->mpu_state); -+ } -+ -+ /* Program CORE to target state */ -+ if (cx->core_state < PWRDM_POWER_ON) -+ pwrdm_set_next_pwrst(core_pd, cx->core_state); -+ -+ /* Execute ARM wfi */ -+ omap_sram_idle(); -+ -+ /* Program MPU/NEON to ON */ -+ if (cx->mpu_state < PWRDM_POWER_ON) { -+ if (neon_pwrst == PWRDM_POWER_ON) -+ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_ON); -+ pwrdm_set_next_pwrst(mpu_pd, PWRDM_POWER_ON); -+ } -+ -+ if (cx->core_state < PWRDM_POWER_ON) -+ pwrdm_set_next_pwrst(core_pd, PWRDM_POWER_ON); -+ -+ getnstimeofday(&ts_postidle); -+ ts_idle = timespec_sub(ts_postidle, ts_preidle); -+ return timespec_to_ns(&ts_idle); -+} -+ -+/* -+ * omap3_enter_idle_bm - enter function for states with CPUIDLE_FLAG_CHECK_BM -+ * -+ * This function checks for all the pre-requisites needed for OMAP3 to enter -+ * CORE RET/OFF state. It then calls omap3_enter_idle to program the desired -+ * C state. -+ */ -+static int omap3_enter_idle_bm(struct cpuidle_device *dev, -+ struct cpuidle_state *state) -+{ -+ struct cpuidle_state *new_state = NULL; -+ int i, j; -+ -+ if ((state->flags & CPUIDLE_FLAG_CHECK_BM) && omap3_idle_bm_check()) { -+ -+ /* Find current state in list */ -+ for (i = 0; i < OMAP3_MAX_STATES; i++) -+ if (state == &dev->states[i]) -+ break; -+ BUG_ON(i == OMAP3_MAX_STATES); -+ -+ /* Back up to non 'CHECK_BM' state */ -+ for (j = i - 1; j > 0; j--) { -+ struct cpuidle_state *s = &dev->states[j]; -+ -+ if (!(s->flags & CPUIDLE_FLAG_CHECK_BM)) { -+ new_state = s; -+ break; -+ } -+ } -+ -+ pr_debug("%s: Bus activity: Entering %s (instead of %s)\n", -+ __FUNCTION__, new_state->name, state->name); -+ } -+ -+ return omap3_enter_idle(dev, new_state ? : state); -+} -+ -+DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); -+ -+/* omap3_init_power_states - Initialises the OMAP3 specific C states. -+ * Below is the desciption of each C state. -+ * -+ C0 . System executing code -+ C1 . MPU WFI + Core active -+ C2 . MPU CSWR + Core active -+ C3 . MPU OFF + Core active -+ C4 . MPU CSWR + Core CSWR -+ C5 . MPU OFF + Core CSWR -+ C6 . MPU OFF + Core OFF -+ */ -+void omap_init_power_states(void) -+{ -+ /* C0 . System executing code */ -+ omap3_power_states[0].valid = 1; -+ omap3_power_states[0].type = OMAP3_STATE_C0; -+ omap3_power_states[0].sleep_latency = 0; -+ omap3_power_states[0].wakeup_latency = 0; -+ omap3_power_states[0].threshold = 0; -+ omap3_power_states[0].mpu_state = PWRDM_POWER_ON; -+ omap3_power_states[0].core_state = PWRDM_POWER_ON; -+ omap3_power_states[0].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_SHALLOW; -+ -+ /* C1 . MPU WFI + Core active */ -+ omap3_power_states[1].valid = 1; -+ omap3_power_states[1].type = OMAP3_STATE_C1; -+ omap3_power_states[1].sleep_latency = 10; -+ omap3_power_states[1].wakeup_latency = 10; -+ omap3_power_states[1].threshold = 30; -+ omap3_power_states[1].mpu_state = PWRDM_POWER_ON; -+ omap3_power_states[1].core_state = PWRDM_POWER_ON; -+ omap3_power_states[1].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_SHALLOW; -+ -+ /* C2 . MPU CSWR + Core active */ -+ omap3_power_states[2].valid = 1; -+ omap3_power_states[2].type = OMAP3_STATE_C2; -+ omap3_power_states[2].sleep_latency = 50; -+ omap3_power_states[2].wakeup_latency = 50; -+ omap3_power_states[2].threshold = 300; -+ omap3_power_states[2].mpu_state = PWRDM_POWER_RET; -+ omap3_power_states[2].core_state = PWRDM_POWER_ON; -+ omap3_power_states[2].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED; -+ -+ /* C3 . MPU OFF + Core active */ -+ omap3_power_states[3].valid = 0; -+ omap3_power_states[3].type = OMAP3_STATE_C3; -+ omap3_power_states[3].sleep_latency = 1500; -+ omap3_power_states[3].wakeup_latency = 1800; -+ omap3_power_states[3].threshold = 4000; -+ omap3_power_states[3].mpu_state = PWRDM_POWER_OFF; -+ omap3_power_states[3].core_state = PWRDM_POWER_RET; -+ omap3_power_states[3].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED; -+ -+ /* C4 . MPU CSWR + Core CSWR*/ -+ omap3_power_states[4].valid = 1; -+ omap3_power_states[4].type = OMAP3_STATE_C4; -+ omap3_power_states[4].sleep_latency = 2500; -+ omap3_power_states[4].wakeup_latency = 7500; -+ omap3_power_states[4].threshold = 12000; -+ omap3_power_states[4].mpu_state = PWRDM_POWER_RET; -+ omap3_power_states[4].core_state = PWRDM_POWER_RET; -+ omap3_power_states[4].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; -+ -+ /* C5 . MPU OFF + Core CSWR */ -+ omap3_power_states[5].valid = 0; -+ omap3_power_states[5].type = OMAP3_STATE_C5; -+ omap3_power_states[5].sleep_latency = 3000; -+ omap3_power_states[5].wakeup_latency = 8500; -+ omap3_power_states[5].threshold = 15000; -+ omap3_power_states[5].mpu_state = PWRDM_POWER_OFF; -+ omap3_power_states[5].core_state = PWRDM_POWER_RET; -+ omap3_power_states[5].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; -+ -+ /* C6 . MPU OFF + Core OFF */ -+ omap3_power_states[6].valid = 0; -+ omap3_power_states[6].type = OMAP3_STATE_C6; -+ omap3_power_states[6].sleep_latency = 10000; -+ omap3_power_states[6].wakeup_latency = 30000; -+ omap3_power_states[6].threshold = 300000; -+ omap3_power_states[6].mpu_state = PWRDM_POWER_OFF; -+ omap3_power_states[6].core_state = PWRDM_POWER_OFF; -+ omap3_power_states[6].flags = CPUIDLE_FLAG_TIME_VALID | -+ CPUIDLE_FLAG_DEEP | CPUIDLE_FLAG_CHECK_BM; -+} -+ -+struct cpuidle_driver omap3_idle_driver = { -+ .name = "omap3_idle", -+ .owner = THIS_MODULE, -+}; -+/* -+ * omap3_idle_init - Init routine for OMAP3 idle. -+ * Registers the OMAP3 specific cpuidle driver with the cpuidle f/w -+ * with the valid set of states. -+ */ -+int omap3_idle_init(void) -+{ -+ int i, count = 0; -+ struct omap3_processor_cx *cx; -+ struct cpuidle_state *state; -+ struct cpuidle_device *dev; -+ -+ omap_init_power_states(); -+ cpuidle_register_driver(&omap3_idle_driver); -+ -+ dev = &per_cpu(omap3_idle_dev, smp_processor_id()); -+ -+ for (i = 0; i < OMAP3_MAX_STATES; i++) { -+ cx = &omap3_power_states[i]; -+ state = &dev->states[count]; -+ -+ if (!cx->valid) -+ continue; -+ cpuidle_set_statedata(state, cx); -+ state->exit_latency = cx->sleep_latency + cx->wakeup_latency; -+ state->target_residency = cx->threshold; -+ state->flags = cx->flags; -+ state->enter = (state->flags & CPUIDLE_FLAG_CHECK_BM) ? -+ omap3_enter_idle_bm : omap3_enter_idle; -+ sprintf(state->name, "C%d", count+1); -+ count++; -+ } -+ -+ if (!count) -+ return -EINVAL; -+ dev->state_count = count; -+ -+ if (cpuidle_register_device(dev)) { -+ printk(KERN_ERR "%s: CPUidle register device failed\n", -+ __FUNCTION__); -+ return -EIO; -+ } -+ -+ return 0; -+} -+__initcall(omap3_idle_init); -+#endif /* CONFIG_CPU_IDLE */ -Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h 2008-06-09 20:15:39.569121361 +0530 -@@ -0,0 +1,51 @@ -+/* -+ * linux/arch/arm/mach-omap2/cpuidle34xx.h -+ * -+ * OMAP3 cpuidle structure definitions -+ * -+ * Copyright (C) 2007-2008 Texas Instruments, Inc. -+ * Written by Rajendra Nayak -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+ * -+ * History: -+ * -+ */ -+ -+#ifndef ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX -+#define ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX -+ -+#define OMAP3_MAX_STATES 7 -+#define OMAP3_STATE_C0 0 /* C0 - System executing code */ -+#define OMAP3_STATE_C1 1 /* C1 - MPU WFI + Core active */ -+#define OMAP3_STATE_C2 2 /* C2 - MPU CSWR + Core active */ -+#define OMAP3_STATE_C3 3 /* C3 - MPU OFF + Core active */ -+#define OMAP3_STATE_C4 4 /* C4 - MPU RET + Core RET */ -+#define OMAP3_STATE_C5 5 /* C5 - MPU OFF + Core RET */ -+#define OMAP3_STATE_C6 6 /* C6 - MPU OFF + Core OFF */ -+ -+extern void omap_sram_idle(void); -+extern int omap3_irq_pending(void); -+ -+struct omap3_processor_cx { -+ u8 valid; -+ u8 type; -+ u32 sleep_latency; -+ u32 wakeup_latency; -+ u32 mpu_state; -+ u32 core_state; -+ u32 threshold; -+ u32 flags; -+}; -+ -+void omap_init_power_states(void); -+int omap3_idle_init(void); -+ -+#endif /* ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX */ -+ -Index: linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c -=================================================================== ---- linux-omap-2.6.orig/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:15:33.855303920 +0530 -+++ linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:16:20.976798343 +0530 -@@ -141,7 +141,7 @@ static irqreturn_t prcm_interrupt_handle - return IRQ_HANDLED; - } - --static void omap_sram_idle(void) -+void omap_sram_idle(void) - { - /* Variable to tell what needs to be saved and restored - * in omap_sram_idle*/ -@@ -156,6 +156,7 @@ static void omap_sram_idle(void) - - mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm); - switch (mpu_next_state) { -+ case PWRDM_POWER_ON: - case PWRDM_POWER_RET: - /* No need to save context */ - save_state = 0; -@@ -386,7 +387,9 @@ int __init omap3_pm_init(void) - - prcm_setup_regs(); - -+#ifndef CONFIG_CPU_IDLE - pm_idle = omap3_pm_idle; -+#endif - - err1: - return ret; -Index: linux-omap-2.6/drivers/cpuidle/cpuidle.c -=================================================================== ---- linux-omap-2.6.orig/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:33.856303888 +0530 -+++ linux-omap-2.6/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:39.570121329 +0530 -@@ -58,6 +58,11 @@ static void cpuidle_idle_call(void) - return; - } - -+#ifdef CONFIG_ARCH_OMAP3 -+ local_irq_disable(); -+ local_fiq_disable(); -+#endif -+ - /* ask the governor for the next state */ - next_state = cpuidle_curr_governor->select(dev); - if (need_resched()) -@@ -70,6 +75,11 @@ static void cpuidle_idle_call(void) - target_state->time += (unsigned long long)dev->last_residency; - target_state->usage++; - -+#ifdef CONFIG_ARCH_OMAP3 -+ local_irq_enable(); -+ local_fiq_enable(); -+#endif -+ - /* give the governor an opportunity to reflect on the outcome */ - if (cpuidle_curr_governor->reflect) - cpuidle_curr_governor->reflect(dev); - --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - +From: "Rajendra Nayak" +To: +Subject: [PATCH 01/02] OMAP3 CPUidle driver +Date: Tue, 10 Jun 2008 12:39:00 +0530 + +This patch adds the OMAP3 cpuidle driver. Irq enable/disable is done in the core cpuidle driver +before it queries the governor for the next state. + +Signed-off-by: Rajendra Nayak + +--- + arch/arm/mach-omap2/Makefile | 2 + arch/arm/mach-omap2/cpuidle34xx.c | 293 ++++++++++++++++++++++++++++++++++++++ + arch/arm/mach-omap2/cpuidle34xx.h | 51 ++++++ + arch/arm/mach-omap2/pm34xx.c | 5 + drivers/cpuidle/cpuidle.c | 10 + + 5 files changed, 359 insertions(+), 2 deletions(-) + +Index: linux-omap-2.6/arch/arm/mach-omap2/Makefile +=================================================================== +--- linux-omap-2.6.orig/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:33.855303920 +0530 ++++ linux-omap-2.6/arch/arm/mach-omap2/Makefile 2008-06-09 20:15:39.569121361 +0530 +@@ -20,7 +20,7 @@ obj-y += pm.o + obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o + obj-$(CONFIG_ARCH_OMAP2420) += sleep242x.o + obj-$(CONFIG_ARCH_OMAP2430) += sleep243x.o +-obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o ++obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o + obj-$(CONFIG_PM_DEBUG) += pm-debug.o + endif + +Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.c 2008-06-10 11:41:27.644820323 +0530 +@@ -0,0 +1,293 @@ ++/* ++ * linux/arch/arm/mach-omap2/cpuidle34xx.c ++ * ++ * OMAP3 CPU IDLE Routines ++ * ++ * Copyright (C) 2007-2008 Texas Instruments, Inc. ++ * Rajendra Nayak ++ * ++ * Copyright (C) 2007 Texas Instruments, Inc. ++ * Karthik Dasu ++ * ++ * Copyright (C) 2006 Nokia Corporation ++ * Tony Lindgren ++ * ++ * Copyright (C) 2005 Texas Instruments, Inc. ++ * Richard Woodruff ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include "cpuidle34xx.h" ++ ++#ifdef CONFIG_CPU_IDLE ++ ++struct omap3_processor_cx omap3_power_states[OMAP3_MAX_STATES]; ++struct omap3_processor_cx current_cx_state; ++ ++static int omap3_idle_bm_check(void) ++{ ++ /* Check for omap3_fclks_active() here once available */ ++ return 0; ++} ++ ++/* omap3_enter_idle - Programs OMAP3 to enter the specified state. ++ * returns the total time during which the system was idle. ++ */ ++static int omap3_enter_idle(struct cpuidle_device *dev, ++ struct cpuidle_state *state) ++{ ++ struct omap3_processor_cx *cx = cpuidle_get_statedata(state); ++ struct timespec ts_preidle, ts_postidle, ts_idle; ++ struct powerdomain *mpu_pd, *core_pd, *per_pd, *neon_pd; ++ int neon_pwrst; ++ ++ current_cx_state = *cx; ++ ++ if (cx->type == OMAP3_STATE_C0) { ++ /* Do nothing for C0, not even a wfi */ ++ return 0; ++ } ++ ++ /* Used to keep track of the total time in idle */ ++ getnstimeofday(&ts_preidle); ++ ++ mpu_pd = pwrdm_lookup("mpu_pwrdm"); ++ core_pd = pwrdm_lookup("core_pwrdm"); ++ per_pd = pwrdm_lookup("per_pwrdm"); ++ neon_pd = pwrdm_lookup("neon_pwrdm"); ++ ++ /* Reset previous power state registers */ ++ pwrdm_clear_all_prev_pwrst(mpu_pd); ++ pwrdm_clear_all_prev_pwrst(neon_pd); ++ pwrdm_clear_all_prev_pwrst(core_pd); ++ pwrdm_clear_all_prev_pwrst(per_pd); ++ ++ if (omap_irq_pending()) ++ return 0; ++ ++ neon_pwrst = pwrdm_read_pwrst(neon_pd); ++ ++ /* Program MPU/NEON to target state */ ++ if (cx->mpu_state < PWRDM_POWER_ON) { ++ if (neon_pwrst == PWRDM_POWER_ON) { ++ if (cx->mpu_state == PWRDM_POWER_RET) ++ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_RET); ++ else if (cx->mpu_state == PWRDM_POWER_OFF) ++ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_OFF); ++ } ++ pwrdm_set_next_pwrst(mpu_pd, cx->mpu_state); ++ } ++ ++ /* Program CORE to target state */ ++ if (cx->core_state < PWRDM_POWER_ON) ++ pwrdm_set_next_pwrst(core_pd, cx->core_state); ++ ++ /* Execute ARM wfi */ ++ omap_sram_idle(); ++ ++ /* Program MPU/NEON to ON */ ++ if (cx->mpu_state < PWRDM_POWER_ON) { ++ if (neon_pwrst == PWRDM_POWER_ON) ++ pwrdm_set_next_pwrst(neon_pd, PWRDM_POWER_ON); ++ pwrdm_set_next_pwrst(mpu_pd, PWRDM_POWER_ON); ++ } ++ ++ if (cx->core_state < PWRDM_POWER_ON) ++ pwrdm_set_next_pwrst(core_pd, PWRDM_POWER_ON); ++ ++ getnstimeofday(&ts_postidle); ++ ts_idle = timespec_sub(ts_postidle, ts_preidle); ++ return timespec_to_ns(&ts_idle); ++} ++ ++/* ++ * omap3_enter_idle_bm - enter function for states with CPUIDLE_FLAG_CHECK_BM ++ * ++ * This function checks for all the pre-requisites needed for OMAP3 to enter ++ * CORE RET/OFF state. It then calls omap3_enter_idle to program the desired ++ * C state. ++ */ ++static int omap3_enter_idle_bm(struct cpuidle_device *dev, ++ struct cpuidle_state *state) ++{ ++ struct cpuidle_state *new_state = NULL; ++ int i, j; ++ ++ if ((state->flags & CPUIDLE_FLAG_CHECK_BM) && omap3_idle_bm_check()) { ++ ++ /* Find current state in list */ ++ for (i = 0; i < OMAP3_MAX_STATES; i++) ++ if (state == &dev->states[i]) ++ break; ++ BUG_ON(i == OMAP3_MAX_STATES); ++ ++ /* Back up to non 'CHECK_BM' state */ ++ for (j = i - 1; j > 0; j--) { ++ struct cpuidle_state *s = &dev->states[j]; ++ ++ if (!(s->flags & CPUIDLE_FLAG_CHECK_BM)) { ++ new_state = s; ++ break; ++ } ++ } ++ ++ pr_debug("%s: Bus activity: Entering %s (instead of %s)\n", ++ __FUNCTION__, new_state->name, state->name); ++ } ++ ++ return omap3_enter_idle(dev, new_state ? : state); ++} ++ ++DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); ++ ++/* omap3_init_power_states - Initialises the OMAP3 specific C states. ++ * Below is the desciption of each C state. ++ * ++ C0 . System executing code ++ C1 . MPU WFI + Core active ++ C2 . MPU CSWR + Core active ++ C3 . MPU OFF + Core active ++ C4 . MPU CSWR + Core CSWR ++ C5 . MPU OFF + Core CSWR ++ C6 . MPU OFF + Core OFF ++ */ ++void omap_init_power_states(void) ++{ ++ /* C0 . System executing code */ ++ omap3_power_states[0].valid = 1; ++ omap3_power_states[0].type = OMAP3_STATE_C0; ++ omap3_power_states[0].sleep_latency = 0; ++ omap3_power_states[0].wakeup_latency = 0; ++ omap3_power_states[0].threshold = 0; ++ omap3_power_states[0].mpu_state = PWRDM_POWER_ON; ++ omap3_power_states[0].core_state = PWRDM_POWER_ON; ++ omap3_power_states[0].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_SHALLOW; ++ ++ /* C1 . MPU WFI + Core active */ ++ omap3_power_states[1].valid = 1; ++ omap3_power_states[1].type = OMAP3_STATE_C1; ++ omap3_power_states[1].sleep_latency = 10; ++ omap3_power_states[1].wakeup_latency = 10; ++ omap3_power_states[1].threshold = 30; ++ omap3_power_states[1].mpu_state = PWRDM_POWER_ON; ++ omap3_power_states[1].core_state = PWRDM_POWER_ON; ++ omap3_power_states[1].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_SHALLOW; ++ ++ /* C2 . MPU CSWR + Core active */ ++ omap3_power_states[2].valid = 1; ++ omap3_power_states[2].type = OMAP3_STATE_C2; ++ omap3_power_states[2].sleep_latency = 50; ++ omap3_power_states[2].wakeup_latency = 50; ++ omap3_power_states[2].threshold = 300; ++ omap3_power_states[2].mpu_state = PWRDM_POWER_RET; ++ omap3_power_states[2].core_state = PWRDM_POWER_ON; ++ omap3_power_states[2].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED; ++ ++ /* C3 . MPU OFF + Core active */ ++ omap3_power_states[3].valid = 0; ++ omap3_power_states[3].type = OMAP3_STATE_C3; ++ omap3_power_states[3].sleep_latency = 1500; ++ omap3_power_states[3].wakeup_latency = 1800; ++ omap3_power_states[3].threshold = 4000; ++ omap3_power_states[3].mpu_state = PWRDM_POWER_OFF; ++ omap3_power_states[3].core_state = PWRDM_POWER_RET; ++ omap3_power_states[3].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED; ++ ++ /* C4 . MPU CSWR + Core CSWR*/ ++ omap3_power_states[4].valid = 1; ++ omap3_power_states[4].type = OMAP3_STATE_C4; ++ omap3_power_states[4].sleep_latency = 2500; ++ omap3_power_states[4].wakeup_latency = 7500; ++ omap3_power_states[4].threshold = 12000; ++ omap3_power_states[4].mpu_state = PWRDM_POWER_RET; ++ omap3_power_states[4].core_state = PWRDM_POWER_RET; ++ omap3_power_states[4].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; ++ ++ /* C5 . MPU OFF + Core CSWR */ ++ omap3_power_states[5].valid = 0; ++ omap3_power_states[5].type = OMAP3_STATE_C5; ++ omap3_power_states[5].sleep_latency = 3000; ++ omap3_power_states[5].wakeup_latency = 8500; ++ omap3_power_states[5].threshold = 15000; ++ omap3_power_states[5].mpu_state = PWRDM_POWER_OFF; ++ omap3_power_states[5].core_state = PWRDM_POWER_RET; ++ omap3_power_states[5].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_BALANCED | CPUIDLE_FLAG_CHECK_BM; ++ ++ /* C6 . MPU OFF + Core OFF */ ++ omap3_power_states[6].valid = 0; ++ omap3_power_states[6].type = OMAP3_STATE_C6; ++ omap3_power_states[6].sleep_latency = 10000; ++ omap3_power_states[6].wakeup_latency = 30000; ++ omap3_power_states[6].threshold = 300000; ++ omap3_power_states[6].mpu_state = PWRDM_POWER_OFF; ++ omap3_power_states[6].core_state = PWRDM_POWER_OFF; ++ omap3_power_states[6].flags = CPUIDLE_FLAG_TIME_VALID | ++ CPUIDLE_FLAG_DEEP | CPUIDLE_FLAG_CHECK_BM; ++} ++ ++struct cpuidle_driver omap3_idle_driver = { ++ .name = "omap3_idle", ++ .owner = THIS_MODULE, ++}; ++/* ++ * omap3_idle_init - Init routine for OMAP3 idle. ++ * Registers the OMAP3 specific cpuidle driver with the cpuidle f/w ++ * with the valid set of states. ++ */ ++int omap3_idle_init(void) ++{ ++ int i, count = 0; ++ struct omap3_processor_cx *cx; ++ struct cpuidle_state *state; ++ struct cpuidle_device *dev; ++ ++ omap_init_power_states(); ++ cpuidle_register_driver(&omap3_idle_driver); ++ ++ dev = &per_cpu(omap3_idle_dev, smp_processor_id()); ++ ++ for (i = 0; i < OMAP3_MAX_STATES; i++) { ++ cx = &omap3_power_states[i]; ++ state = &dev->states[count]; ++ ++ if (!cx->valid) ++ continue; ++ cpuidle_set_statedata(state, cx); ++ state->exit_latency = cx->sleep_latency + cx->wakeup_latency; ++ state->target_residency = cx->threshold; ++ state->flags = cx->flags; ++ state->enter = (state->flags & CPUIDLE_FLAG_CHECK_BM) ? ++ omap3_enter_idle_bm : omap3_enter_idle; ++ sprintf(state->name, "C%d", count+1); ++ count++; ++ } ++ ++ if (!count) ++ return -EINVAL; ++ dev->state_count = count; ++ ++ if (cpuidle_register_device(dev)) { ++ printk(KERN_ERR "%s: CPUidle register device failed\n", ++ __FUNCTION__); ++ return -EIO; ++ } ++ ++ return 0; ++} ++__initcall(omap3_idle_init); ++#endif /* CONFIG_CPU_IDLE */ +Index: linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-omap-2.6/arch/arm/mach-omap2/cpuidle34xx.h 2008-06-09 20:15:39.569121361 +0530 +@@ -0,0 +1,51 @@ ++/* ++ * linux/arch/arm/mach-omap2/cpuidle34xx.h ++ * ++ * OMAP3 cpuidle structure definitions ++ * ++ * Copyright (C) 2007-2008 Texas Instruments, Inc. ++ * Written by Rajendra Nayak ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++ * ++ * History: ++ * ++ */ ++ ++#ifndef ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX ++#define ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX ++ ++#define OMAP3_MAX_STATES 7 ++#define OMAP3_STATE_C0 0 /* C0 - System executing code */ ++#define OMAP3_STATE_C1 1 /* C1 - MPU WFI + Core active */ ++#define OMAP3_STATE_C2 2 /* C2 - MPU CSWR + Core active */ ++#define OMAP3_STATE_C3 3 /* C3 - MPU OFF + Core active */ ++#define OMAP3_STATE_C4 4 /* C4 - MPU RET + Core RET */ ++#define OMAP3_STATE_C5 5 /* C5 - MPU OFF + Core RET */ ++#define OMAP3_STATE_C6 6 /* C6 - MPU OFF + Core OFF */ ++ ++extern void omap_sram_idle(void); ++extern int omap3_irq_pending(void); ++ ++struct omap3_processor_cx { ++ u8 valid; ++ u8 type; ++ u32 sleep_latency; ++ u32 wakeup_latency; ++ u32 mpu_state; ++ u32 core_state; ++ u32 threshold; ++ u32 flags; ++}; ++ ++void omap_init_power_states(void); ++int omap3_idle_init(void); ++ ++#endif /* ARCH_ARM_MACH_OMAP2_CPUIDLE_34XX */ ++ +Index: linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c +=================================================================== +--- linux-omap-2.6.orig/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:15:33.855303920 +0530 ++++ linux-omap-2.6/arch/arm/mach-omap2/pm34xx.c 2008-06-09 20:16:20.976798343 +0530 +@@ -141,7 +141,7 @@ static irqreturn_t prcm_interrupt_handle + return IRQ_HANDLED; + } + +-static void omap_sram_idle(void) ++void omap_sram_idle(void) + { + /* Variable to tell what needs to be saved and restored + * in omap_sram_idle*/ +@@ -156,6 +156,7 @@ static void omap_sram_idle(void) + + mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm); + switch (mpu_next_state) { ++ case PWRDM_POWER_ON: + case PWRDM_POWER_RET: + /* No need to save context */ + save_state = 0; +@@ -386,7 +387,9 @@ int __init omap3_pm_init(void) + + prcm_setup_regs(); + ++#ifndef CONFIG_CPU_IDLE + pm_idle = omap3_pm_idle; ++#endif + + err1: + return ret; +Index: linux-omap-2.6/drivers/cpuidle/cpuidle.c +=================================================================== +--- linux-omap-2.6.orig/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:33.856303888 +0530 ++++ linux-omap-2.6/drivers/cpuidle/cpuidle.c 2008-06-09 20:15:39.570121329 +0530 +@@ -58,6 +58,11 @@ static void cpuidle_idle_call(void) + return; + } + ++#ifdef CONFIG_ARCH_OMAP3 ++ local_irq_disable(); ++ local_fiq_disable(); ++#endif ++ + /* ask the governor for the next state */ + next_state = cpuidle_curr_governor->select(dev); + if (need_resched()) +@@ -70,6 +75,11 @@ static void cpuidle_idle_call(void) + target_state->time += (unsigned long long)dev->last_residency; + target_state->usage++; + ++#ifdef CONFIG_ARCH_OMAP3 ++ local_irq_enable(); ++ local_fiq_enable(); ++#endif ++ + /* give the governor an opportunity to reflect on the outcome */ + if (cpuidle_curr_governor->reflect) + cpuidle_curr_governor->reflect(dev); + +-- +To unsubscribe from this list: send the line "unsubscribe linux-omap" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + diff --git a/packages/linux/linux-omap2-git/omap3evm/0002-omap3-cpuidle.patch b/packages/linux/linux-omap2-git/omap3evm/0002-omap3-cpuidle.patch index c17c690fe1..d35fd47567 100644 --- a/packages/linux/linux-omap2-git/omap3evm/0002-omap3-cpuidle.patch +++ b/packages/linux/linux-omap2-git/omap3evm/0002-omap3-cpuidle.patch @@ -1,88 +1,88 @@ -From: "Rajendra Nayak" -To: -Subject: [PATCH 02/02] Kconfig changes -Date: Tue, 10 Jun 2008 12:39:02 +0530 - -Updates the CPUidle Kconfig - -Signed-off-by: Rajendra Nayak - ---- - arch/arm/Kconfig | 10 ++++++++++ - drivers/cpuidle/Kconfig | 28 ++++++++++++++++++++++------ - 2 files changed, 32 insertions(+), 6 deletions(-) - -Index: linux-omap-2.6/arch/arm/Kconfig -=================================================================== ---- linux-omap-2.6.orig/arch/arm/Kconfig 2008-06-10 11:43:10.790502713 +0530 -+++ linux-omap-2.6/arch/arm/Kconfig 2008-06-10 11:43:38.701604549 +0530 -@@ -954,6 +954,16 @@ config ATAGS_PROC - - endmenu - -+if (ARCH_OMAP) -+ -+menu "CPUIdle" -+ -+source "drivers/cpuidle/Kconfig" -+ -+endmenu -+ -+endif -+ - if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA) - - menu "CPU Frequency scaling" -Index: linux-omap-2.6/drivers/cpuidle/Kconfig -=================================================================== ---- linux-omap-2.6.orig/drivers/cpuidle/Kconfig 2008-06-10 11:43:10.790502713 +0530 -+++ linux-omap-2.6/drivers/cpuidle/Kconfig 2008-06-10 12:06:36.139332151 +0530 -@@ -1,20 +1,36 @@ -+menu "CPU idle PM support" - - config CPU_IDLE - bool "CPU idle PM support" -- default ACPI -+ default n - help - CPU idle is a generic framework for supporting software-controlled - idle processor power management. It includes modular cross-platform - governors that can be swapped during runtime. - -- If you're using an ACPI-enabled platform, you should say Y here. -+ If you're using a mobile platform that supports CPU idle PM (e.g. -+ an ACPI-capable notebook), you should say Y here. -+ -+if CPU_IDLE -+ -+comment "Governors" - - config CPU_IDLE_GOV_LADDER -- bool -+ bool "ladder" - depends on CPU_IDLE -- default y -+ default n - - config CPU_IDLE_GOV_MENU -- bool -+ bool "menu" - depends on CPU_IDLE && NO_HZ -- default y -+ default n -+ help -+ This cpuidle governor evaluates all available states and chooses the -+ deepest state that meets all of the following constraints: BM activity, -+ expected time until next timer interrupt, and last break event time -+ delta. It is designed to minimize power consumption. Currently -+ dynticks is required. -+ -+endif # CPU_IDLE -+ -+endmenu - --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - +From: "Rajendra Nayak" +To: +Subject: [PATCH 02/02] Kconfig changes +Date: Tue, 10 Jun 2008 12:39:02 +0530 + +Updates the CPUidle Kconfig + +Signed-off-by: Rajendra Nayak + +--- + arch/arm/Kconfig | 10 ++++++++++ + drivers/cpuidle/Kconfig | 28 ++++++++++++++++++++++------ + 2 files changed, 32 insertions(+), 6 deletions(-) + +Index: linux-omap-2.6/arch/arm/Kconfig +=================================================================== +--- linux-omap-2.6.orig/arch/arm/Kconfig 2008-06-10 11:43:10.790502713 +0530 ++++ linux-omap-2.6/arch/arm/Kconfig 2008-06-10 11:43:38.701604549 +0530 +@@ -954,6 +954,16 @@ config ATAGS_PROC + + endmenu + ++if (ARCH_OMAP) ++ ++menu "CPUIdle" ++ ++source "drivers/cpuidle/Kconfig" ++ ++endmenu ++ ++endif ++ + if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA) + + menu "CPU Frequency scaling" +Index: linux-omap-2.6/drivers/cpuidle/Kconfig +=================================================================== +--- linux-omap-2.6.orig/drivers/cpuidle/Kconfig 2008-06-10 11:43:10.790502713 +0530 ++++ linux-omap-2.6/drivers/cpuidle/Kconfig 2008-06-10 12:06:36.139332151 +0530 +@@ -1,20 +1,36 @@ ++menu "CPU idle PM support" + + config CPU_IDLE + bool "CPU idle PM support" +- default ACPI ++ default n + help + CPU idle is a generic framework for supporting software-controlled + idle processor power management. It includes modular cross-platform + governors that can be swapped during runtime. + +- If you're using an ACPI-enabled platform, you should say Y here. ++ If you're using a mobile platform that supports CPU idle PM (e.g. ++ an ACPI-capable notebook), you should say Y here. ++ ++if CPU_IDLE ++ ++comment "Governors" + + config CPU_IDLE_GOV_LADDER +- bool ++ bool "ladder" + depends on CPU_IDLE +- default y ++ default n + + config CPU_IDLE_GOV_MENU +- bool ++ bool "menu" + depends on CPU_IDLE && NO_HZ +- default y ++ default n ++ help ++ This cpuidle governor evaluates all available states and chooses the ++ deepest state that meets all of the following constraints: BM activity, ++ expected time until next timer interrupt, and last break event time ++ delta. It is designed to minimize power consumption. Currently ++ dynticks is required. ++ ++endif # CPU_IDLE ++ ++endmenu + +-- +To unsubscribe from this list: send the line "unsubscribe linux-omap" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + -- cgit v1.2.3 From 1f8940a24bafee2acced9263def2a0816155cd60 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 2 Jul 2008 11:16:29 +0000 Subject: frameworkd git catch up with ophoned subsystem rename --- packages/freesmartphone/frameworkd/frameworkd.conf | 2 +- packages/freesmartphone/frameworkd_git.bb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/freesmartphone/frameworkd/frameworkd.conf b/packages/freesmartphone/frameworkd/frameworkd.conf index 2010889142..d6522030a7 100644 --- a/packages/freesmartphone/frameworkd/frameworkd.conf +++ b/packages/freesmartphone/frameworkd/frameworkd.conf @@ -13,7 +13,7 @@ ignoreinput = 2,3,4 [powercontrol-neo] disable = 0 -[ophoned] +[gsmd] modemtype = ti_calypso [opreferencesd] diff --git a/packages/freesmartphone/frameworkd_git.bb b/packages/freesmartphone/frameworkd_git.bb index 084117e5ff..ab1816a7b9 100644 --- a/packages/freesmartphone/frameworkd_git.bb +++ b/packages/freesmartphone/frameworkd_git.bb @@ -1,11 +1,11 @@ -DESCRIPTION = "The freesmartphon.org Framework Daemon" +DESCRIPTION = "The freesmartphone.org Framework Daemon" HOMEPAGE = "http://www.freesmartphone.org" -AUTHOR = "Michael 'Mickey' Lauer " +AUTHOR = "Michael 'Mickey' Lauer et. al." SECTION = "console/network" DEPENDS = "python-cython-native python-pyrex-native" LICENSE = "GPL" PV = "0.8.0+gitr${SRCREV}" -PR = "r3" +PR = "r5" inherit distutils update-rc.d @@ -36,5 +36,5 @@ RDEPENDS_${PN} += "\ python-syslog \ " -FILES_${PN} += "${sysconfdir}" +FILES_${PN} += "${sysconfdir} ${datadir}" FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/framework/subsystems/*/.debug" -- cgit v1.2.3 From 40203afadf07ca39a7807b992804bf8d4f5d8dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Wed, 2 Jul 2008 11:38:28 +0000 Subject: e-wm: Make sure edbus is present (picked from org.openmoko.asu.stable) If edbus was present e picked it up. This lead to e eventually linking against dbus. Make sure that we always link against (e)dbus. We want dbus and this will solve the loading error of the illume module. Original author: Holger Hans Peter Freyther --- packages/e17/e-wm_cvs.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/e17/e-wm_cvs.bb b/packages/e17/e-wm_cvs.bb index 87161526e0..b3a4201bcf 100644 --- a/packages/e17/e-wm_cvs.bb +++ b/packages/e17/e-wm_cvs.bb @@ -1,8 +1,8 @@ DESCRIPTION = "The Enlightenment Window Mananger Version 17" -DEPENDS = "eet evas ecore edje efreet" +DEPENDS = "eet evas ecore edje efreet edbus" LICENSE = "MIT BSD" PV = "0.16.999.042+cvs${SRCDATE}" -PR = "r8" +PR = "r9" inherit e update-alternatives -- cgit v1.2.3 From 5cf297cca8e74bb8909d2581763d13e160871cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Wed, 2 Jul 2008 13:09:49 +0000 Subject: e-dbus: edbus doesn't need efreet or ewl Original author: Carsten Haitzler --- packages/efl1/edbus_cvs.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/efl1/edbus_cvs.bb b/packages/efl1/edbus_cvs.bb index e59ba0be1a..8574d9f29e 100644 --- a/packages/efl1/edbus_cvs.bb +++ b/packages/efl1/edbus_cvs.bb @@ -1,8 +1,8 @@ DESCRIPTION = "DBus and HAL convenience wrappers for EFL" -DEPENDS = "dbus ecore efreet ewl" +DEPENDS = "dbus ecore" LICENSE = "MIT BSD" PV = "0.5.0.043+cvs${SRCDATE}" -PR = "r0" +PR = "r1" inherit efl -- cgit v1.2.3 From dc6491d82fdb67ad1cd3ab2c65bac7f17f5a07eb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 2 Jul 2008 13:18:37 +0000 Subject: linux-omap2 git: disable rtc on beagle --- packages/linux/linux-omap2-git/beagleboard/defconfig | 2 +- packages/linux/linux-omap2_git.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 3ef03cf5d5..a4f0cd4a9f 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1592,7 +1592,7 @@ CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_DRV_PCF8563 is not set # CONFIG_RTC_DRV_PCF8583 is not set # CONFIG_RTC_DRV_M41T80 is not set -CONFIG_RTC_DRV_TWL4030=y +CONFIG_RTC_DRV_TWL4030=n # CONFIG_RTC_DRV_S35390A is not set # CONFIG_RTC_DRV_FM3130 is not set diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 4ccf527bae..c5996c4bee 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "050684c18f2ea0b08fdd5233a0cd3c7f96e00a0e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r32" +PR = "r33" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ -- cgit v1.2.3 From e569eb9f01a6550dac48cf0e88c6c3834c7744f3 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 2 Jul 2008 13:24:16 +0000 Subject: python-psyco 1.5 update to 1.6. closes #3495 --- packages/python/python-psyco_1.5.bb | 14 -------------- packages/python/python-psyco_1.6.bb | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 packages/python/python-psyco_1.5.bb create mode 100644 packages/python/python-psyco_1.6.bb diff --git a/packages/python/python-psyco_1.5.bb b/packages/python/python-psyco_1.5.bb deleted file mode 100644 index 5c47e6971d..0000000000 --- a/packages/python/python-psyco_1.5.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "Psyco lets you run your existing Python software much faster, with no change in your source." -HOMEPAGE = "http://psyco.sourceforge.net" -SECTION = "devel/python" -PRIORITY = "optional" -LICENSE = "PSF" -RDEPENDS = "python-core" -SRCNAME = "psyco" - -SRC_URI = "${SOURCEFORGE_MIRROR}/${SRCNAME}/${SRCNAME}-${PV}-src.tar.gz" -S = "${WORKDIR}/${SRCNAME}-${PV}" - -COMPATIBLE_HOST = 'i.86.*-linux' - -inherit distutils diff --git a/packages/python/python-psyco_1.6.bb b/packages/python/python-psyco_1.6.bb new file mode 100644 index 0000000000..5c47e6971d --- /dev/null +++ b/packages/python/python-psyco_1.6.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Psyco lets you run your existing Python software much faster, with no change in your source." +HOMEPAGE = "http://psyco.sourceforge.net" +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "PSF" +RDEPENDS = "python-core" +SRCNAME = "psyco" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${SRCNAME}/${SRCNAME}-${PV}-src.tar.gz" +S = "${WORKDIR}/${SRCNAME}-${PV}" + +COMPATIBLE_HOST = 'i.86.*-linux' + +inherit distutils -- cgit v1.2.3 From b85f5d16a791a5f65bc10be3b257b207821681ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Wed, 2 Jul 2008 13:53:13 +0000 Subject: illume: sync to org.openmoko.asu.dev --- conf/distro/include/sane-srcrevs.inc | 4 +- packages/openmoko-projects/illume-theme_svn.bb | 11 +-- packages/openmoko-projects/illume/keyboard.patch | 89 ------------------------ packages/openmoko-projects/illume_svn.bb | 6 +- 4 files changed, 8 insertions(+), 102 deletions(-) delete mode 100644 packages/openmoko-projects/illume/keyboard.patch diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index f60c218772..1ae05e87db 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -48,8 +48,8 @@ SRCREV_pn-gsmd2 ?= "963f34df8fa3ff4b301079dcf86e9acea6b6fe0f" SRCREV_pn-gtkhtml2 ?= "1158" SRCREV_pn-gypsy ?= "134" SRCREV_pn-hildon-1 ?= "14429" -SRCREV_pn-illume ?= "58" -SRCREV_pn-illume-theme ?= "58" +SRCREV_pn-illume ?= "124" +SRCREV_pn-illume-theme ?= "124" SRCREV_pn-kismet ?= "2285" SRCREV_pn-kismet-newcore ?= "2285" SRCREV_pn-libcalenabler2 ?= "1410" diff --git a/packages/openmoko-projects/illume-theme_svn.bb b/packages/openmoko-projects/illume-theme_svn.bb index b360d3b14a..3ea672117f 100644 --- a/packages/openmoko-projects/illume-theme_svn.bb +++ b/packages/openmoko-projects/illume-theme_svn.bb @@ -4,27 +4,22 @@ LICENSE = "MIT/BSD" PACKAGE_ARCH="all" PV = "0.0+svnr${SRCREV}" -PR = "r4" +PR = "r5" SRC_URI = "svn://svn.projects.openmoko.org/svnroot/;module=illume;proto=https" S = "${WORKDIR}/illume" -python do_unpack_append() { - bb.note("Unpacking to %s" % os.getcwd()) - os.system("cd illume; tar -xz --no-same-owner -f misc-data/untar-me-from-root.tar.gz") -} - CONFFILES_${PN} = "${sysconfdir}/enlightenment/default_profile" FILES_${PN} = "${sysconfdir}/enlightenment ${datadir}/enlightenment" do_install() { install -d ${D}${sysconfdir}/enlightenment install -d ${D}${datadir}/enlightenment/data/themes/ - install -d ${D}${datadir}/enlightenment/data/config/ + install -d ${D}${datadir}/enlightenment/data/init/ # Make illume the default profile echo 'E_PROFILE="-profile illume"' > ${D}${sysconfdir}/enlightenment/default_profile install -m 0644 ${S}/misc-data/illume.edj ${D}${datadir}/enlightenment/data/themes/ - cp -pPR ${S}/.e/e/config/default ${D}${datadir}/enlightenment/data/config/illume + install -m 0644 ${S}/misc-data/illume_init.edj ${D}${datadir}/enlightenment/data/init/ } diff --git a/packages/openmoko-projects/illume/keyboard.patch b/packages/openmoko-projects/illume/keyboard.patch deleted file mode 100644 index 320e798a3e..0000000000 --- a/packages/openmoko-projects/illume/keyboard.patch +++ /dev/null @@ -1,89 +0,0 @@ -Index: configure.in -=================================================================== ---- configure.in (Revision 17) -+++ configure.in (Arbeitskopie) -@@ -28,6 +28,9 @@ - AC_SUBST(LOCALEDIR, "${localedir}") - AC_DEFINE_UNQUOTED(LOCALEDIR, "${localedir}", "Module Locale Directory") - -+keyboarddir="${datarootdir}/${PACKAGE}/keyboard" -+AC_SUBST(keyboarddir) -+ - # - # Check EFL Libs - # -Index: src/e_kbd.c -=================================================================== ---- src/e_kbd.c (Revision 17) -+++ src/e_kbd.c (Arbeitskopie) -@@ -57,6 +57,7 @@ - - static int _e_kbd_config_parse(E_Kbd *kbd, const char *config); - static Evas_Object *_theme_obj_new(Evas *e, const char *custom_dir, const char *group); -+static char* _e_kbd_get_default_path(void); - - /* state */ - -@@ -470,7 +471,7 @@ - edje_object_part_swallow(kbd->base_obj, "e.swallow.content", o); - evas_object_show(o); - kbd->layout_obj = o; -- _e_kbd_config_parse(kbd, "/home/raster/work/illume/default.kbd"); -+ _e_kbd_config_parse(kbd, _e_kbd_get_default_path()); - _e_kbd_layout_build(kbd); - - edje_object_size_min_calc(kbd->base_obj, &mw, &mh); -@@ -744,3 +745,26 @@ - } - return o; - } -+ -+/* -+ * Return the to be used keyboard file -+ */ -+static char * -+_e_kbd_get_default_path() -+{ -+ static char *buf = 0; -+ -+ if (getenv("ILLUME_KEYBOARD_DIR")) -+ { -+ if (!buf) -+ { -+ buf = (char*)malloc(sizeof(char)*PATH_MAX); -+ } -+ -+ snprintf(buf, PATH_MAX, "%s/default.kbd", getenv("ILLUME_KEYBOARD_DIR")); -+ return buf; -+ } -+ -+ -+ return KEYBOARDDIR"/default.kbd"; -+} -Index: src/Makefile.am -=================================================================== ---- src/Makefile.am (Revision 17) -+++ src/Makefile.am (Arbeitskopie) -@@ -1,6 +1,8 @@ - ACLOCAL_AMFLAGS = -I m4 - MAINTAINERCLEANFILES = Makefile.in - -+AM_CPPFLAGS = -DKEYBOARDDIR=\"$(keyboarddir)\" -+ - INCLUDES = -I. \ - -I$(top_srcdir) \ - @e_cflags@ -Index: Makefile.am -=================================================================== ---- Makefile.am (Revision 17) -+++ Makefile.am (Arbeitskopie) -@@ -14,6 +14,9 @@ - files_DATA = module.desktop \ - e-module-illume.edj \ - illume.edj -+ -+keybddir = $(keyboarddir) -+keybd_DATA = default.kbd - - EXTRA_DIST = $(files_DATA) \ - illume.edc \ diff --git a/packages/openmoko-projects/illume_svn.bb b/packages/openmoko-projects/illume_svn.bb index 5136240568..f3fb611e09 100644 --- a/packages/openmoko-projects/illume_svn.bb +++ b/packages/openmoko-projects/illume_svn.bb @@ -4,10 +4,9 @@ LICENSE = "MIT/BSD" DEPENDS = "e-wm eet evas ecore edje embryo efreet edbus edje-native embryo-native" RRECOMMENDS = "wamerican" PV = "0.0+svnr${SRCREV}" -PR = "r3" +PR = "r6" -SRC_URI = "svn://svn.projects.openmoko.org/svnroot/;module=${PN};proto=https \ - file://keyboard.patch;patch=1;pnum=0;minrev=17;maxrev=20" +SRC_URI = "svn://svn.projects.openmoko.org/svnroot/;module=${PN};proto=https" S = "${WORKDIR}/${PN}" @@ -21,5 +20,6 @@ EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \ FILES_${PN} = "${libdir}/enlightenment/modules/*/*.edj \ ${libdir}/enlightenment/modules/*/*.desktop \ ${libdir}/enlightenment/modules/*/*/* \ + ${datadir}/enlightenment/data/config/*/* \ ${datadir}/${PN} " FILES_${PN}-dbg += "${libdir}/enlightenment/modules/*/*/.debug/" -- cgit v1.2.3 From 08a6e84d3ad35bf232bd5d01b82f939904730a61 Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Wed, 2 Jul 2008 17:18:59 +0000 Subject: hal: create volatiles *after* creating the haldaemon user --- packages/hal/hal_0.5.9.1.bb | 6 +++--- packages/hal/hal_0.5.9.bb | 6 +++--- packages/hal/hal_git.bb | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/hal/hal_0.5.9.1.bb b/packages/hal/hal_0.5.9.1.bb index 3d2ba155b5..8bd193c40a 100644 --- a/packages/hal/hal_0.5.9.1.bb +++ b/packages/hal/hal_0.5.9.1.bb @@ -7,7 +7,7 @@ DEPENDS = "virtual/kernel dbus-glib udev intltool-native expat libusb-compat" RDEPENDS_${PN} += "udev hal-info" RRECOMMENDS_${PN} += "udev-utils" -PR = "r7" +PR = "r8" SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz \ file://configure_fix.patch;patch=1 \ @@ -52,11 +52,11 @@ pkg_postinst_hal () { exit 1 fi - /etc/init.d/populate-volatile.sh update - grep haldaemon /etc/group || addgroup haldaemon grep haldaemon /etc/passwd || adduser --disabled-password --system --home /var/run/hald --no-create-home haldaemon --ingroup haldaemon -g HAL + /etc/init.d/populate-volatile.sh update + DBUSPID=`pidof dbus-daemon` if [ "x$DBUSPID" != "x" ]; then diff --git a/packages/hal/hal_0.5.9.bb b/packages/hal/hal_0.5.9.bb index b878638ff2..8dabddf23c 100644 --- a/packages/hal/hal_0.5.9.bb +++ b/packages/hal/hal_0.5.9.bb @@ -5,7 +5,7 @@ RDEPENDS += "udev hal-info" #RDEPENDS_hal-device-manager = "python hal python-pygnome" RRECOMMENDS = "udev-utils" -PR = "r7" +PR = "r8" SRC_URI += "file://99_hal \ file://20hal \ @@ -53,11 +53,11 @@ pkg_postinst_hal () { exit 1 fi - /etc/init.d/populate-volatile.sh update - grep haldaemon /etc/group || addgroup haldaemon grep haldaemon /etc/passwd || adduser --disabled-password --system --home /var/run/hald --no-create-home haldaemon --ingroup haldaemon -g HAL + /etc/init.d/populate-volatile.sh update + DBUSPID=`pidof dbus-daemon` if [ "x$DBUSPID" != "x" ]; then diff --git a/packages/hal/hal_git.bb b/packages/hal/hal_git.bb index 659ab8eb6c..49ecfde9ea 100644 --- a/packages/hal/hal_git.bb +++ b/packages/hal/hal_git.bb @@ -14,7 +14,7 @@ SRC_URI = "git://anongit.freedesktop.org/hal/;protocol=git \ file://99_hal" PV = "0.5.9.1+git${SRCDATE}" -PR = "r5" +PR = "r6" S = "${WORKDIR}/git" @@ -53,11 +53,11 @@ pkg_postinst_hal () { exit 1 fi - /etc/init.d/populate-volatile.sh update - grep haldaemon /etc/group || addgroup haldaemon grep haldaemon /etc/passwd || adduser --disabled-password --system --home /var/run/hald --no-create-home haldaemon --ingroup haldaemon -g HAL + /etc/init.d/populate-volatile.sh update + DBUSPID=`pidof dbus-daemon` if [ "x$DBUSPID" != "x" ]; then -- cgit v1.2.3 From 20906f64f051da3baf7e142542f49accde5af7d2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 2 Jul 2008 18:13:38 +0000 Subject: linux omap2 git: disable apm for beagleboard --- packages/linux/linux-omap2-git/beagleboard/defconfig | 6 +++--- packages/linux/linux-omap2_git.bb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index a4f0cd4a9f..7fc46c9113 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -4,7 +4,7 @@ # Tue Jun 24 20:16:52 2008 # CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=n CONFIG_GENERIC_GPIO=y CONFIG_GENERIC_TIME=y CONFIG_GENERIC_CLOCKEVENTS=y @@ -346,7 +346,7 @@ CONFIG_PM=y CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y -CONFIG_APM_EMULATION=y +CONFIG_APM_EMULATION=n CONFIG_ARCH_SUSPEND_POSSIBLE=y # @@ -1592,7 +1592,7 @@ CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_DRV_PCF8563 is not set # CONFIG_RTC_DRV_PCF8583 is not set # CONFIG_RTC_DRV_M41T80 is not set -CONFIG_RTC_DRV_TWL4030=n +CONFIG_RTC_DRV_TWL4030=y # CONFIG_RTC_DRV_S35390A is not set # CONFIG_RTC_DRV_FM3130 is not set diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index c5996c4bee..7042cab3db 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "050684c18f2ea0b08fdd5233a0cd3c7f96e00a0e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r33" +PR = "r34" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ -- cgit v1.2.3 From 99af4d18b3a2bd815a8dcf1a45200102c9887137 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 2 Jul 2008 20:58:09 +0000 Subject: swfdec: fix 0.4.0 and add 0.7.2 --- packages/swfdec/swfdec/arm/.mtn2git_empty | 0 packages/swfdec/swfdec/arm/jsautocfg.h | 52 +++++++++++++++++++++++++++++++ packages/swfdec/swfdec_0.4.0.bb | 2 +- packages/swfdec/swfdec_0.7.2.bb | 26 ++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 packages/swfdec/swfdec/arm/.mtn2git_empty create mode 100644 packages/swfdec/swfdec/arm/jsautocfg.h create mode 100644 packages/swfdec/swfdec_0.7.2.bb diff --git a/packages/swfdec/swfdec/arm/.mtn2git_empty b/packages/swfdec/swfdec/arm/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/swfdec/swfdec/arm/jsautocfg.h b/packages/swfdec/swfdec/arm/jsautocfg.h new file mode 100644 index 0000000000..7e8171fc23 --- /dev/null +++ b/packages/swfdec/swfdec/arm/jsautocfg.h @@ -0,0 +1,52 @@ +#ifndef js_cpucfg___ +#define js_cpucfg___ + +/* AUTOMATICALLY GENERATED - DO NOT EDIT */ + +#define IS_LITTLE_ENDIAN 1 +#undef IS_BIG_ENDIAN + +#define JS_BYTES_PER_BYTE 1L +#define JS_BYTES_PER_SHORT 2L +#define JS_BYTES_PER_INT 4L +#define JS_BYTES_PER_INT64 8L +#define JS_BYTES_PER_LONG 4L +#define JS_BYTES_PER_FLOAT 4L +#define JS_BYTES_PER_DOUBLE 8L +#define JS_BYTES_PER_WORD 4L +#define JS_BYTES_PER_DWORD 8L + +#define JS_BITS_PER_BYTE 8L +#define JS_BITS_PER_SHORT 16L +#define JS_BITS_PER_INT 32L +#define JS_BITS_PER_INT64 64L +#define JS_BITS_PER_LONG 32L +#define JS_BITS_PER_FLOAT 32L +#define JS_BITS_PER_DOUBLE 64L +#define JS_BITS_PER_WORD 32L + +#define JS_BITS_PER_BYTE_LOG2 3L +#define JS_BITS_PER_SHORT_LOG2 4L +#define JS_BITS_PER_INT_LOG2 5L +#define JS_BITS_PER_INT64_LOG2 6L +#define JS_BITS_PER_LONG_LOG2 5L +#define JS_BITS_PER_FLOAT_LOG2 5L +#define JS_BITS_PER_DOUBLE_LOG2 6L +#define JS_BITS_PER_WORD_LOG2 5L + +#define JS_ALIGN_OF_SHORT 2L +#define JS_ALIGN_OF_INT 4L +#define JS_ALIGN_OF_LONG 4L +#define JS_ALIGN_OF_INT64 8L +#define JS_ALIGN_OF_FLOAT 4L +#define JS_ALIGN_OF_DOUBLE 8L +#define JS_ALIGN_OF_POINTER 4L +#define JS_ALIGN_OF_WORD 4L + +#define JS_BYTES_PER_WORD_LOG2 2L +#define JS_BYTES_PER_DWORD_LOG2 3L +#define JS_WORDS_PER_DWORD_LOG2 1L + +#define JS_STACK_GROWTH_DIRECTION (-1) + +#endif /* js_cpucfg___ */ diff --git a/packages/swfdec/swfdec_0.4.0.bb b/packages/swfdec/swfdec_0.4.0.bb index 778302c140..b4c56afacf 100644 --- a/packages/swfdec/swfdec_0.4.0.bb +++ b/packages/swfdec/swfdec_0.4.0.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Swfdec is a decoder/renderer for Macromedia Flash animations." -LICENSE = ""LGPL +LICENSE = "LGPL" DEPENDS = "pango cairo liboil zlib libmad gtk+ alsa-lib" diff --git a/packages/swfdec/swfdec_0.7.2.bb b/packages/swfdec/swfdec_0.7.2.bb new file mode 100644 index 0000000000..b0bc2e9461 --- /dev/null +++ b/packages/swfdec/swfdec_0.7.2.bb @@ -0,0 +1,26 @@ +DESCRIPTION = "Swfdec is a decoder/renderer for Macromedia Flash animations." +LICENSE = "LGPL" + +DEPENDS = "pango cairo liboil zlib libmad gtk+ alsa-lib" + +SRC_URI = "http://swfdec.freedesktop.org/download/swfdec/0.7/${P}.tar.gz \ +" + +inherit autotools pkgconfig + +do_install_append() { + install -d ${D}/${bindir} + install -m 0755 ${S}/player/.libs/swfplay ${D}/${bindir} +} + +do_stage() { + autotools_stage_all +} + +PACKAGES =+ "libswfdecgtk libswfdec" + +FILES_${PN} += "${datadir}/icons" +FILES_libswfdec = "${libdir}/libswfdec-0.7.so.*" +FILES_libswfdecgtk = "${libdir}/libswfdec-gtk-0.7.so*" + + -- cgit v1.2.3 From b9c474703f75f5f1debed8709ca27a9361137f43 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 2 Jul 2008 21:34:49 +0000 Subject: libsidplay: add debian patch to build with gcc 4.3.x --- packages/libsidplay/libsidplay_1.36.59.bb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/libsidplay/libsidplay_1.36.59.bb b/packages/libsidplay/libsidplay_1.36.59.bb index fc9a01279c..9ca4ee13c4 100644 --- a/packages/libsidplay/libsidplay_1.36.59.bb +++ b/packages/libsidplay/libsidplay_1.36.59.bb @@ -3,7 +3,11 @@ SECTION = "libs" PRIORITY = "optional" LICENSE = "GPL" -SRC_URI = "http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/libsidplay-${PV}.tgz" +PR = "r1" + +SRC_URI = "http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/libsidplay-${PV}.tgz \ + http://ftp.debian.org/debian/pool/main/libs/libsidplay/libsidplay_1.36.59-5.diff.gz;patch=1 \ +" inherit autotools -- cgit v1.2.3 From 61c418c9dd00f35aa6e96117ed71bf17a824e244 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 2 Jul 2008 21:43:50 +0000 Subject: swfdec: fix DEPENDS --- packages/swfdec/swfdec_0.7.2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/swfdec/swfdec_0.7.2.bb b/packages/swfdec/swfdec_0.7.2.bb index b0bc2e9461..05d4977eae 100644 --- a/packages/swfdec/swfdec_0.7.2.bb +++ b/packages/swfdec/swfdec_0.7.2.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Swfdec is a decoder/renderer for Macromedia Flash animations." LICENSE = "LGPL" -DEPENDS = "pango cairo liboil zlib libmad gtk+ alsa-lib" +DEPENDS = "gstreamer libsoup-2.4 pango cairo liboil zlib libmad gtk+ alsa-lib" SRC_URI = "http://swfdec.freedesktop.org/download/swfdec/0.7/${P}.tar.gz \ " -- cgit v1.2.3 From 141ed8990fcfe25063c14c75a331bf8d38d88893 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 10:42:46 +0000 Subject: sqlite3: install headers during do_stage, fixing packaged-staging. From poky --- packages/sqlite/sqlite3.inc | 1 + packages/sqlite/sqlite3_3.5.6.bb | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/sqlite/sqlite3.inc b/packages/sqlite/sqlite3.inc index 68cc3e1c33..93a536e8b6 100644 --- a/packages/sqlite/sqlite3.inc +++ b/packages/sqlite/sqlite3.inc @@ -28,6 +28,7 @@ do_compile_prepend() { do_stage() { oe_libinstall -so libsqlite3 ${STAGING_LIBDIR} + install -m 0644 sqlite3.h ${STAGING_INCDIR} } #do_install() { diff --git a/packages/sqlite/sqlite3_3.5.6.bb b/packages/sqlite/sqlite3_3.5.6.bb index 53fd96c705..5075dd35b7 100644 --- a/packages/sqlite/sqlite3_3.5.6.bb +++ b/packages/sqlite/sqlite3_3.5.6.bb @@ -1 +1,3 @@ require sqlite3.inc + +PR = "r1" -- cgit v1.2.3 From 0658c11da759d064ff8a43e70bfcd4c002045074 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 10:44:08 +0000 Subject: gnash: add 0.8.3 with an ugly, ugly hack to work around libtool problems --- packages/gnash/gnash_0.8.3.bb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/gnash/gnash_0.8.3.bb diff --git a/packages/gnash/gnash_0.8.3.bb b/packages/gnash/gnash_0.8.3.bb new file mode 100644 index 0000000000..383f970755 --- /dev/null +++ b/packages/gnash/gnash_0.8.3.bb @@ -0,0 +1,6 @@ +require gnash.inc + +do_configure() { + gnu-configize + oe_runconf +} -- cgit v1.2.3 From 8dfedb7131d2aea7829ae4c0640ce388dfa8d582 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Thu, 3 Jul 2008 12:44:59 +0000 Subject: dsplink : Package sample programs and install them on Davinci images. --- conf/machine/davinci-dvevm.conf | 1 + conf/machine/davinci-sffsdr.conf | 1 + packages/dsplink/dsplink.inc | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/conf/machine/davinci-dvevm.conf b/conf/machine/davinci-dvevm.conf index ba7a099825..bc9d28870b 100644 --- a/conf/machine/davinci-dvevm.conf +++ b/conf/machine/davinci-dvevm.conf @@ -22,6 +22,7 @@ EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" MACHINE_FEATURES = "kernel26 pcmcia usbhost alsa" +MACHINE_EXTRA_RDEPENDS = "dsplink" MACHINE_EXTRA_RRECOMMENDS = "dsplink-module" require conf/machine/include/tune-arm926ejs.inc diff --git a/conf/machine/davinci-sffsdr.conf b/conf/machine/davinci-sffsdr.conf index 1977da8104..efaffb088b 100644 --- a/conf/machine/davinci-sffsdr.conf +++ b/conf/machine/davinci-sffsdr.conf @@ -25,6 +25,7 @@ EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" MACHINE_FEATURES = "kernel26 serial" +MACHINE_EXTRA_RDEPENDS = "dsplink" MACHINE_EXTRA_RRECOMMENDS = "dsplink-module" require conf/machine/include/tune-arm926ejs.inc diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 877697eb99..2fa4aae8e0 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -66,6 +66,10 @@ do_compile () { do_install () { install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp cp ${S}/gpp/BUILD/EXPORT/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/ + + install -d ${D}/${bindir} + install ${S}/gpp/BUILD/EXPORT/RELEASE/mpcsxfergpp ${D}/${bindir} + install ${S}/gpp/BUILD/EXPORT/RELEASE/ringiogpp ${D}/${bindir} } pkg_postinst_${PN}-module () { @@ -82,6 +86,7 @@ pkg_postrm_${PN}-module () { PACKAGES =+ "${PN}-module" FILES_${PN}-module = "${sysconfdir} /lib/modules" +FILES_${PN} = "${bindir}/mpcsxfergpp ${bindir}/ringiogpp" PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From e22b999e89d6ce2a02a398b13b1d21932aea13ee Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 3 Jul 2008 12:56:17 +0000 Subject: frameworkd git fix typo in conf file --- packages/freesmartphone/frameworkd/frameworkd.conf | 2 +- packages/freesmartphone/frameworkd_git.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/freesmartphone/frameworkd/frameworkd.conf b/packages/freesmartphone/frameworkd/frameworkd.conf index d6522030a7..36b4f5fc8e 100644 --- a/packages/freesmartphone/frameworkd/frameworkd.conf +++ b/packages/freesmartphone/frameworkd/frameworkd.conf @@ -13,7 +13,7 @@ ignoreinput = 2,3,4 [powercontrol-neo] disable = 0 -[gsmd] +[ogsmd] modemtype = ti_calypso [opreferencesd] diff --git a/packages/freesmartphone/frameworkd_git.bb b/packages/freesmartphone/frameworkd_git.bb index ab1816a7b9..a6d25f79ec 100644 --- a/packages/freesmartphone/frameworkd_git.bb +++ b/packages/freesmartphone/frameworkd_git.bb @@ -5,7 +5,7 @@ SECTION = "console/network" DEPENDS = "python-cython-native python-pyrex-native" LICENSE = "GPL" PV = "0.8.0+gitr${SRCREV}" -PR = "r5" +PR = "r6" inherit distutils update-rc.d -- cgit v1.2.3 From 8b87ea1864999c63968dd5e7891409e460923945 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 13:19:36 +0000 Subject: linux-omap2 git: add bootlogo for beagleboard --- .../beagleboard/logo_linux_clut224.ppm | 73147 +++++++++++++++++++ packages/linux/linux-omap2_git.bb | 3 +- 2 files changed, 73149 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-omap2-git/beagleboard/logo_linux_clut224.ppm diff --git a/packages/linux/linux-omap2-git/beagleboard/logo_linux_clut224.ppm b/packages/linux/linux-omap2-git/beagleboard/logo_linux_clut224.ppm new file mode 100644 index 0000000000..d29fc1c544 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/logo_linux_clut224.ppm @@ -0,0 +1,73147 @@ +P3 +# CREATOR: GIMP PNM Filter Version 1.1 +387 63 +255 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +53 +248 +138 +64 +250 +139 +73 +247 +143 +74 +247 +143 +74 +249 +146 +83 +249 +146 +83 +249 +146 +83 +247 +143 +74 +250 +139 +73 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +53 +248 +138 +64 +250 +139 +73 +247 +143 +74 +247 +143 +74 +250 +139 +73 +248 +138 +64 +247 +130 +53 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +60 +248 +138 +64 +247 +143 +74 +247 +143 +74 +247 +143 +74 +250 +139 +73 +247 +130 +60 +247 +130 +53 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +130 +60 +250 +139 +73 +247 +143 +74 +247 +143 +74 +247 +143 +74 +248 +138 +64 +247 +130 +60 +247 +130 +53 +247 +118 +39 +247 +111 +26 +247 +111 +26 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +60 +248 +138 +64 +247 +143 +74 +247 +143 +74 +247 +143 +74 +250 +139 +73 +247 +130 +60 +247 +130 +53 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +130 +53 +247 +130 +60 +250 +139 +73 +249 +146 +83 +249 +152 +92 +249 +159 +103 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +247 +165 +111 +247 +165 +111 +249 +159 +103 +249 +152 +92 +249 +146 +83 +250 +139 +73 +247 +130 +60 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +247 +143 +74 +247 +150 +84 +246 +156 +93 +249 +159 +103 +249 +159 +103 +246 +156 +93 +247 +150 +84 +250 +139 +73 +247 +130 +60 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +123 +41 +248 +138 +64 +247 +143 +74 +249 +152 +92 +249 +159 +103 +249 +159 +103 +249 +159 +103 +246 +156 +93 +247 +150 +84 +250 +139 +73 +247 +130 +53 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +248 +138 +64 +249 +146 +83 +249 +152 +92 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +152 +92 +249 +146 +83 +248 +138 +64 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +248 +138 +64 +247 +143 +74 +249 +152 +92 +249 +159 +103 +249 +159 +103 +249 +159 +103 +246 +156 +93 +247 +150 +84 +250 +139 +73 +247 +130 +53 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +60 +250 +139 +73 +247 +150 +84 +249 +159 +103 +247 +165 +111 +249 +174 +124 +248 +180 +134 +252 +185 +144 +240 +181 +138 +219 +170 +138 +219 +170 +138 +230 +173 +136 +240 +181 +138 +248 +180 +134 +249 +174 +124 +247 +165 +111 +249 +159 +103 +249 +146 +83 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +247 +130 +60 +247 +143 +74 +249 +159 +103 +214 +151 +109 +121 +100 +85 +65 +67 +64 +74 +68 +68 +129 +102 +78 +214 +151 +109 +246 +156 +93 +247 +143 +74 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +111 +26 +246 +116 +28 +247 +123 +41 +248 +138 +64 +249 +146 +83 +249 +159 +103 +204 +141 +99 +102 +91 +75 +65 +67 +64 +81 +77 +76 +146 +111 +88 +238 +159 +107 +249 +152 +92 +250 +139 +73 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +248 +138 +64 +247 +150 +84 +245 +162 +103 +162 +125 +96 +81 +77 +76 +55 +66 +67 +99 +90 +79 +187 +140 +108 +249 +159 +103 +247 +150 +84 +248 +138 +64 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +111 +26 +246 +116 +28 +247 +123 +41 +248 +138 +64 +249 +146 +83 +249 +159 +103 +187 +140 +108 +102 +91 +75 +58 +69 +70 +76 +78 +76 +146 +111 +88 +238 +159 +107 +249 +152 +92 +250 +139 +73 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +53 +248 +138 +64 +249 +146 +83 +249 +159 +103 +251 +168 +115 +248 +180 +134 +239 +182 +144 +186 +157 +134 +124 +111 +99 +82 +69 +65 +65 +58 +56 +55 +48 +48 +65 +58 +56 +65 +58 +56 +65 +58 +56 +99 +90 +79 +158 +130 +108 +230 +173 +136 +250 +176 +132 +247 +165 +111 +249 +152 +92 +247 +143 +74 +247 +130 +53 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +250 +139 +73 +246 +156 +93 +214 +151 +109 +74 +68 +68 +56 +64 +60 +95 +87 +59 +88 +82 +59 +56 +64 +60 +81 +77 +76 +238 +159 +107 +249 +152 +92 +248 +138 +64 +247 +130 +53 +246 +116 +28 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +249 +159 +103 +187 +140 +108 +51 +62 +63 +69 +69 +61 +95 +87 +59 +83 +78 +61 +48 +58 +59 +121 +100 +85 +247 +165 +111 +247 +150 +84 +248 +138 +64 +247 +123 +41 +246 +116 +28 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +247 +130 +60 +247 +150 +84 +247 +165 +111 +139 +115 +96 +48 +58 +59 +95 +78 +64 +118 +86 +65 +81 +73 +62 +48 +58 +59 +162 +125 +96 +249 +159 +103 +249 +146 +83 +247 +130 +60 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +249 +159 +103 +187 +140 +108 +48 +58 +59 +76 +70 +64 +118 +86 +65 +95 +78 +64 +51 +62 +63 +121 +100 +85 +247 +165 +111 +247 +150 +84 +248 +138 +64 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +247 +143 +74 +249 +152 +92 +247 +165 +111 +250 +176 +132 +251 +192 +154 +167 +142 +123 +65 +58 +56 +35 +31 +30 +71 +60 +43 +108 +87 +46 +129 +106 +52 +137 +110 +49 +156 +125 +62 +187 +166 +150 +129 +106 +52 +101 +83 +47 +59 +50 +39 +55 +48 +48 +139 +115 +96 +240 +181 +138 +249 +174 +124 +249 +159 +103 +247 +143 +74 +247 +130 +53 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +247 +130 +60 +247 +150 +84 +247 +165 +111 +124 +111 +99 +56 +64 +60 +137 +110 +49 +171 +129 +45 +171 +129 +45 +129 +106 +52 +51 +62 +63 +162 +125 +96 +247 +165 +111 +249 +146 +83 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +245 +169 +119 +81 +77 +76 +69 +69 +61 +152 +119 +47 +171 +129 +45 +171 +129 +45 +105 +93 +60 +48 +58 +59 +187 +140 +108 +249 +159 +103 +247 +143 +74 +247 +130 +53 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +246 +116 +28 +247 +130 +53 +250 +139 +73 +249 +159 +103 +210 +156 +119 +51 +62 +63 +112 +85 +63 +234 +126 +45 +234 +126 +45 +225 +124 +48 +95 +78 +64 +63 +74 +74 +234 +168 +124 +246 +156 +93 +250 +139 +73 +247 +123 +41 +246 +116 +28 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +245 +169 +119 +81 +77 +76 +81 +73 +62 +212 +120 +56 +234 +126 +45 +234 +126 +45 +135 +94 +64 +41 +58 +57 +187 +140 +108 +249 +159 +103 +247 +143 +74 +247 +130 +53 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +249 +146 +83 +249 +159 +103 +249 +174 +124 +249 +189 +146 +236 +186 +153 +99 +90 +79 +47 +40 +38 +85 +71 +43 +145 +114 +49 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +160 +120 +43 +195 +167 +113 +216 +194 +154 +168 +127 +42 +168 +127 +42 +123 +102 +54 +59 +50 +39 +82 +69 +65 +230 +173 +136 +249 +174 +124 +249 +159 +103 +247 +143 +74 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +246 +156 +93 +245 +169 +119 +84 +85 +82 +83 +78 +61 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +75 +74 +61 +101 +100 +92 +249 +174 +124 +246 +156 +93 +248 +138 +64 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +249 +159 +103 +210 +156 +119 +48 +58 +59 +105 +93 +60 +171 +129 +45 +158 +125 +46 +161 +127 +40 +152 +119 +47 +62 +63 +61 +139 +115 +96 +251 +168 +115 +247 +150 +84 +247 +130 +60 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +249 +146 +83 +247 +165 +111 +158 +130 +108 +51 +62 +63 +188 +112 +56 +234 +125 +52 +224 +123 +55 +234 +126 +45 +163 +104 +61 +48 +58 +59 +210 +156 +119 +247 +165 +111 +249 +146 +83 +247 +130 +60 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +247 +165 +111 +210 +156 +119 +55 +66 +67 +146 +97 +64 +234 +126 +45 +224 +123 +55 +234 +125 +52 +199 +115 +54 +62 +63 +61 +139 +115 +96 +251 +168 +115 +247 +150 +84 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +249 +146 +83 +249 +159 +103 +250 +176 +132 +219 +170 +138 +150 +125 +114 +65 +58 +56 +24 +22 +23 +59 +50 +39 +152 +119 +47 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +160 +120 +43 +158 +125 +46 +227 +196 +175 +192 +155 +91 +160 +120 +43 +171 +129 +45 +158 +125 +46 +85 +71 +43 +65 +58 +56 +219 +170 +138 +249 +174 +124 +246 +156 +93 +250 +139 +73 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +247 +103 +7 +246 +109 +10 +246 +116 +28 +247 +130 +53 +247 +143 +74 +249 +159 +103 +230 +173 +136 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +252 +185 +144 +247 +165 +111 +249 +146 +83 +247 +130 +60 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +203 +161 +131 +43 +57 +62 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +133 +120 +107 +250 +176 +132 +246 +156 +93 +248 +138 +64 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +154 +133 +118 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +183 +110 +59 +51 +62 +63 +186 +157 +134 +250 +176 +132 +246 +156 +93 +250 +139 +73 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +250 +139 +73 +246 +156 +93 +249 +174 +124 +209 +171 +139 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +133 +120 +107 +249 +174 +124 +246 +156 +93 +248 +138 +64 +247 +123 +41 +247 +111 +26 +246 +109 +10 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +249 +159 +103 +250 +176 +132 +158 +130 +108 +47 +40 +38 +59 +50 +39 +85 +71 +43 +85 +71 +43 +59 +50 +39 +35 +31 +30 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +152 +119 +47 +192 +155 +91 +224 +207 +180 +158 +125 +46 +160 +120 +43 +168 +127 +42 +171 +129 +45 +71 +60 +43 +82 +69 +65 +239 +182 +144 +249 +174 +124 +249 +152 +92 +248 +138 +64 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +249 +146 +83 +247 +165 +111 +239 +182 +144 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +250 +197 +158 +250 +176 +132 +249 +159 +103 +247 +143 +74 +247 +130 +60 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +60 +249 +146 +83 +249 +159 +103 +248 +180 +134 +212 +173 +150 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +137 +127 +115 +248 +180 +134 +249 +159 +103 +247 +143 +74 +247 +130 +53 +247 +118 +39 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +130 +53 +250 +139 +73 +249 +159 +103 +250 +176 +132 +167 +142 +123 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +187 +166 +150 +249 +189 +146 +251 +168 +115 +249 +152 +92 +250 +139 +73 +247 +130 +53 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +53 +248 +138 +64 +247 +150 +84 +247 +165 +111 +252 +185 +144 +212 +173 +150 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +133 +120 +107 +248 +180 +134 +249 +159 +103 +250 +139 +73 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +103 +7 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +250 +139 +73 +249 +159 +103 +250 +176 +132 +167 +142 +123 +24 +22 +23 +85 +71 +43 +158 +125 +46 +171 +129 +45 +171 +129 +45 +171 +129 +45 +85 +71 +43 +35 +31 +30 +145 +114 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +152 +119 +47 +216 +194 +154 +195 +167 +113 +152 +119 +47 +158 +125 +46 +168 +127 +42 +158 +125 +46 +59 +50 +39 +139 +115 +96 +252 +185 +144 +247 +165 +111 +247 +150 +84 +247 +130 +60 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +60 +247 +150 +84 +251 +168 +115 +236 +186 +153 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +251 +209 +178 +249 +189 +146 +249 +174 +124 +249 +159 +103 +249 +146 +83 +248 +138 +64 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +118 +39 +246 +116 +28 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +248 +138 +64 +247 +143 +74 +246 +156 +93 +249 +174 +124 +251 +192 +154 +207 +178 +158 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +249 +189 +146 +247 +165 +111 +247 +150 +84 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +123 +41 +247 +130 +60 +247 +143 +74 +249 +159 +103 +252 +185 +144 +167 +142 +123 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +51 +62 +63 +187 +166 +150 +250 +200 +166 +248 +180 +134 +247 +165 +111 +249 +152 +92 +247 +143 +74 +247 +130 +60 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +60 +250 +139 +73 +249 +152 +92 +247 +165 +111 +248 +180 +134 +250 +197 +158 +207 +178 +158 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +252 +185 +144 +249 +159 +103 +247 +143 +74 +247 +130 +53 +246 +116 +28 +246 +109 +10 +247 +103 +7 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +118 +39 +247 +118 +39 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +247 +150 +84 +251 +168 +115 +230 +173 +136 +47 +40 +38 +59 +50 +39 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +161 +127 +40 +171 +129 +45 +59 +50 +39 +71 +60 +43 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +152 +119 +47 +170 +137 +67 +239 +227 +208 +170 +137 +67 +160 +120 +43 +158 +125 +46 +171 +129 +45 +123 +102 +54 +47 +40 +38 +209 +171 +139 +248 +180 +134 +247 +165 +111 +249 +146 +83 +247 +130 +60 +247 +123 +41 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +111 +26 +247 +123 +41 +247 +130 +60 +247 +150 +84 +249 +174 +124 +236 +186 +153 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +255 +215 +190 +253 +204 +176 +249 +189 +146 +249 +174 +124 +247 +165 +111 +246 +156 +93 +249 +146 +83 +247 +143 +74 +248 +138 +64 +247 +130 +60 +247 +130 +53 +247 +123 +41 +246 +116 +28 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +53 +248 +138 +64 +250 +139 +73 +247 +143 +74 +249 +146 +83 +247 +150 +84 +249 +146 +83 +249 +146 +83 +247 +143 +74 +248 +138 +64 +247 +130 +60 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +53 +248 +138 +64 +250 +139 +73 +247 +143 +74 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +247 +143 +74 +247 +143 +74 +250 +139 +73 +250 +139 +73 +248 +138 +64 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +60 +250 +139 +73 +247 +143 +74 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +247 +143 +74 +247 +143 +74 +247 +143 +74 +247 +143 +74 +247 +150 +84 +249 +159 +103 +249 +174 +124 +252 +185 +144 +250 +200 +166 +217 +187 +166 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +251 +192 +154 +249 +174 +124 +246 +156 +93 +247 +143 +74 +248 +138 +64 +247 +130 +60 +247 +130 +60 +248 +138 +64 +250 +139 +73 +247 +143 +74 +249 +146 +83 +247 +150 +84 +249 +146 +83 +249 +146 +83 +247 +143 +74 +248 +138 +64 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +130 +60 +250 +139 +73 +247 +150 +84 +251 +168 +115 +249 +189 +146 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +187 +166 +150 +253 +212 +188 +250 +197 +158 +248 +180 +134 +251 +168 +115 +249 +159 +103 +247 +150 +84 +247 +143 +74 +250 +139 +73 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +53 +248 +138 +64 +250 +139 +73 +247 +143 +74 +249 +146 +83 +247 +150 +84 +247 +150 +84 +249 +146 +83 +247 +143 +74 +250 +139 +73 +247 +130 +60 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +109 +10 +246 +109 +10 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +53 +247 +130 +60 +248 +138 +64 +247 +143 +74 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +247 +143 +74 +247 +143 +74 +247 +143 +74 +250 +139 +73 +250 +139 +73 +250 +139 +73 +248 +138 +64 +248 +138 +64 +248 +138 +64 +248 +138 +64 +248 +138 +64 +248 +138 +64 +250 +139 +73 +250 +139 +73 +250 +139 +73 +250 +139 +73 +247 +143 +74 +247 +143 +74 +250 +139 +73 +250 +139 +73 +248 +138 +64 +248 +138 +64 +247 +130 +60 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +60 +247 +130 +60 +248 +138 +64 +250 +139 +73 +247 +143 +74 +247 +150 +84 +249 +159 +103 +251 +168 +115 +248 +180 +134 +250 +197 +158 +253 +212 +188 +207 +178 +158 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +249 +189 +146 +247 +165 +111 +247 +143 +74 +247 +130 +53 +246 +116 +28 +246 +109 +10 +247 +103 +7 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +111 +26 +247 +118 +39 +247 +123 +41 +247 +130 +53 +247 +130 +60 +250 +139 +73 +247 +143 +74 +249 +146 +83 +247 +150 +84 +247 +150 +84 +249 +146 +83 +247 +143 +74 +250 +139 +73 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +118 +39 +247 +118 +39 +247 +118 +39 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +248 +138 +64 +248 +138 +64 +250 +139 +73 +250 +139 +73 +247 +143 +74 +247 +143 +74 +250 +139 +73 +250 +139 +73 +248 +138 +64 +247 +130 +60 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +60 +248 +138 +64 +250 +139 +73 +247 +143 +74 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +249 +146 +83 +247 +143 +74 +247 +143 +74 +250 +139 +73 +250 +139 +73 +248 +138 +64 +247 +130 +60 +247 +130 +53 +247 +123 +41 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +249 +159 +103 +252 +185 +144 +139 +115 +96 +35 +31 +30 +129 +106 +52 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +117 +98 +55 +35 +31 +30 +152 +119 +47 +168 +127 +42 +168 +127 +42 +160 +120 +43 +168 +127 +42 +171 +129 +45 +152 +119 +47 +216 +194 +154 +224 +207 +180 +160 +120 +43 +160 +120 +43 +137 +110 +49 +102 +91 +75 +35 +31 +30 +115 +102 +92 +250 +200 +166 +250 +176 +132 +249 +159 +103 +249 +146 +83 +247 +130 +60 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +116 +28 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +236 +186 +153 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +255 +215 +190 +255 +215 +190 +253 +204 +176 +250 +197 +158 +252 +185 +144 +249 +174 +124 +251 +168 +115 +249 +159 +103 +246 +156 +93 +247 +150 +84 +250 +139 +73 +247 +130 +60 +247 +130 +53 +247 +123 +41 +247 +118 +39 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +53 +248 +138 +64 +249 +146 +83 +249 +152 +92 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +249 +159 +103 +247 +150 +84 +247 +143 +74 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +246 +116 +28 +246 +116 +28 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +60 +250 +139 +73 +249 +146 +83 +249 +152 +92 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +247 +165 +111 +247 +165 +111 +249 +159 +103 +249 +159 +103 +246 +156 +93 +247 +150 +84 +249 +146 +83 +247 +143 +74 +248 +138 +64 +247 +130 +60 +247 +130 +60 +247 +130 +60 +248 +138 +64 +250 +139 +73 +249 +146 +83 +249 +152 +92 +249 +159 +103 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +247 +165 +111 +249 +159 +103 +247 +165 +111 +251 +168 +115 +250 +176 +132 +252 +185 +144 +250 +200 +166 +255 +215 +190 +217 +187 +166 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +137 +127 +115 +250 +200 +166 +250 +176 +132 +247 +165 +111 +249 +152 +92 +247 +150 +84 +249 +146 +83 +247 +150 +84 +249 +152 +92 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +249 +159 +103 +246 +156 +93 +247 +150 +84 +247 +143 +74 +250 +139 +73 +247 +143 +74 +249 +146 +83 +249 +159 +103 +249 +174 +124 +251 +192 +154 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +173 +106 +60 +51 +62 +63 +187 +166 +150 +255 +215 +190 +253 +212 +188 +250 +200 +166 +249 +189 +146 +248 +180 +134 +249 +174 +124 +247 +165 +111 +249 +159 +103 +249 +152 +92 +247 +143 +74 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +246 +116 +28 +247 +111 +26 +246 +116 +28 +247 +118 +39 +247 +123 +41 +247 +130 +53 +248 +138 +64 +247 +143 +74 +249 +152 +92 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +249 +159 +103 +249 +152 +92 +247 +143 +74 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +53 +248 +138 +64 +247 +143 +74 +247 +150 +84 +249 +159 +103 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +247 +165 +111 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +246 +156 +93 +246 +156 +93 +246 +156 +93 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +152 +92 +249 +152 +92 +247 +150 +84 +249 +146 +83 +249 +146 +83 +249 +146 +83 +247 +150 +84 +249 +152 +92 +246 +156 +93 +249 +159 +103 +247 +165 +111 +249 +174 +124 +250 +176 +132 +249 +189 +146 +250 +200 +166 +253 +212 +188 +255 +215 +190 +207 +178 +158 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +249 +189 +146 +247 +165 +111 +247 +143 +74 +247 +130 +53 +246 +116 +28 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +53 +248 +138 +64 +247 +143 +74 +247 +150 +84 +249 +159 +103 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +249 +159 +103 +249 +152 +92 +249 +146 +83 +250 +139 +73 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +60 +248 +138 +64 +247 +143 +74 +249 +146 +83 +249 +152 +92 +246 +156 +93 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +249 +159 +103 +246 +156 +93 +249 +152 +92 +247 +150 +84 +249 +146 +83 +247 +143 +74 +247 +143 +74 +247 +143 +74 +249 +146 +83 +247 +150 +84 +246 +156 +93 +249 +159 +103 +247 +165 +111 +247 +165 +111 +251 +168 +115 +251 +168 +115 +251 +168 +115 +247 +165 +111 +247 +165 +111 +247 +165 +111 +249 +159 +103 +249 +159 +103 +246 +156 +93 +247 +150 +84 +247 +143 +74 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +103 +7 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +236 +186 +153 +47 +40 +38 +59 +50 +39 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +47 +40 +38 +108 +87 +46 +168 +127 +42 +111 +94 +57 +76 +70 +64 +59 +50 +39 +101 +83 +47 +160 +120 +43 +170 +137 +67 +253 +255 +252 +195 +167 +113 +145 +114 +49 +69 +69 +61 +120 +114 +108 +35 +31 +30 +47 +40 +38 +217 +187 +166 +250 +197 +158 +250 +176 +132 +249 +159 +103 +249 +146 +83 +248 +138 +64 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +130 +53 +250 +139 +73 +246 +156 +93 +250 +176 +132 +232 +190 +161 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +255 +215 +190 +255 +215 +190 +245 +212 +186 +227 +196 +175 +212 +173 +150 +209 +171 +139 +219 +170 +138 +240 +181 +138 +250 +176 +132 +251 +168 +115 +249 +159 +103 +247 +150 +84 +250 +139 +73 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +130 +53 +247 +130 +53 +248 +138 +64 +249 +146 +83 +246 +156 +93 +247 +165 +111 +249 +174 +124 +248 +180 +134 +240 +181 +138 +219 +170 +138 +203 +161 +131 +203 +161 +131 +219 +170 +138 +240 +181 +138 +250 +176 +132 +249 +174 +124 +249 +159 +103 +249 +152 +92 +247 +143 +74 +247 +130 +60 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +53 +248 +138 +64 +249 +146 +83 +246 +156 +93 +247 +165 +111 +249 +174 +124 +245 +179 +138 +230 +173 +136 +203 +161 +131 +203 +161 +131 +219 +170 +138 +239 +182 +144 +251 +192 +154 +249 +189 +146 +252 +185 +144 +252 +185 +144 +248 +180 +134 +245 +169 +119 +234 +168 +124 +247 +165 +111 +249 +159 +103 +249 +152 +92 +247 +150 +84 +247 +150 +84 +247 +150 +84 +249 +152 +92 +249 +159 +103 +247 +165 +111 +249 +174 +124 +248 +180 +134 +230 +173 +136 +219 +170 +138 +203 +161 +131 +209 +171 +139 +239 +182 +144 +251 +192 +154 +249 +189 +146 +249 +189 +146 +252 +185 +144 +252 +185 +144 +249 +189 +146 +236 +186 +153 +250 +200 +166 +255 +215 +190 +255 +215 +190 +217 +187 +166 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +137 +127 +115 +253 +204 +176 +252 +185 +144 +249 +174 +124 +247 +165 +111 +247 +165 +111 +247 +165 +111 +251 +168 +115 +249 +174 +124 +248 +180 +134 +230 +173 +136 +219 +170 +138 +203 +161 +131 +209 +171 +139 +230 +173 +136 +245 +179 +138 +250 +176 +132 +251 +168 +115 +249 +159 +103 +249 +159 +103 +246 +156 +93 +249 +159 +103 +251 +168 +115 +248 +180 +134 +250 +197 +158 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +173 +106 +60 +51 +62 +63 +187 +166 +150 +255 +215 +190 +255 +215 +190 +234 +204 +183 +207 +178 +158 +209 +171 +139 +209 +171 +139 +230 +173 +136 +248 +180 +134 +249 +174 +124 +247 +165 +111 +249 +152 +92 +247 +143 +74 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +130 +53 +248 +138 +64 +247 +143 +74 +249 +152 +92 +247 +165 +111 +249 +174 +124 +248 +180 +134 +240 +181 +138 +219 +170 +138 +203 +161 +131 +203 +161 +131 +219 +170 +138 +240 +181 +138 +248 +180 +134 +249 +174 +124 +247 +165 +111 +249 +152 +92 +247 +143 +74 +248 +138 +64 +247 +130 +53 +247 +123 +41 +247 +123 +41 +247 +123 +41 +247 +130 +53 +247 +130 +60 +247 +143 +74 +249 +152 +92 +249 +159 +103 +249 +174 +124 +250 +176 +132 +240 +181 +138 +219 +170 +138 +203 +161 +131 +203 +161 +131 +230 +173 +136 +251 +192 +154 +249 +189 +146 +249 +189 +146 +252 +185 +144 +252 +185 +144 +248 +180 +134 +234 +168 +124 +250 +176 +132 +248 +180 +134 +250 +176 +132 +250 +176 +132 +250 +176 +132 +248 +180 +134 +248 +180 +134 +230 +173 +136 +240 +181 +138 +252 +185 +144 +252 +185 +144 +252 +185 +144 +252 +185 +144 +248 +180 +134 +234 +168 +124 +234 +168 +124 +249 +174 +124 +251 +168 +115 +247 +165 +111 +247 +165 +111 +247 +165 +111 +251 +168 +115 +249 +174 +124 +250 +176 +132 +248 +180 +134 +230 +173 +136 +219 +170 +138 +209 +171 +139 +207 +178 +158 +227 +196 +175 +253 +212 +188 +255 +215 +190 +217 +187 +166 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +249 +189 +146 +247 +165 +111 +247 +143 +74 +247 +130 +53 +246 +116 +28 +247 +111 +26 +246 +109 +10 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +247 +143 +74 +249 +152 +92 +249 +159 +103 +249 +174 +124 +248 +180 +134 +240 +181 +138 +219 +170 +138 +203 +161 +131 +203 +161 +131 +219 +170 +138 +240 +181 +138 +248 +180 +134 +249 +174 +124 +247 +165 +111 +249 +159 +103 +247 +150 +84 +249 +146 +83 +247 +143 +74 +247 +143 +74 +249 +146 +83 +249 +152 +92 +249 +159 +103 +247 +165 +111 +234 +168 +124 +234 +168 +124 +248 +180 +134 +252 +185 +144 +252 +185 +144 +252 +185 +144 +248 +180 +134 +250 +176 +132 +234 +168 +124 +249 +174 +124 +251 +168 +115 +247 +165 +111 +247 +165 +111 +249 +159 +103 +247 +165 +111 +251 +168 +115 +249 +174 +124 +250 +176 +132 +248 +180 +134 +230 +173 +136 +203 +161 +131 +203 +161 +131 +219 +170 +138 +239 +182 +144 +251 +192 +154 +249 +189 +146 +252 +185 +144 +252 +185 +144 +248 +180 +134 +234 +168 +124 +238 +159 +107 +247 +165 +111 +249 +152 +92 +247 +143 +74 +247 +130 +60 +247 +123 +41 +246 +116 +28 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +246 +116 +28 +247 +130 +53 +247 +143 +74 +247 +165 +111 +252 +185 +144 +154 +133 +118 +24 +22 +23 +108 +87 +46 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +71 +60 +43 +85 +71 +43 +101 +83 +47 +89 +84 +82 +152 +147 +147 +24 +22 +23 +24 +22 +23 +108 +87 +46 +168 +127 +42 +224 +207 +180 +253 +255 +252 +209 +171 +139 +101 +83 +47 +24 +22 +23 +35 +31 +30 +35 +31 +30 +167 +142 +123 +253 +212 +188 +250 +197 +158 +248 +180 +134 +247 +165 +111 +247 +150 +84 +250 +139 +73 +247 +130 +60 +247 +130 +60 +248 +138 +64 +249 +146 +83 +249 +159 +103 +250 +176 +132 +232 +190 +161 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +97 +98 +96 +217 +187 +166 +137 +127 +115 +91 +92 +89 +55 +66 +67 +48 +58 +59 +48 +58 +59 +55 +66 +67 +84 +85 +82 +133 +120 +107 +209 +171 +139 +248 +180 +134 +251 +168 +115 +249 +159 +103 +247 +150 +84 +247 +143 +74 +250 +139 +73 +250 +139 +73 +249 +146 +83 +249 +152 +92 +247 +165 +111 +249 +174 +124 +245 +179 +138 +178 +146 +122 +124 +111 +99 +76 +78 +76 +51 +62 +63 +48 +58 +59 +48 +58 +59 +58 +69 +70 +91 +92 +89 +144 +125 +110 +203 +161 +131 +248 +180 +134 +249 +174 +124 +249 +159 +103 +247 +150 +84 +247 +143 +74 +248 +138 +64 +248 +138 +64 +250 +139 +73 +249 +146 +83 +246 +156 +93 +247 +165 +111 +250 +176 +132 +230 +173 +136 +154 +133 +118 +101 +100 +92 +58 +69 +70 +48 +58 +59 +48 +58 +59 +51 +62 +63 +84 +85 +82 +137 +127 +115 +217 +187 +166 +253 +212 +188 +227 +196 +175 +144 +125 +110 +89 +84 +82 +81 +77 +76 +115 +102 +92 +210 +156 +119 +249 +174 +124 +251 +168 +115 +251 +168 +115 +251 +168 +115 +249 +174 +124 +250 +176 +132 +252 +185 +144 +195 +157 +134 +124 +111 +99 +76 +78 +76 +51 +62 +63 +48 +58 +59 +48 +58 +59 +70 +79 +77 +120 +114 +108 +187 +166 +150 +253 +212 +188 +253 +212 +188 +172 +150 +134 +101 +100 +92 +77 +85 +81 +101 +100 +92 +176 +156 +141 +255 +215 +190 +217 +187 +166 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +253 +212 +188 +250 +197 +158 +252 +185 +144 +248 +180 +134 +248 +180 +134 +252 +185 +144 +239 +182 +144 +167 +142 +123 +109 +106 +99 +70 +79 +77 +48 +58 +59 +48 +58 +59 +48 +58 +59 +58 +69 +70 +91 +92 +89 +150 +125 +114 +219 +170 +138 +248 +180 +134 +249 +174 +124 +249 +174 +124 +249 +174 +124 +250 +176 +132 +249 +189 +146 +253 +204 +176 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +183 +110 +59 +51 +62 +63 +176 +156 +141 +187 +166 +150 +109 +106 +99 +63 +74 +74 +43 +57 +62 +43 +57 +62 +43 +57 +62 +63 +74 +74 +109 +106 +99 +178 +146 +122 +245 +179 +138 +249 +174 +124 +249 +159 +103 +247 +150 +84 +247 +143 +74 +248 +138 +64 +248 +138 +64 +248 +138 +64 +247 +143 +74 +247 +150 +84 +249 +159 +103 +249 +174 +124 +252 +185 +144 +195 +157 +134 +124 +111 +99 +77 +85 +81 +51 +62 +63 +41 +58 +57 +43 +57 +62 +51 +62 +63 +77 +85 +81 +124 +111 +99 +195 +157 +134 +252 +185 +144 +249 +174 +124 +249 +159 +103 +247 +150 +84 +247 +143 +74 +248 +138 +64 +247 +130 +60 +248 +138 +64 +250 +139 +73 +247 +150 +84 +249 +159 +103 +251 +168 +115 +248 +180 +134 +203 +161 +131 +124 +111 +99 +77 +85 +81 +48 +58 +59 +43 +57 +62 +43 +57 +62 +63 +74 +74 +109 +106 +99 +187 +166 +150 +253 +212 +188 +253 +212 +188 +187 +166 +150 +109 +106 +99 +77 +85 +81 +84 +85 +82 +150 +125 +114 +232 +190 +161 +253 +204 +176 +253 +204 +176 +172 +150 +134 +101 +100 +92 +77 +85 +81 +91 +92 +89 +137 +127 +115 +227 +196 +175 +253 +212 +188 +186 +157 +134 +109 +106 +99 +77 +85 +81 +84 +85 +82 +124 +111 +99 +219 +170 +138 +249 +189 +146 +249 +189 +146 +249 +189 +146 +251 +192 +154 +250 +197 +158 +186 +157 +134 +109 +106 +99 +70 +79 +77 +43 +57 +62 +43 +57 +62 +41 +58 +57 +63 +74 +74 +101 +100 +92 +176 +156 +141 +194 +173 +157 +55 +66 +67 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +249 +189 +146 +247 +165 +111 +247 +143 +74 +247 +130 +53 +247 +118 +39 +247 +111 +26 +246 +109 +10 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +249 +146 +83 +249 +159 +103 +249 +174 +124 +252 +185 +144 +203 +161 +131 +133 +120 +107 +84 +85 +82 +55 +66 +67 +43 +57 +62 +41 +58 +57 +51 +62 +63 +77 +85 +81 +124 +111 +99 +178 +146 +122 +239 +182 +144 +250 +176 +132 +249 +174 +124 +247 +165 +111 +249 +159 +103 +249 +159 +103 +247 +165 +111 +249 +174 +124 +210 +156 +119 +124 +111 +99 +77 +85 +81 +77 +85 +81 +109 +106 +99 +194 +173 +157 +253 +212 +188 +217 +187 +166 +133 +120 +107 +89 +84 +82 +76 +78 +76 +101 +100 +92 +178 +146 +122 +249 +189 +146 +252 +185 +144 +252 +185 +144 +252 +185 +144 +251 +192 +154 +236 +186 +153 +167 +142 +123 +101 +100 +92 +63 +74 +74 +41 +58 +57 +43 +57 +62 +51 +62 +63 +77 +85 +81 +137 +127 +115 +217 +187 +166 +253 +212 +188 +227 +196 +175 +144 +125 +110 +84 +85 +82 +76 +78 +76 +115 +102 +92 +204 +141 +99 +249 +159 +103 +247 +143 +74 +247 +130 +60 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +250 +197 +158 +82 +69 +65 +47 +40 +38 +152 +119 +47 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +101 +83 +47 +59 +50 +39 +101 +83 +47 +24 +22 +23 +35 +31 +30 +24 +22 +23 +24 +22 +23 +108 +87 +46 +168 +127 +42 +195 +167 +113 +253 +255 +252 +253 +255 +252 +239 +227 +208 +186 +157 +134 +162 +125 +96 +105 +93 +60 +47 +40 +38 +150 +125 +114 +217 +187 +166 +250 +200 +166 +252 +185 +144 +251 +168 +115 +246 +156 +93 +249 +146 +83 +247 +143 +74 +249 +146 +83 +249 +152 +92 +247 +165 +111 +252 +185 +144 +232 +190 +161 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +55 +66 +67 +58 +69 +70 +56 +64 +60 +83 +78 +61 +105 +93 +60 +117 +98 +55 +117 +98 +55 +105 +93 +60 +83 +78 +61 +56 +64 +60 +55 +66 +67 +144 +125 +110 +239 +182 +144 +250 +176 +132 +247 +165 +111 +249 +159 +103 +246 +156 +93 +249 +159 +103 +247 +165 +111 +249 +174 +124 +252 +185 +144 +195 +157 +134 +89 +84 +82 +48 +58 +59 +63 +69 +60 +95 +87 +59 +111 +94 +57 +123 +102 +54 +117 +98 +55 +105 +93 +60 +83 +78 +61 +56 +64 +60 +51 +62 +63 +124 +111 +99 +219 +170 +138 +248 +180 +134 +251 +168 +115 +249 +159 +103 +249 +152 +92 +249 +152 +92 +246 +156 +93 +247 +165 +111 +249 +174 +124 +252 +185 +144 +167 +142 +123 +70 +79 +77 +51 +62 +63 +75 +74 +61 +100 +89 +56 +117 +98 +55 +123 +102 +54 +105 +93 +60 +83 +78 +61 +51 +62 +63 +63 +74 +74 +172 +150 +134 +109 +106 +99 +51 +62 +63 +83 +78 +61 +95 +87 +59 +65 +67 +64 +65 +67 +64 +209 +171 +139 +249 +189 +146 +249 +189 +146 +249 +189 +146 +250 +197 +158 +212 +173 +150 +109 +106 +99 +48 +58 +59 +63 +69 +60 +95 +87 +59 +111 +94 +57 +123 +102 +54 +117 +98 +55 +95 +87 +59 +62 +63 +61 +48 +58 +59 +137 +127 +115 +146 +135 +124 +48 +58 +59 +75 +74 +61 +95 +87 +59 +75 +74 +61 +48 +58 +59 +161 +144 +134 +217 +187 +166 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +255 +215 +190 +251 +209 +178 +250 +200 +166 +250 +200 +166 +250 +200 +166 +172 +150 +134 +77 +85 +81 +48 +58 +59 +69 +69 +61 +95 +87 +59 +111 +94 +57 +123 +102 +54 +117 +98 +55 +100 +89 +56 +75 +74 +61 +56 +64 +60 +55 +66 +67 +133 +120 +107 +236 +186 +153 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +253 +212 +188 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +173 +106 +60 +51 +62 +63 +63 +74 +74 +48 +58 +59 +76 +70 +64 +118 +86 +65 +146 +97 +64 +155 +100 +63 +146 +97 +64 +118 +86 +65 +76 +70 +64 +43 +57 +62 +91 +92 +89 +203 +161 +131 +248 +180 +134 +251 +168 +115 +249 +159 +103 +249 +152 +92 +247 +150 +84 +249 +152 +92 +249 +159 +103 +251 +168 +115 +248 +180 +134 +209 +171 +139 +101 +100 +92 +43 +57 +62 +69 +69 +61 +106 +82 +65 +135 +94 +64 +155 +100 +63 +155 +100 +63 +135 +94 +64 +106 +82 +65 +65 +67 +64 +43 +57 +62 +101 +100 +92 +209 +171 +139 +248 +180 +134 +251 +168 +115 +249 +159 +103 +249 +152 +92 +247 +150 +84 +247 +150 +84 +246 +156 +93 +247 +165 +111 +250 +176 +132 +219 +170 +138 +124 +111 +99 +48 +58 +59 +62 +63 +61 +106 +82 +65 +139 +96 +61 +155 +100 +63 +146 +97 +64 +125 +90 +64 +76 +70 +64 +41 +58 +57 +120 +114 +108 +172 +150 +134 +51 +62 +63 +69 +69 +61 +112 +85 +63 +95 +78 +64 +51 +62 +63 +120 +114 +108 +245 +212 +186 +146 +135 +124 +43 +57 +62 +81 +73 +62 +118 +86 +65 +95 +78 +64 +56 +64 +60 +101 +100 +92 +133 +120 +107 +43 +57 +62 +76 +70 +64 +112 +85 +63 +106 +82 +65 +62 +63 +61 +77 +85 +81 +227 +196 +175 +253 +212 +188 +253 +212 +188 +217 +187 +166 +109 +106 +99 +41 +58 +57 +69 +69 +61 +112 +85 +63 +139 +96 +61 +155 +100 +63 +146 +97 +64 +118 +86 +65 +81 +73 +62 +48 +58 +59 +58 +69 +70 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +249 +146 +83 +247 +130 +53 +247 +118 +39 +247 +111 +26 +247 +111 +26 +246 +116 +28 +247 +123 +41 +248 +138 +64 +249 +146 +83 +249 +159 +103 +250 +176 +132 +219 +170 +138 +124 +111 +99 +43 +57 +62 +62 +63 +61 +106 +82 +65 +135 +94 +64 +155 +100 +63 +155 +100 +63 +139 +96 +61 +106 +82 +65 +69 +69 +61 +43 +57 +62 +91 +92 +89 +195 +157 +134 +251 +192 +154 +252 +185 +144 +248 +180 +134 +248 +180 +134 +252 +185 +144 +203 +161 +131 +63 +74 +74 +62 +63 +61 +106 +82 +65 +112 +85 +63 +69 +69 +61 +55 +66 +67 +146 +135 +124 +63 +74 +74 +56 +64 +60 +95 +78 +64 +112 +85 +63 +76 +70 +64 +48 +58 +59 +172 +150 +134 +253 +204 +176 +251 +209 +178 +251 +209 +178 +187 +166 +150 +77 +85 +81 +48 +58 +59 +81 +73 +62 +125 +90 +64 +146 +97 +64 +155 +100 +63 +139 +96 +61 +95 +78 +64 +56 +64 +60 +58 +69 +70 +161 +144 +134 +109 +106 +99 +51 +62 +63 +95 +78 +64 +112 +85 +63 +65 +67 +64 +65 +67 +64 +204 +141 +99 +246 +156 +93 +250 +139 +73 +247 +130 +53 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +246 +116 +28 +247 +130 +53 +247 +143 +74 +249 +159 +103 +252 +185 +144 +209 +171 +139 +24 +22 +23 +85 +71 +43 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +137 +110 +49 +47 +40 +38 +137 +110 +49 +101 +83 +47 +59 +50 +39 +59 +50 +39 +101 +83 +47 +158 +125 +46 +160 +120 +43 +192 +155 +91 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +237 +233 +225 +152 +147 +147 +81 +77 +76 +55 +48 +48 +115 +102 +92 +212 +173 +150 +251 +192 +154 +249 +174 +124 +247 +165 +111 +249 +159 +103 +249 +159 +103 +247 +165 +111 +249 +174 +124 +249 +189 +146 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +43 +57 +62 +95 +87 +59 +145 +114 +49 +168 +127 +42 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +145 +114 +49 +95 +87 +59 +48 +58 +59 +109 +106 +99 +236 +186 +153 +252 +185 +144 +248 +180 +134 +250 +176 +132 +250 +176 +132 +252 +185 +144 +251 +192 +154 +150 +125 +114 +48 +58 +59 +69 +69 +61 +117 +98 +55 +158 +125 +46 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +152 +119 +47 +100 +89 +56 +56 +64 +60 +63 +74 +74 +186 +157 +134 +249 +189 +146 +248 +180 +134 +249 +174 +124 +249 +174 +124 +250 +176 +132 +252 +185 +144 +251 +192 +154 +133 +120 +107 +48 +58 +59 +75 +74 +61 +137 +110 +49 +168 +127 +42 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +145 +114 +49 +75 +74 +61 +43 +57 +62 +51 +62 +63 +123 +102 +54 +171 +129 +45 +171 +129 +45 +145 +114 +49 +56 +64 +60 +133 +120 +107 +253 +212 +188 +251 +209 +178 +253 +212 +188 +194 +173 +157 +63 +74 +74 +56 +64 +60 +111 +94 +57 +158 +125 +46 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +158 +125 +46 +105 +93 +60 +51 +62 +63 +43 +57 +62 +88 +82 +59 +168 +127 +42 +171 +129 +45 +168 +127 +42 +88 +82 +59 +63 +74 +74 +187 +166 +150 +55 +66 +67 +111 +94 +57 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +133 +120 +107 +48 +58 +59 +75 +74 +61 +129 +106 +52 +158 +125 +46 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +171 +129 +45 +168 +127 +42 +145 +114 +49 +95 +87 +59 +51 +62 +63 +77 +85 +81 +212 +173 +150 +253 +204 +176 +253 +204 +176 +251 +209 +178 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +41 +58 +57 +69 +69 +61 +155 +100 +63 +214 +121 +50 +234 +126 +45 +234 +126 +45 +234 +126 +45 +234 +126 +45 +234 +126 +45 +224 +123 +55 +155 +100 +63 +69 +69 +61 +51 +62 +63 +178 +146 +122 +249 +189 +146 +250 +176 +132 +251 +168 +115 +251 +168 +115 +249 +174 +124 +250 +176 +132 +249 +189 +146 +167 +142 +123 +55 +66 +67 +65 +67 +64 +146 +97 +64 +212 +120 +56 +234 +126 +45 +234 +125 +52 +234 +126 +45 +234 +125 +52 +234 +126 +45 +234 +125 +52 +209 +117 +53 +146 +97 +64 +65 +67 +64 +55 +66 +67 +178 +146 +122 +249 +189 +146 +250 +176 +132 +251 +168 +115 +247 +165 +111 +251 +168 +115 +249 +174 +124 +252 +185 +144 +203 +161 +131 +63 +74 +74 +56 +64 +60 +125 +90 +64 +209 +117 +53 +234 +126 +45 +234 +126 +45 +234 +125 +52 +234 +126 +45 +234 +126 +45 +214 +121 +50 +146 +97 +64 +56 +64 +60 +41 +58 +57 +81 +73 +62 +209 +117 +53 +234 +126 +45 +234 +126 +45 +125 +90 +64 +51 +62 +63 +176 +156 +141 +55 +66 +67 +106 +82 +65 +225 +124 +48 +234 +126 +45 +234 +126 +45 +146 +97 +64 +41 +58 +57 +43 +57 +62 +125 +90 +64 +214 +121 +50 +234 +126 +45 +234 +126 +45 +183 +110 +59 +56 +64 +60 +137 +127 +115 +255 +215 +190 +194 +173 +157 +63 +74 +74 +62 +63 +61 +146 +97 +64 +214 +121 +50 +234 +125 +52 +234 +126 +45 +234 +125 +52 +234 +125 +52 +234 +126 +45 +225 +124 +48 +173 +106 +60 +81 +73 +62 +35 +56 +60 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +249 +146 +83 +247 +130 +53 +247 +118 +39 +246 +116 +28 +246 +116 +28 +247 +123 +41 +247 +130 +60 +249 +146 +83 +247 +165 +111 +248 +180 +134 +186 +157 +134 +58 +69 +70 +56 +64 +60 +135 +94 +64 +199 +115 +54 +234 +125 +52 +234 +126 +45 +234 +125 +52 +234 +125 +52 +234 +126 +45 +234 +125 +52 +212 +120 +56 +155 +100 +63 +76 +70 +64 +51 +62 +63 +146 +135 +124 +251 +209 +178 +253 +204 +176 +250 +200 +166 +253 +204 +176 +101 +100 +92 +69 +69 +61 +194 +112 +58 +234 +126 +45 +234 +126 +45 +199 +115 +54 +65 +67 +64 +35 +56 +60 +81 +73 +62 +194 +112 +58 +234 +125 +52 +234 +126 +45 +214 +121 +50 +95 +78 +64 +63 +74 +74 +238 +205 +179 +255 +215 +190 +161 +144 +134 +43 +57 +62 +81 +73 +62 +173 +106 +60 +225 +124 +48 +234 +126 +45 +234 +126 +45 +234 +125 +52 +234 +126 +45 +234 +126 +45 +194 +112 +58 +95 +78 +64 +41 +58 +57 +48 +58 +59 +155 +100 +63 +234 +126 +45 +234 +126 +45 +199 +115 +54 +69 +69 +61 +99 +90 +79 +251 +168 +115 +247 +150 +84 +247 +130 +60 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +60 +247 +150 +84 +249 +174 +124 +251 +192 +154 +124 +111 +99 +35 +31 +30 +137 +110 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +47 +40 +38 +108 +87 +46 +175 +132 +40 +161 +127 +40 +168 +127 +42 +171 +129 +45 +158 +125 +46 +152 +119 +47 +203 +161 +131 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +186 +181 +179 +89 +84 +82 +47 +40 +38 +139 +115 +96 +236 +186 +153 +252 +185 +144 +250 +176 +132 +249 +174 +124 +250 +176 +132 +252 +185 +144 +250 +197 +158 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +111 +94 +57 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +111 +94 +57 +48 +58 +59 +109 +106 +99 +253 +204 +176 +250 +200 +166 +250 +200 +166 +250 +200 +166 +253 +204 +176 +137 +127 +115 +43 +57 +62 +88 +82 +59 +158 +125 +46 +171 +129 +45 +161 +127 +40 +158 +125 +46 +158 +125 +46 +168 +127 +42 +161 +127 +40 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +145 +114 +49 +69 +69 +61 +51 +62 +63 +187 +166 +150 +250 +200 +166 +250 +197 +158 +251 +192 +154 +250 +197 +158 +253 +204 +176 +133 +120 +107 +48 +58 +59 +95 +87 +59 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +158 +125 +46 +75 +74 +61 +62 +63 +61 +168 +127 +42 +161 +127 +40 +158 +125 +46 +171 +129 +45 +83 +78 +61 +91 +92 +89 +255 +215 +190 +255 +215 +190 +207 +178 +158 +58 +69 +70 +63 +69 +60 +145 +114 +49 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +105 +93 +60 +43 +57 +62 +137 +110 +49 +171 +129 +45 +158 +125 +46 +171 +129 +45 +137 +110 +49 +51 +62 +63 +146 +135 +124 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +152 +119 +47 +65 +67 +64 +137 +127 +115 +255 +215 +190 +255 +215 +190 +245 +212 +186 +120 +114 +108 +48 +58 +59 +100 +89 +56 +168 +127 +42 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +129 +106 +52 +61 +67 +58 +63 +74 +74 +207 +178 +158 +255 +215 +190 +255 +215 +190 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +95 +78 +64 +209 +117 +53 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +209 +117 +53 +89 +75 +66 +51 +62 +63 +187 +166 +150 +250 +197 +158 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +161 +144 +134 +41 +58 +57 +95 +78 +64 +199 +115 +54 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +199 +115 +54 +89 +75 +66 +41 +58 +57 +167 +142 +123 +250 +200 +166 +251 +192 +154 +252 +185 +144 +249 +189 +146 +250 +197 +158 +212 +173 +150 +63 +74 +74 +69 +69 +61 +183 +110 +59 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +163 +104 +61 +41 +58 +57 +135 +94 +64 +234 +126 +45 +224 +123 +55 +234 +125 +52 +188 +112 +56 +51 +62 +63 +109 +106 +99 +51 +62 +63 +188 +112 +56 +234 +126 +45 +224 +123 +55 +234 +125 +52 +188 +112 +56 +43 +57 +62 +112 +85 +63 +234 +126 +45 +227 +126 +50 +224 +123 +55 +227 +126 +50 +234 +126 +45 +95 +78 +64 +109 +106 +99 +217 +187 +166 +58 +69 +70 +69 +69 +61 +188 +112 +56 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +214 +121 +50 +95 +78 +64 +146 +97 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +249 +146 +83 +247 +130 +53 +247 +123 +41 +247 +118 +39 +247 +123 +41 +247 +130 +53 +247 +143 +74 +249 +159 +103 +250 +176 +132 +186 +157 +134 +51 +62 +63 +81 +73 +62 +188 +112 +56 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +212 +120 +56 +106 +82 +65 +41 +58 +57 +146 +135 +124 +255 +215 +190 +255 +215 +190 +234 +204 +183 +63 +74 +74 +125 +90 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +234 +125 +52 +89 +75 +66 +62 +63 +61 +199 +115 +54 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +163 +104 +61 +48 +58 +59 +217 +187 +166 +172 +150 +134 +41 +58 +57 +106 +82 +65 +214 +121 +50 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +225 +124 +48 +81 +73 +62 +69 +69 +61 +227 +126 +50 +227 +126 +50 +224 +123 +55 +238 +123 +45 +125 +90 +64 +55 +66 +67 +250 +176 +132 +246 +156 +93 +250 +139 +73 +247 +123 +41 +247 +111 +26 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +250 +139 +73 +249 +159 +103 +248 +180 +134 +232 +190 +161 +47 +40 +38 +71 +60 +43 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +71 +60 +43 +71 +60 +43 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +160 +120 +43 +170 +137 +67 +237 +233 +225 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +186 +181 +179 +74 +68 +68 +89 +75 +66 +212 +173 +150 +250 +197 +158 +251 +192 +154 +249 +189 +146 +251 +192 +154 +253 +204 +176 +234 +204 +183 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +152 +119 +47 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +111 +94 +57 +48 +58 +59 +161 +144 +134 +255 +215 +190 +255 +215 +190 +255 +215 +190 +172 +150 +134 +48 +58 +59 +95 +87 +59 +168 +127 +42 +168 +127 +42 +158 +125 +46 +161 +127 +40 +171 +129 +45 +158 +125 +46 +152 +119 +47 +152 +119 +47 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +152 +119 +47 +69 +69 +61 +58 +69 +70 +217 +187 +166 +255 +215 +190 +255 +215 +190 +255 +215 +190 +172 +150 +134 +43 +57 +62 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +171 +129 +45 +171 +129 +45 +158 +125 +46 +168 +127 +42 +137 +110 +49 +83 +78 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +84 +85 +82 +255 +215 +190 +238 +205 +179 +84 +85 +82 +62 +63 +61 +145 +114 +49 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +161 +127 +40 +158 +125 +46 +88 +82 +59 +152 +119 +47 +161 +127 +40 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +152 +119 +47 +63 +69 +60 +137 +127 +115 +255 +215 +190 +255 +215 +190 +137 +127 +115 +48 +58 +59 +105 +93 +60 +171 +129 +45 +161 +127 +40 +158 +125 +46 +168 +127 +42 +168 +127 +42 +158 +125 +46 +152 +119 +47 +152 +119 +47 +168 +127 +42 +171 +129 +45 +158 +125 +46 +158 +125 +46 +171 +129 +45 +145 +114 +49 +62 +63 +61 +70 +79 +77 +227 +196 +175 +255 +215 +190 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +212 +120 +56 +214 +121 +50 +227 +126 +50 +224 +123 +55 +227 +126 +50 +234 +126 +45 +234 +126 +45 +234 +125 +52 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +76 +70 +64 +70 +79 +77 +234 +204 +183 +253 +212 +188 +251 +209 +178 +253 +212 +188 +187 +166 +150 +43 +57 +62 +95 +78 +64 +225 +124 +48 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +234 +126 +45 +234 +126 +45 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +214 +121 +50 +95 +78 +64 +48 +58 +59 +194 +173 +157 +253 +212 +188 +251 +209 +178 +251 +209 +178 +245 +212 +186 +91 +92 +89 +62 +63 +61 +188 +112 +56 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +234 +125 +52 +234 +126 +45 +227 +126 +50 +224 +123 +55 +234 +126 +45 +125 +90 +64 +146 +97 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +97 +98 +96 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +224 +123 +55 +212 +120 +56 +183 +110 +59 +214 +121 +50 +227 +126 +50 +224 +123 +55 +227 +126 +50 +227 +126 +50 +234 +126 +45 +95 +78 +64 +84 +85 +82 +91 +92 +89 +62 +63 +61 +188 +112 +56 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +234 +126 +45 +234 +126 +45 +227 +126 +50 +224 +123 +55 +227 +126 +50 +224 +123 +55 +209 +117 +53 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +249 +146 +83 +247 +130 +60 +247 +123 +41 +247 +123 +41 +247 +130 +53 +248 +138 +64 +249 +152 +92 +249 +174 +124 +209 +171 +139 +58 +69 +70 +81 +73 +62 +209 +117 +53 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +234 +125 +52 +234 +125 +52 +234 +125 +52 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +112 +85 +63 +41 +58 +57 +172 +150 +134 +255 +215 +190 +227 +196 +175 +63 +74 +74 +135 +94 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +194 +112 +58 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +238 +128 +40 +163 +104 +61 +55 +66 +67 +161 +144 +134 +58 +69 +70 +95 +78 +64 +225 +124 +48 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +234 +126 +45 +234 +126 +45 +234 +125 +52 +227 +126 +50 +234 +125 +52 +173 +106 +60 +118 +86 +65 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +146 +97 +64 +51 +62 +63 +252 +185 +144 +249 +159 +103 +247 +143 +74 +247 +130 +53 +246 +116 +28 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +249 +146 +83 +251 +168 +115 +251 +192 +154 +154 +133 +118 +24 +22 +23 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +108 +87 +46 +47 +40 +38 +158 +125 +46 +158 +125 +46 +158 +125 +46 +160 +120 +43 +156 +125 +62 +224 +207 +180 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +152 +147 +147 +35 +31 +30 +55 +48 +48 +154 +133 +118 +217 +187 +166 +253 +204 +176 +253 +204 +176 +253 +212 +188 +234 +204 +183 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +158 +125 +46 +168 +127 +42 +158 +125 +46 +123 +102 +54 +105 +93 +60 +111 +94 +57 +129 +106 +52 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +83 +78 +61 +58 +69 +70 +227 +196 +175 +255 +215 +190 +217 +187 +166 +58 +69 +70 +75 +74 +61 +168 +127 +42 +161 +127 +40 +158 +125 +46 +168 +127 +42 +152 +119 +47 +105 +93 +60 +69 +69 +61 +62 +63 +61 +62 +63 +61 +75 +74 +61 +117 +98 +55 +161 +127 +40 +161 +127 +40 +158 +125 +46 +171 +129 +45 +145 +114 +49 +56 +64 +60 +97 +98 +96 +245 +212 +186 +255 +215 +190 +227 +196 +175 +63 +74 +74 +75 +74 +61 +158 +125 +46 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +158 +125 +46 +129 +106 +52 +111 +94 +57 +105 +93 +60 +129 +106 +52 +158 +125 +46 +168 +127 +42 +161 +127 +40 +152 +119 +47 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +84 +85 +82 +255 +215 +190 +161 +144 +134 +48 +58 +59 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +117 +98 +55 +105 +93 +60 +117 +98 +55 +145 +114 +49 +171 +129 +45 +168 +127 +42 +152 +119 +47 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +255 +215 +190 +194 +173 +157 +48 +58 +59 +88 +82 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +152 +119 +47 +95 +87 +59 +69 +69 +61 +62 +63 +61 +62 +63 +61 +83 +78 +61 +123 +102 +54 +168 +127 +42 +161 +127 +40 +158 +125 +46 +171 +129 +45 +129 +106 +52 +51 +62 +63 +120 +114 +108 +255 +215 +190 +255 +215 +190 +161 +144 +134 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +227 +126 +50 +227 +126 +50 +188 +112 +56 +146 +97 +64 +135 +94 +64 +146 +97 +64 +199 +115 +54 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +173 +106 +60 +48 +58 +59 +146 +135 +124 +255 +215 +190 +255 +215 +190 +234 +204 +183 +77 +85 +81 +76 +70 +64 +214 +121 +50 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +214 +121 +50 +163 +104 +61 +135 +94 +64 +135 +94 +64 +163 +104 +61 +224 +123 +55 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +212 +120 +56 +76 +70 +64 +77 +85 +81 +238 +205 +179 +255 +215 +190 +255 +215 +190 +161 +144 +134 +48 +58 +59 +155 +100 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +199 +115 +54 +155 +100 +63 +135 +94 +64 +146 +97 +64 +188 +112 +56 +227 +126 +50 +227 +126 +50 +214 +121 +50 +209 +117 +53 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +125 +52 +227 +126 +50 +224 +123 +55 +227 +126 +50 +227 +126 +50 +199 +115 +54 +125 +90 +64 +51 +62 +63 +55 +66 +67 +41 +58 +57 +146 +97 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +209 +117 +53 +155 +100 +63 +135 +94 +64 +139 +96 +61 +183 +110 +59 +227 +126 +50 +227 +126 +50 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +249 +146 +83 +247 +130 +60 +247 +130 +53 +247 +130 +53 +247 +130 +60 +249 +146 +83 +247 +165 +111 +252 +185 +144 +101 +100 +92 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +173 +106 +60 +135 +94 +64 +135 +94 +64 +163 +104 +61 +214 +121 +50 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +81 +73 +62 +58 +69 +70 +227 +196 +175 +234 +204 +183 +63 +74 +74 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +224 +123 +55 +227 +126 +50 +234 +125 +52 +212 +120 +56 +155 +100 +63 +69 +69 +61 +76 +78 +76 +84 +85 +82 +65 +67 +64 +209 +117 +53 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +183 +110 +59 +139 +96 +61 +135 +94 +64 +155 +100 +63 +209 +117 +53 +234 +125 +52 +224 +123 +55 +212 +120 +56 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +251 +192 +154 +251 +168 +115 +249 +146 +83 +247 +130 +53 +247 +118 +39 +246 +109 +10 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +250 +176 +132 +232 +190 +161 +65 +58 +56 +59 +50 +39 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +47 +40 +38 +129 +106 +52 +168 +127 +42 +160 +120 +43 +158 +125 +46 +224 +207 +180 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +219 +212 +208 +62 +63 +61 +35 +31 +30 +91 +92 +89 +164 +158 +157 +186 +181 +179 +82 +69 +65 +176 +156 +141 +255 +215 +190 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +129 +106 +52 +65 +67 +64 +48 +58 +59 +55 +66 +67 +55 +66 +67 +48 +58 +59 +83 +78 +61 +145 +114 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +137 +110 +49 +51 +62 +63 +146 +135 +124 +255 +215 +190 +120 +114 +108 +56 +64 +60 +145 +114 +49 +171 +129 +45 +158 +125 +46 +168 +127 +42 +152 +119 +47 +69 +69 +61 +43 +57 +62 +109 +106 +99 +146 +135 +124 +137 +127 +115 +91 +92 +89 +43 +57 +62 +88 +82 +59 +158 +125 +46 +161 +127 +40 +158 +125 +46 +171 +129 +45 +117 +98 +55 +48 +58 +59 +172 +150 +134 +255 +215 +190 +146 +135 +124 +51 +62 +63 +137 +110 +49 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +75 +74 +61 +48 +58 +59 +55 +66 +67 +55 +66 +67 +48 +58 +59 +69 +69 +61 +137 +110 +49 +168 +127 +42 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +234 +204 +183 +70 +79 +77 +83 +78 +61 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +111 +94 +57 +56 +64 +60 +43 +57 +62 +58 +69 +70 +48 +58 +59 +56 +64 +60 +100 +89 +56 +158 +125 +46 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +111 +94 +57 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +137 +127 +115 +255 +215 +190 +97 +98 +96 +62 +63 +61 +152 +119 +47 +168 +127 +42 +158 +125 +46 +168 +127 +42 +137 +110 +49 +62 +63 +61 +51 +62 +63 +120 +114 +108 +146 +135 +124 +137 +127 +115 +84 +85 +82 +43 +57 +62 +95 +87 +59 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +100 +89 +56 +43 +57 +62 +194 +173 +157 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +118 +86 +65 +51 +62 +63 +43 +57 +62 +58 +69 +70 +41 +58 +57 +56 +64 +60 +146 +97 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +106 +82 +65 +63 +74 +74 +234 +204 +183 +255 +215 +190 +161 +144 +134 +48 +58 +59 +173 +106 +60 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +183 +110 +59 +76 +70 +64 +43 +57 +62 +55 +66 +67 +55 +66 +67 +48 +58 +59 +81 +73 +62 +183 +110 +59 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +126 +45 +163 +104 +61 +48 +58 +59 +161 +144 +134 +255 +215 +190 +234 +204 +183 +63 +74 +74 +95 +78 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +135 +94 +64 +62 +63 +61 +43 +57 +62 +58 +69 +70 +43 +57 +62 +51 +62 +63 +125 +90 +64 +225 +124 +48 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +97 +98 +96 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +125 +52 +227 +126 +50 +173 +106 +60 +95 +78 +64 +56 +64 +60 +51 +62 +63 +120 +114 +108 +70 +79 +77 +89 +75 +66 +225 +124 +48 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +163 +104 +61 +65 +67 +64 +41 +58 +57 +55 +66 +67 +51 +62 +63 +48 +58 +59 +106 +82 +65 +209 +117 +53 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +249 +146 +83 +248 +138 +64 +247 +130 +53 +247 +130 +60 +250 +139 +73 +246 +156 +93 +250 +176 +132 +186 +157 +134 +41 +58 +57 +146 +97 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +199 +115 +54 +89 +75 +66 +48 +58 +59 +51 +62 +63 +55 +66 +67 +43 +57 +62 +76 +70 +64 +173 +106 +60 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +137 +127 +115 +234 +204 +183 +63 +74 +74 +135 +94 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +199 +115 +54 +125 +90 +64 +69 +69 +61 +41 +58 +57 +97 +98 +96 +146 +135 +124 +51 +62 +63 +146 +97 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +214 +121 +50 +106 +82 +65 +48 +58 +59 +51 +62 +63 +55 +66 +67 +41 +58 +57 +65 +67 +64 +163 +104 +61 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +55 +66 +67 +250 +197 +158 +251 +168 +115 +247 +150 +84 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +246 +116 +28 +247 +130 +53 +247 +143 +74 +249 +159 +103 +252 +185 +144 +154 +133 +118 +24 +22 +23 +108 +87 +46 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +71 +60 +43 +85 +71 +43 +171 +129 +45 +160 +120 +43 +216 +194 +154 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +237 +233 +225 +65 +58 +56 +62 +63 +61 +219 +212 +208 +253 +255 +252 +237 +233 +225 +120 +114 +108 +35 +31 +30 +55 +48 +48 +227 +196 +175 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +129 +106 +52 +51 +62 +63 +84 +85 +82 +187 +166 +150 +227 +196 +175 +227 +196 +175 +161 +144 +134 +51 +62 +63 +69 +69 +61 +152 +119 +47 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +91 +92 +89 +217 +187 +166 +55 +66 +67 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +75 +74 +61 +58 +69 +70 +187 +166 +150 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +161 +144 +134 +43 +57 +62 +100 +89 +56 +171 +129 +45 +158 +125 +46 +158 +125 +46 +161 +127 +40 +75 +74 +61 +84 +85 +82 +234 +204 +183 +76 +78 +76 +88 +82 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +62 +63 +61 +63 +74 +74 +176 +156 +141 +227 +196 +175 +227 +196 +175 +176 +156 +141 +70 +79 +77 +62 +63 +61 +145 +114 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +97 +98 +96 +172 +150 +134 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +105 +93 +60 +43 +57 +62 +120 +114 +108 +207 +178 +158 +227 +196 +175 +217 +187 +166 +120 +114 +108 +41 +58 +57 +95 +87 +59 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +56 +64 +60 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +146 +135 +124 +207 +178 +158 +48 +58 +59 +111 +94 +57 +171 +129 +45 +158 +125 +46 +168 +127 +42 +152 +119 +47 +62 +63 +61 +70 +79 +77 +207 +178 +158 +255 +215 +190 +255 +215 +190 +255 +215 +190 +238 +205 +179 +137 +127 +115 +43 +57 +62 +117 +98 +55 +168 +127 +42 +158 +125 +46 +168 +127 +42 +152 +119 +47 +62 +63 +61 +109 +106 +99 +255 +215 +190 +161 +144 +134 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +106 +82 +65 +41 +58 +57 +137 +127 +115 +217 +187 +166 +227 +196 +175 +207 +178 +158 +109 +106 +99 +41 +58 +57 +146 +97 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +176 +156 +141 +245 +212 +186 +70 +79 +77 +95 +78 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +188 +112 +56 +56 +64 +60 +70 +79 +77 +176 +156 +141 +227 +196 +175 +227 +196 +175 +176 +156 +141 +63 +74 +74 +62 +63 +61 +194 +112 +58 +227 +126 +50 +224 +123 +55 +227 +126 +50 +227 +126 +50 +95 +78 +64 +77 +85 +81 +245 +212 +186 +172 +150 +134 +48 +58 +59 +173 +106 +60 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +135 +94 +64 +35 +56 +60 +120 +114 +108 +207 +178 +158 +227 +196 +175 +217 +187 +166 +133 +120 +107 +35 +56 +60 +118 +86 +65 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +95 +78 +64 +48 +58 +59 +70 +79 +77 +146 +135 +124 +217 +187 +166 +207 +178 +158 +51 +62 +63 +155 +100 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +163 +104 +61 +48 +58 +59 +91 +92 +89 +194 +173 +157 +227 +196 +175 +217 +187 +166 +146 +135 +124 +43 +57 +62 +89 +75 +66 +214 +121 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +247 +165 +111 +247 +150 +84 +248 +138 +64 +247 +130 +60 +248 +138 +64 +249 +146 +83 +247 +165 +111 +239 +182 +144 +91 +92 +89 +76 +70 +64 +224 +123 +55 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +76 +70 +64 +55 +66 +67 +172 +150 +134 +227 +196 +175 +227 +196 +175 +187 +166 +150 +77 +85 +81 +51 +62 +63 +173 +106 +60 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +118 +86 +65 +58 +69 +70 +217 +187 +166 +70 +79 +77 +135 +94 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +225 +124 +48 +125 +90 +64 +56 +64 +60 +55 +66 +67 +120 +114 +108 +187 +166 +150 +245 +212 +186 +120 +114 +108 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +227 +126 +50 +225 +124 +48 +95 +78 +64 +43 +57 +62 +146 +135 +124 +217 +187 +166 +227 +196 +175 +194 +173 +157 +91 +92 +89 +48 +58 +59 +163 +104 +61 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +197 +158 +249 +174 +124 +247 +150 +84 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +249 +146 +83 +251 +168 +115 +239 +182 +144 +65 +58 +56 +59 +50 +39 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +108 +87 +46 +47 +40 +38 +152 +119 +47 +170 +137 +67 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +174 +168 +167 +24 +22 +23 +109 +106 +99 +152 +147 +147 +97 +98 +96 +47 +40 +38 +24 +22 +23 +35 +31 +30 +35 +31 +30 +176 +156 +141 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +69 +69 +61 +76 +78 +76 +227 +196 +175 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +187 +166 +150 +51 +62 +63 +95 +87 +59 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +117 +98 +55 +55 +66 +67 +109 +106 +99 +48 +58 +59 +137 +110 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +117 +98 +55 +48 +58 +59 +187 +166 +150 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +137 +127 +115 +51 +62 +63 +145 +114 +49 +168 +127 +42 +158 +125 +46 +171 +129 +45 +117 +98 +55 +55 +66 +67 +137 +127 +115 +55 +66 +67 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +55 +66 +67 +207 +178 +158 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +217 +187 +166 +58 +69 +70 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +91 +92 +89 +109 +106 +99 +69 +69 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +120 +114 +108 +245 +212 +186 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +137 +127 +115 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +146 +135 +124 +146 +135 +124 +62 +63 +61 +152 +119 +47 +168 +127 +42 +158 +125 +46 +168 +127 +42 +100 +89 +56 +51 +62 +63 +207 +178 +158 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +109 +106 +99 +63 +69 +60 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +100 +89 +56 +51 +62 +63 +227 +196 +175 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +155 +100 +63 +41 +58 +57 +146 +135 +124 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +109 +106 +99 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +224 +123 +55 +76 +70 +64 +109 +106 +99 +194 +173 +157 +43 +57 +62 +163 +104 +61 +234 +125 +52 +224 +123 +55 +224 +123 +55 +225 +124 +48 +89 +75 +66 +63 +74 +74 +217 +187 +166 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +217 +187 +166 +58 +69 +70 +95 +78 +64 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +155 +100 +63 +43 +57 +62 +207 +178 +158 +109 +106 +99 +76 +70 +64 +224 +123 +55 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +51 +62 +63 +120 +114 +108 +253 +212 +188 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +137 +127 +115 +48 +58 +59 +173 +106 +60 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +188 +112 +56 +62 +63 +61 +58 +69 +70 +161 +144 +134 +234 +204 +183 +255 +215 +190 +255 +215 +190 +137 +127 +115 +62 +63 +61 +209 +117 +53 +227 +126 +50 +224 +123 +55 +227 +126 +50 +212 +120 +56 +69 +69 +61 +77 +85 +81 +234 +204 +183 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +176 +156 +141 +35 +56 +60 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +251 +168 +115 +247 +150 +84 +250 +139 +73 +248 +138 +64 +250 +139 +73 +249 +152 +92 +249 +174 +124 +209 +171 +139 +43 +57 +62 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +112 +85 +63 +51 +62 +63 +194 +173 +157 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +227 +196 +175 +70 +79 +77 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +48 +58 +59 +146 +135 +124 +77 +85 +81 +135 +94 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +214 +121 +50 +95 +78 +64 +35 +56 +60 +120 +114 +108 +217 +187 +166 +255 +215 +190 +255 +215 +190 +227 +196 +175 +58 +69 +70 +125 +90 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +41 +58 +57 +172 +150 +134 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +234 +204 +183 +77 +85 +81 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +51 +62 +63 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +178 +146 +122 +24 +22 +23 +101 +83 +47 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +152 +119 +47 +47 +40 +38 +123 +102 +54 +209 +171 +139 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +164 +158 +157 +24 +22 +23 +24 +22 +23 +24 +22 +23 +24 +22 +23 +24 +22 +23 +35 +31 +30 +35 +31 +30 +47 +40 +38 +194 +173 +157 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +129 +106 +52 +48 +58 +59 +176 +156 +141 +255 +215 +190 +255 +215 +190 +253 +212 +188 +255 +215 +190 +255 +215 +190 +255 +215 +190 +120 +114 +108 +56 +64 +60 +152 +119 +47 +161 +127 +40 +158 +125 +46 +168 +127 +42 +137 +110 +49 +51 +62 +63 +48 +58 +59 +75 +74 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +63 +74 +74 +194 +173 +157 +207 +178 +158 +207 +178 +158 +207 +178 +158 +207 +178 +158 +207 +178 +158 +207 +178 +158 +172 +150 +134 +48 +58 +59 +111 +94 +57 +171 +129 +45 +158 +125 +46 +168 +127 +42 +152 +119 +47 +56 +64 +60 +51 +62 +63 +56 +64 +60 +152 +119 +47 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +146 +135 +124 +255 +215 +190 +255 +215 +190 +253 +212 +188 +253 +212 +188 +255 +215 +190 +255 +215 +190 +146 +135 +124 +51 +62 +63 +145 +114 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +70 +79 +77 +63 +74 +74 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +171 +129 +45 +95 +87 +59 +55 +66 +67 +227 +196 +175 +255 +215 +190 +255 +215 +190 +253 +212 +188 +255 +215 +190 +255 +215 +190 +234 +204 +183 +70 +79 +77 +88 +82 +59 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +56 +64 +60 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +97 +98 +96 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +69 +69 +61 +84 +85 +82 +207 +178 +158 +207 +178 +158 +207 +178 +158 +207 +178 +158 +207 +178 +158 +207 +178 +158 +217 +187 +166 +146 +135 +124 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +168 +127 +42 +129 +106 +52 +51 +62 +63 +187 +166 +150 +176 +156 +141 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +89 +75 +66 +70 +79 +77 +245 +212 +186 +255 +215 +190 +255 +215 +190 +253 +212 +188 +255 +215 +190 +255 +215 +190 +217 +187 +166 +43 +57 +62 +125 +90 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +106 +82 +65 +77 +85 +81 +133 +120 +107 +62 +63 +61 +209 +117 +53 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +48 +58 +59 +161 +144 +134 +255 +215 +190 +255 +215 +190 +253 +212 +188 +253 +212 +188 +255 +215 +190 +255 +215 +190 +146 +135 +124 +48 +58 +59 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +62 +63 +61 +133 +120 +107 +77 +85 +81 +118 +86 +65 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +125 +90 +64 +55 +66 +67 +227 +196 +175 +255 +215 +190 +255 +215 +190 +253 +212 +188 +255 +215 +190 +255 +215 +190 +234 +204 +183 +63 +74 +74 +106 +82 +65 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +97 +98 +96 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +224 +123 +55 +89 +75 +66 +63 +74 +74 +217 +187 +166 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +91 +92 +89 +95 +78 +64 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +146 +97 +64 +43 +57 +62 +187 +166 +150 +255 +215 +190 +255 +215 +190 +253 +212 +188 +255 +215 +190 +255 +215 +190 +255 +215 +190 +101 +100 +92 +76 +70 +64 +224 +123 +55 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +251 +168 +115 +247 +150 +84 +250 +139 +73 +250 +139 +73 +247 +143 +74 +249 +159 +103 +250 +176 +132 +154 +133 +118 +51 +62 +63 +183 +110 +59 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +62 +63 +61 +133 +120 +107 +255 +215 +190 +255 +215 +190 +253 +212 +188 +253 +212 +188 +255 +215 +190 +255 +215 +190 +176 +156 +141 +43 +57 +62 +163 +104 +61 +234 +125 +52 +224 +123 +55 +227 +126 +50 +214 +121 +50 +76 +70 +64 +91 +92 +89 +70 +79 +77 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +146 +97 +64 +35 +56 +60 +161 +144 +134 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +194 +173 +157 +48 +58 +59 +163 +104 +61 +234 +126 +45 +224 +123 +55 +227 +126 +50 +214 +121 +50 +76 +70 +64 +97 +98 +96 +255 +215 +190 +255 +215 +190 +255 +215 +190 +253 +212 +188 +255 +215 +190 +255 +215 +190 +187 +166 +150 +43 +57 +62 +163 +104 +61 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +159 +103 +248 +180 +134 +124 +111 +99 +35 +31 +30 +137 +110 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +59 +50 +39 +85 +71 +43 +216 +194 +154 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +207 +202 +200 +47 +40 +38 +24 +22 +23 +35 +31 +30 +35 +31 +30 +35 +31 +30 +35 +31 +30 +24 +22 +23 +65 +58 +56 +238 +205 +179 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +100 +89 +56 +63 +74 +74 +227 +196 +175 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +251 +209 +178 +255 +215 +190 +194 +173 +157 +48 +58 +59 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +43 +57 +62 +95 +87 +59 +168 +127 +42 +158 +125 +46 +161 +127 +40 +158 +125 +46 +63 +69 +60 +43 +57 +62 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +43 +57 +62 +88 +82 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +75 +74 +61 +43 +57 +62 +75 +74 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +117 +98 +55 +51 +62 +63 +217 +187 +166 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +204 +176 +255 +215 +190 +217 +187 +166 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +48 +58 +59 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +69 +69 +61 +109 +106 +99 +255 +215 +190 +253 +212 +188 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +212 +188 +255 +215 +190 +120 +114 +108 +63 +69 +60 +158 +125 +46 +161 +127 +40 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +120 +114 +108 +70 +79 +77 +105 +93 +60 +171 +129 +45 +158 +125 +46 +168 +127 +42 +152 +119 +47 +56 +64 +60 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +51 +62 +63 +43 +57 +62 +111 +94 +57 +171 +129 +45 +158 +125 +46 +161 +127 +40 +152 +119 +47 +62 +63 +61 +146 +135 +124 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +62 +63 +61 +146 +135 +124 +255 +215 +190 +253 +212 +188 +250 +200 +166 +250 +200 +166 +253 +204 +176 +253 +212 +188 +253 +212 +188 +97 +98 +96 +89 +75 +66 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +139 +96 +61 +51 +62 +63 +63 +74 +74 +89 +75 +66 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +125 +52 +135 +94 +64 +55 +66 +67 +217 +187 +166 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +204 +176 +255 +215 +190 +217 +187 +166 +51 +62 +63 +139 +96 +61 +234 +126 +45 +224 +123 +55 +227 +126 +50 +225 +124 +48 +81 +73 +62 +58 +69 +70 +51 +62 +63 +146 +97 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +224 +123 +55 +81 +73 +62 +109 +106 +99 +255 +215 +190 +253 +212 +188 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +212 +188 +255 +215 +190 +120 +114 +108 +69 +69 +61 +212 +120 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +234 +125 +52 +224 +123 +55 +227 +126 +50 +194 +112 +58 +51 +62 +63 +146 +135 +124 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +234 +204 +183 +70 +79 +77 +118 +86 +65 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +106 +82 +65 +77 +85 +81 +245 +212 +186 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +251 +209 +178 +255 +215 +190 +176 +156 +141 +56 +64 +60 +188 +112 +56 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +251 +168 +115 +249 +152 +92 +247 +143 +74 +247 +143 +74 +247 +150 +84 +249 +159 +103 +248 +180 +134 +120 +114 +108 +69 +69 +61 +212 +120 +56 +227 +126 +50 +224 +123 +55 +234 +125 +52 +155 +100 +63 +43 +57 +62 +194 +173 +157 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +204 +176 +255 +215 +190 +234 +204 +183 +63 +74 +74 +112 +85 +63 +234 +125 +52 +227 +126 +50 +224 +123 +55 +234 +125 +52 +106 +82 +65 +58 +69 +70 +55 +66 +67 +135 +94 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +95 +78 +64 +77 +85 +81 +245 +212 +186 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +48 +58 +59 +172 +150 +134 +255 +215 +190 +251 +209 +178 +250 +200 +166 +250 +200 +166 +253 +204 +176 +255 +215 +190 +245 +212 +186 +63 +74 +74 +112 +85 +63 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +250 +139 +73 +249 +159 +103 +252 +185 +144 +82 +69 +65 +47 +40 +38 +158 +125 +46 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +85 +71 +43 +59 +50 +39 +216 +194 +154 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +164 +158 +157 +47 +40 +38 +24 +22 +23 +24 +22 +23 +24 +22 +23 +35 +31 +30 +65 +67 +64 +65 +58 +56 +227 +196 +175 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +84 +85 +82 +255 +215 +190 +251 +209 +178 +250 +197 +158 +251 +192 +154 +251 +192 +154 +250 +200 +166 +253 +212 +188 +227 +196 +175 +58 +69 +70 +105 +93 +60 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +75 +74 +61 +41 +58 +57 +111 +94 +57 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +137 +110 +49 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +41 +58 +57 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +95 +87 +59 +70 +79 +77 +245 +212 +186 +253 +212 +188 +250 +200 +166 +251 +192 +154 +251 +192 +154 +250 +200 +166 +253 +212 +188 +238 +205 +179 +70 +79 +77 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +48 +58 +59 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +168 +127 +42 +152 +119 +47 +56 +64 +60 +146 +135 +124 +255 +215 +190 +253 +204 +176 +250 +197 +158 +251 +192 +154 +251 +192 +154 +253 +204 +176 +255 +215 +190 +172 +150 +134 +51 +62 +63 +145 +114 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +97 +98 +96 +55 +66 +67 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +123 +102 +54 +117 +98 +55 +145 +114 +49 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +69 +69 +61 +137 +127 +115 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +183 +110 +59 +51 +62 +63 +187 +166 +150 +255 +215 +190 +253 +204 +176 +251 +192 +154 +251 +192 +154 +250 +197 +158 +253 +204 +176 +255 +215 +190 +137 +127 +115 +65 +67 +64 +209 +117 +53 +227 +126 +50 +224 +123 +55 +234 +125 +52 +163 +104 +61 +43 +57 +62 +41 +58 +57 +106 +82 +65 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +106 +82 +65 +77 +85 +81 +245 +212 +186 +251 +209 +178 +250 +197 +158 +249 +189 +146 +251 +192 +154 +250 +197 +158 +251 +209 +178 +238 +205 +179 +77 +85 +81 +112 +85 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +106 +82 +65 +41 +58 +57 +48 +58 +59 +163 +104 +61 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +62 +63 +61 +146 +135 +124 +255 +215 +190 +253 +204 +176 +250 +197 +158 +251 +192 +154 +251 +192 +154 +253 +204 +176 +255 +215 +190 +176 +156 +141 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +234 +125 +52 +224 +123 +55 +227 +126 +50 +183 +110 +59 +48 +58 +59 +176 +156 +141 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +227 +196 +175 +58 +69 +70 +139 +96 +61 +234 +125 +52 +224 +123 +55 +227 +126 +50 +214 +121 +50 +76 +70 +64 +120 +114 +108 +255 +215 +190 +253 +204 +176 +250 +197 +158 +251 +192 +154 +251 +192 +154 +250 +200 +166 +255 +215 +190 +207 +178 +158 +48 +58 +59 +163 +104 +61 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +192 +154 +249 +174 +124 +246 +156 +93 +247 +150 +84 +249 +146 +83 +249 +152 +92 +251 +168 +115 +249 +189 +146 +97 +98 +96 +89 +75 +66 +225 +124 +48 +227 +126 +50 +224 +123 +55 +234 +126 +45 +125 +90 +64 +58 +69 +70 +227 +196 +175 +253 +212 +188 +250 +200 +166 +251 +192 +154 +249 +189 +146 +250 +197 +158 +251 +209 +178 +255 +215 +190 +97 +98 +96 +89 +75 +66 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +125 +90 +64 +43 +57 +62 +43 +57 +62 +135 +94 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +137 +127 +115 +69 +69 +61 +212 +120 +56 +227 +126 +50 +224 +123 +55 +234 +126 +45 +155 +100 +63 +43 +57 +62 +207 +178 +158 +255 +215 +190 +250 +200 +166 +251 +192 +154 +251 +192 +154 +250 +197 +158 +251 +209 +178 +255 +215 +190 +109 +106 +99 +89 +75 +66 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +247 +143 +74 +249 +159 +103 +252 +185 +144 +55 +48 +48 +59 +50 +39 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +156 +125 +62 +101 +83 +47 +59 +50 +39 +209 +171 +139 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +219 +212 +208 +137 +127 +115 +101 +100 +92 +120 +114 +108 +186 +181 +179 +152 +147 +147 +55 +48 +48 +227 +196 +175 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +97 +98 +96 +255 +215 +190 +253 +204 +176 +251 +192 +154 +249 +189 +146 +249 +189 +146 +250 +197 +158 +251 +209 +178 +234 +204 +183 +70 +79 +77 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +161 +127 +40 +75 +74 +61 +41 +58 +57 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +75 +74 +61 +41 +58 +57 +88 +82 +59 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +88 +82 +59 +77 +85 +81 +245 +212 +186 +251 +209 +178 +250 +197 +158 +249 +189 +146 +249 +189 +146 +250 +197 +158 +251 +209 +178 +245 +212 +186 +84 +85 +82 +88 +82 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +43 +57 +62 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +56 +64 +60 +161 +144 +134 +255 +215 +190 +250 +200 +166 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +255 +215 +190 +187 +166 +150 +51 +62 +63 +137 +110 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +65 +67 +64 +91 +92 +89 +55 +66 +67 +129 +106 +52 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +158 +125 +46 +63 +69 +60 +137 +127 +115 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +173 +106 +60 +48 +58 +59 +187 +166 +150 +255 +215 +190 +250 +200 +166 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +41 +58 +57 +118 +86 +65 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +95 +78 +64 +91 +92 +89 +255 +215 +190 +253 +204 +176 +251 +192 +154 +252 +185 +144 +252 +185 +144 +251 +192 +154 +253 +204 +176 +245 +212 +186 +91 +92 +89 +106 +82 +65 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +112 +85 +63 +41 +58 +57 +48 +58 +59 +173 +106 +60 +234 +125 +52 +224 +123 +55 +227 +126 +50 +199 +115 +54 +56 +64 +60 +161 +144 +134 +255 +215 +190 +250 +200 +166 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +255 +215 +190 +187 +166 +150 +48 +58 +59 +183 +110 +59 +234 +125 +52 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +176 +156 +141 +255 +215 +190 +253 +212 +188 +251 +209 +178 +253 +212 +188 +217 +187 +166 +55 +66 +67 +146 +97 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +214 +121 +50 +69 +69 +61 +137 +127 +115 +255 +215 +190 +253 +204 +176 +251 +192 +154 +249 +189 +146 +249 +189 +146 +250 +200 +166 +253 +212 +188 +217 +187 +166 +51 +62 +63 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +250 +197 +158 +249 +174 +124 +249 +159 +103 +249 +152 +92 +249 +152 +92 +249 +159 +103 +249 +174 +124 +250 +197 +158 +91 +92 +89 +95 +78 +64 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +125 +52 +125 +90 +64 +70 +79 +77 +234 +204 +183 +251 +209 +178 +250 +197 +158 +249 +189 +146 +252 +185 +144 +251 +192 +154 +253 +204 +176 +255 +215 +190 +120 +114 +108 +81 +73 +62 +224 +123 +55 +227 +126 +50 +224 +123 +55 +234 +126 +45 +135 +94 +64 +41 +58 +57 +41 +58 +57 +135 +94 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +253 +212 +188 +253 +212 +188 +251 +209 +178 +251 +209 +178 +255 +215 +190 +137 +127 +115 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +234 +125 +52 +146 +97 +64 +51 +62 +63 +227 +196 +175 +253 +212 +188 +250 +197 +158 +249 +189 +146 +249 +189 +146 +251 +192 +154 +253 +204 +176 +255 +215 +190 +120 +114 +108 +81 +73 +62 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +139 +96 +61 +51 +62 +63 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +250 +139 +73 +249 +159 +103 +252 +185 +144 +55 +48 +48 +59 +50 +39 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +154 +125 +71 +170 +137 +67 +108 +87 +46 +59 +50 +39 +192 +155 +91 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +186 +181 +179 +47 +40 +38 +65 +58 +56 +245 +212 +186 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +84 +85 +82 +253 +212 +188 +251 +209 +178 +250 +197 +158 +251 +192 +154 +251 +192 +154 +250 +200 +166 +253 +212 +188 +234 +204 +183 +63 +74 +74 +100 +89 +56 +171 +129 +45 +158 +125 +46 +158 +125 +46 +161 +127 +40 +75 +74 +61 +41 +58 +57 +111 +94 +57 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +111 +94 +57 +56 +64 +60 +43 +57 +62 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +95 +87 +59 +70 +79 +77 +245 +212 +186 +251 +209 +178 +250 +197 +158 +251 +192 +154 +251 +192 +154 +250 +197 +158 +251 +209 +178 +245 +212 +186 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +43 +57 +62 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +158 +125 +46 +152 +119 +47 +56 +64 +60 +161 +144 +134 +255 +215 +190 +253 +204 +176 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +255 +215 +190 +176 +156 +141 +51 +62 +63 +137 +110 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +91 +92 +89 +55 +66 +67 +123 +102 +54 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +145 +114 +49 +100 +89 +56 +48 +58 +59 +187 +166 +150 +176 +156 +141 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +176 +156 +141 +255 +215 +190 +250 +200 +166 +251 +192 +154 +251 +192 +154 +250 +197 +158 +253 +204 +176 +255 +215 +190 +146 +135 +124 +62 +63 +61 +209 +117 +53 +227 +126 +50 +224 +123 +55 +234 +125 +52 +163 +104 +61 +48 +58 +59 +41 +58 +57 +112 +85 +63 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +106 +82 +65 +84 +85 +82 +255 +215 +190 +251 +209 +178 +250 +197 +158 +249 +189 +146 +249 +189 +146 +250 +197 +158 +251 +209 +178 +238 +205 +179 +84 +85 +82 +106 +82 +65 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +106 +82 +65 +41 +58 +57 +48 +58 +59 +173 +106 +60 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +62 +63 +61 +146 +135 +124 +255 +215 +190 +253 +204 +176 +251 +192 +154 +249 +189 +146 +251 +192 +154 +250 +200 +166 +255 +215 +190 +176 +156 +141 +51 +62 +63 +183 +110 +59 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +176 +156 +141 +253 +212 +188 +253 +204 +176 +250 +200 +166 +253 +204 +176 +217 +187 +166 +55 +66 +67 +146 +97 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +214 +121 +50 +76 +70 +64 +120 +114 +108 +255 +215 +190 +253 +204 +176 +250 +197 +158 +251 +192 +154 +251 +192 +154 +250 +200 +166 +253 +212 +188 +207 +178 +158 +48 +58 +59 +163 +104 +61 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +250 +200 +166 +248 +180 +134 +251 +168 +115 +247 +165 +111 +247 +165 +111 +251 +168 +115 +248 +180 +134 +250 +200 +166 +91 +92 +89 +89 +75 +66 +225 +124 +48 +227 +126 +50 +224 +123 +55 +234 +126 +45 +125 +90 +64 +63 +74 +74 +227 +196 +175 +251 +209 +178 +250 +197 +158 +249 +189 +146 +249 +189 +146 +250 +197 +158 +253 +204 +176 +255 +215 +190 +109 +106 +99 +89 +75 +66 +225 +124 +48 +227 +126 +50 +224 +123 +55 +234 +125 +52 +125 +90 +64 +43 +57 +62 +41 +58 +57 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +253 +212 +188 +253 +204 +176 +250 +200 +166 +250 +200 +166 +251 +209 +178 +137 +127 +115 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +234 +125 +52 +155 +100 +63 +43 +57 +62 +217 +187 +166 +253 +212 +188 +250 +200 +166 +251 +192 +154 +249 +189 +146 +250 +197 +158 +253 +204 +176 +255 +215 +190 +120 +114 +108 +81 +73 +62 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +250 +139 +73 +249 +159 +103 +248 +180 +134 +76 +70 +64 +47 +40 +38 +152 +119 +47 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +156 +125 +62 +154 +125 +71 +170 +137 +67 +101 +83 +47 +59 +50 +39 +170 +137 +67 +255 +238 +227 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +152 +147 +147 +35 +31 +30 +24 +22 +23 +115 +102 +92 +255 +215 +190 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +171 +129 +45 +105 +93 +60 +58 +69 +70 +227 +196 +175 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +204 +176 +255 +215 +190 +207 +178 +158 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +69 +69 +61 +43 +57 +62 +100 +89 +56 +171 +129 +45 +158 +125 +46 +161 +127 +40 +158 +125 +46 +75 +74 +61 +48 +58 +59 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +48 +58 +59 +101 +100 +92 +91 +92 +89 +75 +74 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +111 +94 +57 +55 +66 +67 +227 +196 +175 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +204 +176 +255 +215 +190 +227 +196 +175 +51 +62 +63 +105 +93 +60 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +48 +58 +59 +48 +58 +59 +123 +102 +54 +168 +127 +42 +158 +125 +46 +161 +127 +40 +158 +125 +46 +69 +69 +61 +120 +114 +108 +255 +215 +190 +251 +209 +178 +250 +200 +166 +250 +197 +158 +250 +200 +166 +251 +209 +178 +255 +215 +190 +146 +135 +124 +56 +64 +60 +152 +119 +47 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +109 +106 +99 +63 +74 +74 +111 +94 +57 +171 +129 +45 +158 +125 +46 +161 +127 +40 +152 +119 +47 +69 +69 +61 +51 +62 +63 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +56 +64 +60 +51 +62 +63 +48 +58 +59 +120 +114 +108 +245 +212 +186 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +62 +63 +61 +137 +127 +115 +255 +215 +190 +251 +209 +178 +250 +200 +166 +250 +200 +166 +250 +200 +166 +253 +212 +188 +255 +215 +190 +109 +106 +99 +81 +73 +62 +224 +123 +55 +227 +126 +50 +224 +123 +55 +234 +125 +52 +155 +100 +63 +48 +58 +59 +43 +57 +62 +95 +78 +64 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +125 +90 +64 +63 +74 +74 +227 +196 +175 +253 +212 +188 +250 +200 +166 +250 +197 +158 +250 +197 +158 +253 +204 +176 +255 +215 +190 +227 +196 +175 +55 +66 +67 +125 +90 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +89 +75 +66 +48 +58 +59 +48 +58 +59 +155 +100 +63 +234 +126 +45 +224 +123 +55 +227 +126 +50 +214 +121 +50 +76 +70 +64 +120 +114 +108 +255 +215 +190 +251 +209 +178 +250 +200 +166 +250 +197 +158 +250 +200 +166 +251 +209 +178 +255 +215 +190 +137 +127 +115 +62 +63 +61 +209 +117 +53 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +97 +98 +96 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +48 +58 +59 +176 +156 +141 +251 +209 +178 +250 +200 +166 +250 +197 +158 +250 +200 +166 +227 +196 +175 +63 +74 +74 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +95 +78 +64 +91 +92 +89 +253 +212 +188 +253 +212 +188 +250 +200 +166 +250 +200 +166 +250 +200 +166 +251 +209 +178 +255 +215 +190 +172 +150 +134 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +251 +209 +178 +251 +192 +154 +250 +176 +132 +249 +174 +124 +249 +174 +124 +248 +180 +134 +251 +192 +154 +251 +209 +178 +109 +106 +99 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +146 +97 +64 +43 +57 +62 +217 +187 +166 +255 +215 +190 +253 +204 +176 +250 +197 +158 +250 +197 +158 +250 +200 +166 +253 +212 +188 +245 +212 +186 +70 +79 +77 +106 +82 +65 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +112 +85 +63 +51 +62 +63 +51 +62 +63 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +245 +212 +186 +250 +200 +166 +251 +192 +154 +250 +197 +158 +253 +204 +176 +146 +135 +124 +65 +67 +64 +209 +117 +53 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +187 +166 +150 +255 +215 +190 +253 +204 +176 +250 +200 +166 +250 +197 +158 +250 +200 +166 +253 +212 +188 +255 +215 +190 +84 +85 +82 +95 +78 +64 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +109 +10 +247 +111 +26 +247 +123 +41 +248 +138 +64 +249 +152 +92 +249 +174 +124 +121 +100 +85 +35 +31 +30 +108 +87 +46 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +156 +125 +62 +154 +125 +71 +154 +125 +71 +171 +129 +45 +85 +71 +43 +71 +60 +43 +171 +129 +45 +224 +207 +180 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +237 +233 +225 +174 +168 +167 +81 +77 +76 +24 +22 +23 +35 +31 +30 +35 +31 +30 +187 +166 +150 +255 +215 +190 +255 +215 +190 +234 +204 +183 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +129 +106 +52 +51 +62 +63 +176 +156 +141 +255 +215 +190 +255 +215 +190 +253 +212 +188 +253 +212 +188 +255 +215 +190 +255 +215 +190 +146 +135 +124 +51 +62 +63 +145 +114 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +152 +119 +47 +56 +64 +60 +43 +57 +62 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +48 +58 +59 +146 +135 +124 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +172 +150 +134 +172 +150 +134 +146 +135 +124 +146 +135 +124 +194 +173 +157 +245 +212 +186 +137 +127 +115 +63 +69 +60 +158 +125 +46 +161 +127 +40 +158 +125 +46 +168 +127 +42 +137 +110 +49 +51 +62 +63 +161 +144 +134 +255 +215 +190 +255 +215 +190 +253 +212 +188 +253 +212 +188 +255 +215 +190 +255 +215 +190 +161 +144 +134 +48 +58 +59 +137 +110 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +55 +66 +67 +51 +62 +63 +105 +93 +60 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +70 +79 +77 +245 +212 +186 +255 +215 +190 +253 +212 +188 +251 +209 +178 +253 +212 +188 +255 +215 +190 +255 +215 +190 +91 +92 +89 +75 +74 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +133 +120 +107 +84 +85 +82 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +75 +74 +61 +55 +66 +67 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +161 +144 +134 +172 +150 +134 +172 +150 +134 +137 +127 +115 +146 +135 +124 +207 +178 +158 +245 +212 +186 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +76 +78 +76 +245 +212 +186 +255 +215 +190 +253 +212 +188 +253 +212 +188 +253 +212 +188 +255 +215 +190 +227 +196 +175 +58 +69 +70 +118 +86 +65 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +125 +90 +64 +63 +74 +74 +97 +98 +96 +76 +70 +64 +214 +121 +50 +227 +126 +50 +224 +123 +55 +234 +125 +52 +163 +104 +61 +48 +58 +59 +187 +166 +150 +255 +215 +190 +255 +215 +190 +251 +209 +178 +251 +209 +178 +255 +215 +190 +255 +215 +190 +176 +156 +141 +48 +58 +59 +173 +106 +60 +227 +126 +50 +224 +123 +55 +227 +126 +50 +212 +120 +56 +69 +69 +61 +101 +100 +92 +63 +74 +74 +125 +90 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +106 +82 +65 +63 +74 +74 +234 +204 +183 +255 +215 +190 +253 +212 +188 +253 +212 +188 +253 +212 +188 +255 +215 +190 +245 +212 +186 +70 +79 +77 +89 +75 +66 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +234 +125 +52 +183 +110 +59 +51 +62 +63 +176 +156 +141 +253 +204 +176 +251 +192 +154 +251 +192 +154 +251 +192 +154 +250 +200 +166 +77 +85 +81 +106 +82 +65 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +135 +94 +64 +51 +62 +63 +217 +187 +166 +255 +215 +190 +255 +215 +190 +253 +212 +188 +253 +212 +188 +255 +215 +190 +255 +215 +190 +109 +106 +99 +76 +70 +64 +224 +123 +55 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +255 +215 +190 +250 +200 +166 +251 +192 +154 +252 +185 +144 +252 +185 +144 +251 +192 +154 +250 +200 +166 +255 +215 +190 +146 +135 +124 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +51 +62 +63 +146 +135 +124 +255 +215 +190 +255 +215 +190 +251 +209 +178 +251 +209 +178 +253 +212 +188 +255 +215 +190 +194 +173 +157 +43 +57 +62 +146 +97 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +77 +85 +81 +63 +74 +74 +135 +94 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +251 +209 +178 +250 +197 +158 +249 +189 +146 +249 +189 +146 +250 +200 +166 +172 +150 +134 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +120 +114 +108 +255 +215 +190 +255 +215 +190 +253 +212 +188 +251 +209 +178 +253 +212 +188 +255 +215 +190 +217 +187 +166 +51 +62 +63 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +60 +247 +150 +84 +251 +168 +115 +187 +140 +108 +24 +22 +23 +59 +50 +39 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +156 +125 +62 +154 +125 +71 +154 +125 +71 +154 +125 +71 +156 +125 +62 +158 +125 +46 +47 +40 +38 +108 +87 +46 +158 +125 +46 +195 +167 +113 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +219 +212 +208 +164 +158 +157 +109 +106 +99 +65 +58 +56 +24 +22 +23 +24 +22 +23 +94 +60 +47 +178 +86 +46 +59 +50 +39 +150 +125 +114 +255 +215 +190 +255 +215 +190 +234 +204 +183 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +69 +69 +61 +84 +85 +82 +234 +204 +183 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +217 +187 +166 +55 +66 +67 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +123 +102 +54 +51 +62 +63 +76 +78 +76 +56 +64 +60 +152 +119 +47 +168 +127 +42 +158 +125 +46 +168 +127 +42 +129 +106 +52 +48 +58 +59 +161 +144 +134 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +217 +187 +166 +133 +120 +107 +77 +85 +81 +77 +85 +81 +146 +135 +124 +245 +212 +186 +176 +156 +141 +51 +62 +63 +137 +110 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +75 +74 +61 +63 +74 +74 +227 +196 +175 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +234 +204 +183 +76 +78 +76 +75 +74 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +77 +85 +81 +77 +85 +81 +88 +82 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +129 +106 +52 +48 +58 +59 +146 +135 +124 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +172 +150 +134 +48 +58 +59 +117 +98 +55 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +146 +135 +124 +120 +114 +108 +69 +69 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +111 +94 +57 +51 +62 +63 +176 +156 +141 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +194 +173 +157 +120 +114 +108 +70 +79 +77 +84 +85 +82 +161 +144 +134 +255 +215 +190 +255 +215 +190 +161 +144 +134 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +155 +100 +63 +41 +58 +57 +161 +144 +134 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +137 +127 +115 +48 +58 +59 +183 +110 +59 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +89 +75 +66 +97 +98 +96 +172 +150 +134 +48 +58 +59 +183 +110 +59 +227 +126 +50 +224 +123 +55 +227 +126 +50 +214 +121 +50 +76 +70 +64 +84 +85 +82 +234 +204 +183 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +234 +204 +183 +77 +85 +81 +81 +73 +62 +224 +123 +55 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +176 +156 +141 +97 +98 +96 +95 +78 +64 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +146 +135 +124 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +161 +144 +134 +41 +58 +57 +155 +100 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +176 +156 +141 +250 +200 +166 +249 +189 +146 +252 +185 +144 +249 +189 +146 +250 +200 +166 +120 +114 +108 +69 +69 +61 +214 +121 +50 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +62 +63 +61 +101 +100 +92 +245 +212 +186 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +187 +166 +150 +43 +57 +62 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +255 +215 +190 +253 +212 +188 +253 +204 +176 +250 +200 +166 +250 +200 +166 +253 +204 +176 +253 +212 +188 +255 +215 +190 +187 +166 +150 +41 +58 +57 +155 +100 +63 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +95 +78 +64 +58 +69 +70 +227 +196 +175 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +91 +92 +89 +62 +63 +61 +209 +117 +53 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +62 +63 +61 +133 +120 +107 +77 +85 +81 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +253 +204 +176 +251 +192 +154 +252 +185 +144 +252 +185 +144 +251 +192 +154 +212 +173 +150 +48 +58 +59 +155 +100 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +118 +86 +65 +51 +62 +63 +207 +178 +158 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +109 +106 +99 +56 +64 +60 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +247 +111 +26 +246 +116 +28 +247 +130 +53 +247 +143 +74 +249 +159 +103 +248 +180 +134 +89 +75 +66 +24 +22 +23 +85 +71 +43 +171 +129 +45 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +156 +125 +62 +154 +125 +71 +154 +125 +71 +154 +125 +71 +156 +125 +62 +175 +132 +40 +85 +71 +43 +47 +40 +38 +158 +125 +46 +158 +125 +46 +170 +137 +67 +237 +233 +225 +253 +255 +252 +253 +255 +252 +253 +255 +252 +207 +202 +200 +164 +158 +157 +146 +135 +124 +120 +114 +108 +89 +84 +82 +65 +58 +56 +47 +40 +38 +24 +22 +23 +24 +22 +23 +35 +31 +30 +94 +60 +47 +178 +86 +46 +226 +110 +35 +241 +100 +24 +144 +77 +47 +65 +58 +56 +253 +212 +188 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +129 +106 +52 +48 +58 +59 +101 +100 +92 +217 +187 +166 +245 +212 +186 +245 +212 +186 +194 +173 +157 +76 +78 +76 +56 +64 +60 +145 +114 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +171 +129 +45 +88 +82 +59 +77 +85 +81 +176 +156 +141 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +95 +87 +59 +41 +58 +57 +137 +127 +115 +227 +196 +175 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +207 +178 +158 +120 +114 +108 +48 +58 +59 +62 +63 +61 +100 +89 +56 +95 +87 +59 +51 +62 +63 +120 +114 +108 +227 +196 +175 +55 +66 +67 +100 +89 +56 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +137 +110 +49 +51 +62 +63 +84 +85 +82 +207 +178 +158 +245 +212 +186 +245 +212 +186 +207 +178 +158 +97 +98 +96 +51 +62 +63 +137 +110 +49 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +91 +92 +89 +120 +114 +108 +63 +69 +60 +158 +125 +46 +161 +127 +40 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +43 +57 +62 +161 +144 +134 +227 +196 +175 +253 +212 +188 +234 +204 +183 +161 +144 +134 +51 +62 +63 +75 +74 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +146 +135 +124 +176 +156 +141 +48 +58 +59 +137 +110 +49 +171 +129 +45 +158 +125 +46 +161 +127 +40 +158 +125 +46 +75 +74 +61 +43 +57 +62 +161 +144 +134 +234 +204 +183 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +194 +173 +157 +109 +106 +99 +43 +57 +62 +69 +69 +61 +105 +93 +60 +88 +82 +59 +48 +58 +59 +146 +135 +124 +255 +215 +190 +161 +144 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +225 +124 +48 +95 +78 +64 +43 +57 +62 +161 +144 +134 +234 +204 +183 +245 +212 +186 +227 +196 +175 +146 +135 +124 +35 +56 +60 +125 +90 +64 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +188 +112 +56 +51 +62 +63 +161 +144 +134 +234 +204 +183 +51 +62 +63 +125 +90 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +125 +52 +163 +104 +61 +43 +57 +62 +97 +98 +96 +207 +178 +158 +245 +212 +186 +245 +212 +186 +207 +178 +158 +91 +92 +89 +48 +58 +59 +173 +106 +60 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +118 +86 +65 +55 +66 +67 +234 +204 +183 +146 +135 +124 +56 +64 +60 +194 +112 +58 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +112 +85 +63 +35 +56 +60 +146 +135 +124 +227 +196 +175 +253 +212 +188 +234 +204 +183 +161 +144 +134 +43 +57 +62 +95 +78 +64 +225 +124 +48 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +176 +156 +141 +250 +197 +158 +252 +185 +144 +248 +180 +134 +248 +180 +134 +251 +192 +154 +172 +150 +134 +48 +58 +59 +173 +106 +60 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +41 +58 +57 +120 +114 +108 +217 +187 +166 +245 +212 +186 +234 +204 +183 +176 +156 +141 +58 +69 +70 +81 +73 +62 +214 +121 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +255 +215 +190 +255 +215 +190 +217 +187 +166 +133 +120 +107 +84 +85 +82 +91 +92 +89 +146 +135 +124 +234 +204 +183 +238 +205 +179 +63 +74 +74 +95 +78 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +84 +85 +82 +194 +173 +157 +245 +212 +186 +245 +212 +186 +217 +187 +166 +109 +106 +99 +41 +58 +57 +146 +97 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +146 +97 +64 +51 +62 +63 +187 +166 +150 +76 +78 +76 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +97 +98 +96 +250 +200 +166 +249 +189 +146 +248 +180 +134 +248 +180 +134 +252 +185 +144 +232 +190 +161 +70 +79 +77 +112 +85 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +199 +115 +54 +65 +67 +64 +70 +79 +77 +187 +166 +150 +238 +205 +179 +245 +212 +186 +217 +187 +166 +133 +120 +107 +35 +56 +60 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +123 +41 +247 +130 +60 +247 +150 +84 +251 +168 +115 +203 +161 +131 +55 +48 +48 +24 +22 +23 +71 +60 +43 +145 +114 +49 +171 +129 +45 +171 +129 +45 +158 +125 +46 +156 +125 +62 +154 +125 +71 +154 +125 +71 +156 +125 +62 +156 +125 +62 +171 +129 +45 +171 +129 +45 +101 +83 +47 +35 +31 +30 +123 +102 +54 +171 +129 +45 +158 +125 +46 +160 +120 +43 +224 +207 +180 +253 +255 +252 +253 +255 +252 +219 +212 +208 +47 +40 +38 +24 +22 +23 +24 +22 +23 +24 +22 +23 +24 +22 +23 +24 +22 +23 +35 +31 +30 +35 +31 +30 +24 +22 +23 +47 +40 +38 +226 +110 +35 +241 +100 +24 +226 +110 +35 +226 +110 +35 +144 +77 +47 +55 +48 +48 +238 +205 +179 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +123 +102 +54 +56 +64 +60 +51 +62 +63 +84 +85 +82 +84 +85 +82 +48 +58 +59 +63 +69 +60 +129 +106 +52 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +56 +64 +60 +137 +127 +115 +245 +212 +186 +84 +85 +82 +69 +69 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +161 +127 +40 +158 +125 +46 +95 +87 +59 +48 +58 +59 +63 +74 +74 +109 +106 +99 +133 +120 +107 +133 +120 +107 +91 +92 +89 +51 +62 +63 +56 +64 +60 +100 +89 +56 +152 +119 +47 +171 +129 +45 +175 +132 +40 +100 +89 +56 +48 +58 +59 +217 +187 +166 +120 +114 +108 +63 +69 +60 +152 +119 +47 +161 +127 +40 +158 +125 +46 +158 +125 +46 +168 +127 +42 +129 +106 +52 +61 +67 +58 +51 +62 +63 +84 +85 +82 +84 +85 +82 +51 +62 +63 +56 +64 +60 +123 +102 +54 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +97 +98 +96 +187 +166 +150 +48 +58 +59 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +158 +125 +46 +83 +78 +61 +48 +58 +59 +63 +74 +74 +91 +92 +89 +70 +79 +77 +48 +58 +59 +75 +74 +61 +152 +119 +47 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +146 +135 +124 +234 +204 +183 +63 +74 +74 +83 +78 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +152 +119 +47 +83 +78 +61 +48 +58 +59 +70 +79 +77 +109 +106 +99 +133 +120 +107 +120 +114 +108 +84 +85 +82 +48 +58 +59 +61 +67 +58 +111 +94 +57 +158 +125 +46 +171 +129 +45 +171 +129 +45 +88 +82 +59 +58 +69 +70 +238 +205 +179 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +212 +120 +56 +95 +78 +64 +43 +57 +62 +70 +79 +77 +84 +85 +82 +63 +74 +74 +48 +58 +59 +118 +86 +65 +225 +124 +48 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +112 +85 +63 +55 +66 +67 +227 +196 +175 +255 +215 +190 +120 +114 +108 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +155 +100 +63 +62 +63 +61 +51 +62 +63 +77 +85 +81 +77 +85 +81 +51 +62 +63 +62 +63 +61 +155 +100 +63 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +199 +115 +54 +56 +64 +60 +120 +114 +108 +255 +215 +190 +217 +187 +166 +43 +57 +62 +125 +90 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +106 +82 +65 +48 +58 +59 +63 +74 +74 +84 +85 +82 +70 +79 +77 +43 +57 +62 +95 +78 +64 +212 +120 +56 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +234 +125 +52 +183 +110 +59 +51 +62 +63 +172 +150 +134 +251 +192 +154 +248 +180 +134 +249 +174 +124 +249 +174 +124 +248 +180 +134 +236 +186 +153 +63 +74 +74 +95 +78 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +135 +94 +64 +51 +62 +63 +55 +66 +67 +84 +85 +82 +70 +79 +77 +41 +58 +57 +81 +73 +62 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +255 +215 +190 +194 +173 +157 +58 +69 +70 +62 +63 +61 +106 +82 +65 +95 +78 +64 +51 +62 +63 +91 +92 +89 +238 +205 +179 +161 +144 +134 +48 +58 +59 +183 +110 +59 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +125 +52 +173 +106 +60 +65 +67 +64 +48 +58 +59 +77 +85 +81 +84 +85 +82 +55 +66 +67 +56 +64 +60 +146 +97 +64 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +69 +69 +61 +101 +100 +92 +227 +196 +175 +63 +74 +74 +135 +94 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +250 +197 +158 +252 +185 +144 +249 +174 +124 +249 +174 +124 +250 +176 +132 +251 +192 +154 +120 +114 +108 +62 +63 +61 +209 +117 +53 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +188 +112 +56 +76 +70 +64 +41 +58 +57 +77 +85 +81 +84 +85 +82 +58 +69 +70 +48 +58 +59 +125 +90 +64 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +243 +101 +2 +247 +103 +7 +247 +103 +7 +247 +111 +26 +247 +118 +39 +247 +130 +53 +250 +139 +73 +246 +156 +93 +249 +174 +124 +203 +161 +131 +55 +48 +48 +24 +22 +23 +35 +31 +30 +85 +71 +43 +137 +110 +49 +152 +119 +47 +168 +127 +42 +171 +129 +45 +171 +129 +45 +168 +127 +42 +152 +119 +47 +117 +98 +55 +59 +50 +39 +35 +31 +30 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +152 +119 +47 +224 +207 +180 +253 +255 +252 +253 +255 +252 +253 +255 +252 +146 +135 +124 +65 +58 +56 +35 +31 +30 +24 +22 +23 +24 +22 +23 +35 +31 +30 +35 +31 +30 +35 +31 +30 +35 +31 +30 +24 +22 +23 +83 +53 +42 +236 +108 +29 +236 +108 +29 +226 +110 +35 +94 +60 +47 +65 +58 +56 +253 +212 +188 +255 +215 +190 +238 +205 +179 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +161 +127 +40 +168 +127 +42 +145 +114 +49 +105 +93 +60 +83 +78 +61 +83 +78 +61 +111 +94 +57 +158 +125 +46 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +88 +82 +59 +51 +62 +63 +217 +187 +166 +255 +215 +190 +176 +156 +141 +43 +57 +62 +105 +93 +60 +171 +129 +45 +158 +125 +46 +158 +125 +46 +161 +127 +40 +168 +127 +42 +137 +110 +49 +88 +82 +59 +69 +69 +61 +62 +63 +61 +63 +69 +60 +75 +74 +61 +105 +93 +60 +152 +119 +47 +171 +129 +45 +168 +127 +42 +158 +125 +46 +171 +129 +45 +129 +106 +52 +48 +58 +59 +194 +173 +157 +207 +178 +158 +43 +57 +62 +100 +89 +56 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +152 +119 +47 +111 +94 +57 +83 +78 +61 +83 +78 +61 +105 +93 +60 +145 +114 +49 +168 +127 +42 +161 +127 +40 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +84 +85 +82 +245 +212 +186 +77 +85 +81 +75 +74 +61 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +129 +106 +52 +95 +87 +59 +81 +73 +62 +95 +87 +59 +123 +102 +54 +168 +127 +42 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +56 +64 +60 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +255 +215 +190 +161 +144 +134 +48 +58 +59 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +129 +106 +52 +88 +82 +59 +69 +69 +61 +62 +63 +61 +63 +69 +60 +75 +74 +61 +117 +98 +55 +152 +119 +47 +171 +129 +45 +161 +127 +40 +158 +125 +46 +171 +129 +45 +111 +94 +57 +48 +58 +59 +227 +196 +175 +176 +156 +141 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +227 +126 +50 +163 +104 +61 +112 +85 +63 +95 +78 +64 +118 +86 +65 +173 +106 +60 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +183 +110 +59 +51 +62 +63 +133 +120 +107 +255 +215 +190 +255 +215 +190 +217 +187 +166 +51 +62 +63 +106 +82 +65 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +199 +115 +54 +135 +94 +64 +95 +78 +64 +95 +78 +64 +135 +94 +64 +199 +115 +54 +234 +125 +52 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +106 +82 +65 +51 +62 +63 +217 +187 +166 +255 +215 +190 +255 +215 +190 +120 +114 +108 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +173 +106 +60 +118 +86 +65 +95 +78 +64 +112 +85 +63 +163 +104 +61 +227 +126 +50 +227 +126 +50 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +101 +100 +92 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +172 +150 +134 +252 +185 +144 +249 +174 +124 +247 +165 +111 +247 +165 +111 +249 +174 +124 +252 +185 +144 +154 +133 +118 +48 +58 +59 +163 +104 +61 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +188 +112 +56 +125 +90 +64 +95 +78 +64 +106 +82 +65 +155 +100 +63 +224 +123 +55 +234 +125 +52 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +137 +127 +115 +253 +212 +188 +91 +92 +89 +69 +69 +61 +194 +112 +58 +234 +126 +45 +234 +126 +45 +163 +104 +61 +51 +62 +63 +137 +127 +115 +238 +205 +179 +63 +74 +74 +89 +75 +66 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +209 +117 +53 +146 +97 +64 +106 +82 +65 +95 +78 +64 +125 +90 +64 +194 +112 +58 +234 +126 +45 +227 +126 +50 +224 +123 +55 +227 +126 +50 +234 +126 +45 +125 +90 +64 +41 +58 +57 +194 +173 +157 +238 +205 +179 +63 +74 +74 +135 +94 +64 +234 +125 +52 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +251 +192 +154 +250 +176 +132 +251 +168 +115 +247 +165 +111 +249 +174 +124 +245 +179 +138 +195 +157 +134 +41 +58 +57 +135 +94 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +125 +52 +214 +121 +50 +146 +97 +64 +106 +82 +65 +95 +78 +64 +125 +90 +64 +183 +110 +59 +227 +126 +50 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +125 +52 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +249 +152 +92 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +247 +103 +7 +246 +109 +10 +247 +111 +26 +247 +118 +39 +247 +130 +53 +247 +143 +74 +249 +159 +103 +250 +176 +132 +219 +170 +138 +115 +102 +92 +47 +40 +38 +24 +22 +23 +35 +31 +30 +47 +40 +38 +59 +50 +39 +59 +50 +39 +59 +50 +39 +59 +50 +39 +47 +40 +38 +47 +40 +38 +71 +60 +43 +137 +110 +49 +171 +129 +45 +158 +125 +46 +158 +125 +46 +152 +119 +47 +170 +137 +67 +219 +212 +208 +237 +233 +225 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +219 +212 +208 +152 +147 +147 +109 +106 +99 +65 +67 +64 +35 +31 +30 +35 +31 +30 +35 +31 +30 +35 +31 +30 +24 +22 +23 +94 +60 +47 +178 +86 +46 +109 +63 +45 +35 +31 +30 +124 +111 +99 +251 +209 +178 +251 +209 +178 +234 +204 +183 +76 +78 +76 +95 +87 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +117 +98 +55 +129 +106 +52 +168 +127 +42 +168 +127 +42 +171 +129 +45 +168 +127 +42 +168 +127 +42 +171 +129 +45 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +117 +98 +55 +48 +58 +59 +146 +135 +124 +255 +215 +190 +255 +215 +190 +255 +215 +190 +120 +114 +108 +51 +62 +63 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +158 +125 +46 +152 +119 +47 +152 +119 +47 +158 +125 +46 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +158 +125 +46 +81 +73 +62 +58 +69 +70 +227 +196 +175 +255 +215 +190 +120 +114 +108 +48 +58 +59 +129 +106 +52 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +161 +127 +40 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +168 +127 +42 +168 +127 +42 +152 +119 +47 +117 +98 +55 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +88 +82 +59 +84 +85 +82 +255 +215 +190 +176 +156 +141 +48 +58 +59 +111 +94 +57 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +168 +127 +42 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +145 +114 +49 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +117 +98 +55 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +63 +69 +60 +137 +127 +115 +255 +215 +190 +238 +205 +179 +91 +92 +89 +56 +64 +60 +137 +110 +49 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +158 +125 +46 +152 +119 +47 +158 +125 +46 +168 +127 +42 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +152 +119 +47 +69 +69 +61 +84 +85 +82 +245 +212 +186 +172 +150 +134 +62 +63 +61 +199 +115 +54 +227 +126 +50 +224 +123 +55 +227 +126 +50 +199 +115 +54 +125 +90 +64 +227 +126 +50 +227 +126 +50 +227 +126 +50 +234 +125 +52 +227 +126 +50 +234 +125 +52 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +214 +121 +50 +81 +73 +62 +63 +74 +74 +227 +196 +175 +255 +215 +190 +253 +212 +188 +255 +215 +190 +146 +135 +124 +48 +58 +59 +146 +97 +64 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +227 +126 +50 +227 +126 +50 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +139 +96 +61 +48 +58 +59 +146 +135 +124 +255 +215 +190 +253 +212 +188 +255 +215 +190 +217 +187 +166 +55 +66 +67 +95 +78 +64 +225 +124 +48 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +227 +126 +50 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +163 +104 +61 +183 +110 +59 +227 +126 +50 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +97 +98 +96 +56 +64 +60 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +183 +110 +59 +51 +62 +63 +167 +142 +123 +248 +180 +134 +247 +165 +111 +249 +159 +103 +246 +156 +93 +249 +159 +103 +249 +174 +124 +239 +182 +144 +77 +85 +81 +65 +67 +64 +199 +115 +54 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +227 +126 +50 +227 +126 +50 +234 +125 +52 +227 +126 +50 +227 +126 +50 +135 +94 +64 +188 +112 +56 +227 +126 +50 +224 +123 +55 +227 +126 +50 +209 +117 +53 +65 +67 +64 +146 +135 +124 +227 +196 +175 +43 +57 +62 +146 +97 +64 +234 +126 +45 +224 +123 +55 +224 +123 +55 +234 +126 +45 +106 +82 +65 +70 +79 +77 +253 +212 +188 +176 +156 +141 +41 +58 +57 +125 +90 +64 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +234 +125 +52 +227 +126 +50 +234 +125 +52 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +155 +100 +63 +48 +58 +59 +120 +114 +108 +253 +212 +188 +234 +204 +183 +63 +74 +74 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +252 +185 +144 +245 +169 +119 +249 +159 +103 +249 +159 +103 +247 +165 +111 +249 +174 +124 +251 +192 +154 +109 +106 +99 +62 +63 +61 +188 +112 +56 +234 +125 +52 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +234 +125 +52 +227 +126 +50 +234 +125 +52 +227 +126 +50 +227 +126 +50 +212 +120 +56 +199 +115 +54 +224 +123 +55 +224 +123 +55 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +200 +166 +249 +174 +124 +247 +150 +84 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +243 +101 +2 +243 +101 +2 +247 +103 +7 +247 +111 +26 +247 +111 +26 +247 +123 +41 +247 +130 +60 +243 +141 +78 +249 +159 +103 +250 +176 +132 +251 +192 +154 +207 +178 +158 +154 +133 +118 +82 +69 +65 +24 +22 +23 +71 +60 +43 +101 +83 +47 +101 +83 +47 +101 +83 +47 +117 +98 +55 +145 +114 +49 +171 +129 +45 +168 +127 +42 +160 +120 +43 +160 +120 +43 +158 +125 +46 +192 +155 +91 +237 +233 +225 +81 +77 +76 +55 +48 +48 +74 +68 +68 +81 +77 +76 +89 +84 +82 +91 +92 +89 +89 +84 +82 +81 +77 +76 +65 +58 +56 +47 +40 +38 +35 +31 +30 +55 +48 +48 +115 +102 +92 +172 +150 +134 +55 +48 +48 +24 +22 +23 +24 +22 +23 +24 +22 +23 +65 +58 +56 +230 +173 +136 +251 +192 +154 +250 +197 +158 +250 +200 +166 +84 +85 +82 +88 +82 +59 +171 +129 +45 +158 +125 +46 +158 +125 +46 +171 +129 +45 +83 +78 +61 +69 +69 +61 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +117 +98 +55 +48 +58 +59 +101 +100 +92 +238 +205 +179 +253 +204 +176 +250 +200 +166 +253 +204 +176 +238 +205 +179 +91 +92 +89 +51 +62 +63 +117 +98 +55 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +145 +114 +49 +75 +74 +61 +48 +58 +59 +172 +150 +134 +253 +212 +188 +255 +215 +190 +234 +204 +183 +84 +85 +82 +56 +64 +60 +129 +106 +52 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +81 +73 +62 +63 +69 +60 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +83 +78 +61 +84 +85 +82 +255 +215 +190 +245 +212 +186 +109 +106 +99 +51 +62 +63 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +161 +127 +40 +171 +129 +45 +105 +93 +60 +51 +62 +63 +137 +110 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +137 +127 +115 +58 +69 +70 +111 +94 +57 +171 +129 +45 +158 +125 +46 +158 +125 +46 +158 +125 +46 +62 +63 +61 +137 +127 +115 +255 +215 +190 +255 +215 +190 +227 +196 +175 +77 +85 +81 +56 +64 +60 +129 +106 +52 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +161 +127 +40 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +168 +127 +42 +137 +110 +49 +69 +69 +61 +51 +62 +63 +187 +166 +150 +255 +215 +190 +172 +150 +134 +51 +62 +63 +194 +112 +58 +227 +126 +50 +224 +123 +55 +234 +125 +52 +183 +110 +59 +48 +58 +59 +155 +100 +63 +234 +126 +45 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +125 +52 +209 +117 +53 +89 +75 +66 +48 +58 +59 +187 +166 +150 +250 +200 +166 +250 +197 +158 +251 +192 +154 +250 +197 +158 +250 +200 +166 +109 +106 +99 +48 +58 +59 +135 +94 +64 +234 +125 +52 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +135 +94 +64 +43 +57 +62 +120 +114 +108 +250 +200 +166 +250 +197 +158 +251 +192 +154 +250 +197 +158 +250 +200 +166 +172 +150 +134 +41 +58 +57 +106 +82 +65 +214 +121 +50 +234 +125 +52 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +227 +126 +50 +234 +126 +45 +183 +110 +59 +48 +58 +59 +135 +94 +64 +234 +126 +45 +224 +123 +55 +227 +126 +50 +188 +112 +56 +51 +62 +63 +109 +106 +99 +51 +62 +63 +183 +110 +59 +227 +126 +50 +224 +123 +55 +234 +125 +52 +173 +106 +60 +48 +58 +59 +178 +146 +122 +245 +169 +119 +246 +156 +93 +247 +150 +84 +249 +146 +83 +247 +150 +84 +249 +159 +103 +249 +174 +124 +203 +161 +131 +58 +69 +70 +76 +70 +64 +194 +112 +58 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +183 +110 +59 +48 +58 +59 +163 +104 +61 +234 +126 +45 +224 +123 +55 +227 +126 +50 +209 +117 +53 +62 +63 +61 +146 +135 +124 +217 +187 +166 +43 +57 +62 +163 +104 +61 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +126 +45 +125 +90 +64 +58 +69 +70 +234 +204 +183 +255 +215 +190 +137 +127 +115 +41 +58 +57 +118 +86 +65 +225 +124 +48 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +146 +97 +64 +51 +62 +63 +97 +98 +96 +238 +205 +179 +255 +215 +190 +234 +204 +183 +63 +74 +74 +118 +86 +65 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +81 +73 +62 +101 +100 +92 +250 +176 +132 +247 +165 +111 +246 +156 +93 +249 +152 +92 +249 +159 +103 +251 +168 +115 +252 +185 +144 +217 +187 +166 +58 +69 +70 +69 +69 +61 +199 +115 +54 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +224 +123 +55 +227 +126 +50 +225 +124 +48 +81 +73 +62 +81 +73 +62 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +139 +96 +61 +55 +66 +67 +250 +197 +158 +249 +174 +124 +247 +150 +84 +247 +130 +60 +247 +118 +39 +247 +111 +26 +247 +103 +7 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +237 +95 +0 +237 +95 +0 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +237 +95 +0 +243 +101 +2 +247 +103 +7 +236 +102 +14 +247 +111 +26 +246 +116 +28 +247 +123 +41 +247 +130 +60 +243 +141 +78 +249 +159 +103 +249 +174 +124 +249 +189 +146 +253 +204 +176 +124 +111 +99 +35 +31 +30 +145 +114 +49 +175 +132 +40 +171 +129 +45 +168 +127 +42 +192 +155 +91 +216 +194 +154 +224 +207 +180 +224 +207 +180 +216 +194 +154 +216 +194 +154 +239 +227 +208 +253 +255 +252 +253 +255 +252 +186 +181 +179 +146 +135 +124 +120 +114 +108 +109 +106 +99 +95 +78 +64 +71 +60 +43 +85 +71 +43 +101 +83 +47 +108 +87 +46 +35 +31 +30 +150 +125 +114 +227 +196 +175 +255 +215 +190 +253 +212 +188 +212 +173 +150 +121 +100 +85 +95 +78 +64 +129 +102 +78 +234 +168 +124 +250 +176 +132 +250 +176 +132 +248 +180 +134 +249 +189 +146 +124 +111 +99 +62 +63 +61 +152 +119 +47 +171 +129 +45 +171 +129 +45 +145 +114 +49 +56 +64 +60 +43 +57 +62 +83 +78 +61 +152 +119 +47 +171 +129 +45 +171 +129 +45 +168 +127 +42 +168 +127 +42 +171 +129 +45 +171 +129 +45 +152 +119 +47 +95 +87 +59 +48 +58 +59 +101 +100 +92 +236 +186 +153 +251 +192 +154 +252 +185 +144 +248 +180 +134 +245 +179 +138 +249 +189 +146 +236 +186 +153 +101 +100 +92 +48 +58 +59 +88 +82 +59 +137 +110 +49 +168 +127 +42 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +171 +129 +45 +168 +127 +42 +145 +114 +49 +100 +89 +56 +56 +64 +60 +58 +69 +70 +172 +150 +134 +250 +200 +166 +251 +192 +154 +250 +197 +158 +250 +200 +166 +217 +187 +166 +84 +85 +82 +51 +62 +63 +105 +93 +60 +158 +125 +46 +171 +129 +45 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +152 +119 +47 +83 +78 +61 +43 +57 +62 +48 +58 +59 +129 +106 +52 +175 +132 +40 +171 +129 +45 +158 +125 +46 +63 +69 +60 +120 +114 +108 +255 +215 +190 +255 +215 +190 +227 +196 +175 +84 +85 +82 +51 +62 +63 +105 +93 +60 +158 +125 +46 +171 +129 +45 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +158 +125 +46 +105 +93 +60 +48 +58 +59 +48 +58 +59 +129 +106 +52 +168 +127 +42 +158 +125 +46 +168 +127 +42 +145 +114 +49 +51 +62 +63 +172 +150 +134 +91 +92 +89 +75 +74 +61 +168 +127 +42 +171 +129 +45 +175 +132 +40 +117 +98 +55 +48 +58 +59 +176 +156 +141 +253 +204 +176 +253 +204 +176 +253 +204 +176 +217 +187 +166 +84 +85 +82 +48 +58 +59 +95 +87 +59 +145 +114 +49 +168 +127 +42 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +171 +129 +45 +158 +125 +46 +137 +110 +49 +95 +87 +59 +51 +62 +63 +70 +79 +77 +187 +166 +150 +251 +209 +178 +251 +209 +178 +207 +178 +158 +43 +57 +62 +135 +94 +64 +238 +123 +45 +234 +126 +45 +234 +126 +45 +118 +86 +65 +35 +56 +60 +56 +64 +60 +155 +100 +63 +234 +125 +52 +234 +126 +45 +234 +125 +52 +227 +126 +50 +227 +126 +50 +234 +126 +45 +227 +126 +50 +163 +104 +61 +76 +70 +64 +51 +62 +63 +167 +142 +123 +251 +192 +154 +248 +180 +134 +249 +174 +124 +249 +174 +124 +250 +176 +132 +245 +179 +138 +236 +186 +153 +109 +106 +99 +41 +58 +57 +95 +78 +64 +183 +110 +59 +234 +125 +52 +234 +126 +45 +234 +125 +52 +227 +126 +50 +227 +126 +50 +234 +125 +52 +234 +126 +45 +227 +126 +50 +183 +110 +59 +95 +78 +64 +43 +57 +62 +124 +111 +99 +236 +186 +153 +252 +185 +144 +250 +176 +132 +249 +174 +124 +249 +174 +124 +248 +180 +134 +251 +192 +154 +154 +133 +118 +43 +57 +62 +81 +73 +62 +173 +106 +60 +227 +126 +50 +234 +126 +45 +227 +126 +50 +227 +126 +50 +227 +126 +50 +234 +126 +45 +234 +125 +52 +155 +100 +63 +56 +64 +60 +35 +56 +60 +89 +75 +66 +227 +126 +50 +234 +126 +45 +238 +128 +40 +146 +97 +64 +43 +57 +62 +176 +156 +141 +58 +69 +70 +118 +86 +65 +234 +126 +45 +234 +126 +45 +234 +126 +45 +112 +85 +63 +43 +57 +62 +210 +156 +119 +245 +162 +103 +247 +150 +84 +247 +143 +74 +248 +138 +64 +241 +138 +68 +249 +146 +83 +249 +159 +103 +250 +176 +132 +195 +157 +134 +58 +69 +70 +65 +67 +64 +155 +100 +63 +227 +126 +50 +234 +126 +45 +227 +126 +50 +227 +126 +50 +234 +125 +52 +234 +126 +45 +234 +126 +45 +173 +106 +60 +65 +67 +64 +35 +56 +60 +106 +82 +65 +234 +126 +45 +234 +126 +45 +238 +128 +40 +146 +97 +64 +43 +57 +62 +187 +166 +150 +234 +204 +183 +55 +66 +67 +106 +82 +65 +234 +126 +45 +234 +125 +52 +234 +125 +52 +224 +123 +55 +81 +73 +62 +91 +92 +89 +245 +212 +186 +253 +212 +188 +253 +212 +188 +137 +127 +115 +41 +58 +57 +89 +75 +66 +173 +106 +60 +227 +126 +50 +234 +126 +45 +227 +126 +50 +227 +126 +50 +227 +126 +50 +234 +125 +52 +234 +126 +45 +234 +125 +52 +194 +112 +58 +106 +82 +65 +43 +57 +62 +101 +100 +92 +227 +196 +175 +251 +209 +178 +251 +209 +178 +253 +212 +188 +97 +98 +96 +69 +69 +61 +209 +117 +53 +234 +126 +45 +238 +128 +40 +173 +106 +60 +51 +62 +63 +139 +115 +96 +251 +168 +115 +246 +156 +93 +247 +150 +84 +249 +146 +83 +249 +152 +92 +247 +165 +111 +248 +180 +134 +250 +200 +166 +187 +166 +150 +55 +66 +67 +69 +69 +61 +163 +104 +61 +234 +125 +52 +234 +126 +45 +234 +125 +52 +227 +126 +50 +227 +126 +50 +234 +126 +45 +234 +126 +45 +199 +115 +54 +95 +78 +64 +35 +56 +60 +81 +73 +62 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +139 +96 +61 +51 +62 +63 +250 +197 +158 +245 +169 +119 +247 +150 +84 +247 +130 +60 +247 +118 +39 +235 +107 +16 +243 +101 +2 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +246 +97 +3 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +246 +97 +3 +237 +95 +0 +243 +101 +2 +247 +103 +7 +236 +102 +14 +247 +111 +26 +246 +116 +28 +238 +123 +45 +241 +132 +59 +247 +143 +74 +246 +156 +93 +245 +169 +119 +230 +173 +136 +47 +40 +38 +59 +50 +39 +168 +127 +42 +161 +127 +40 +160 +120 +43 +192 +155 +91 +255 +238 +227 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +253 +255 +252 +239 +227 +208 +170 +137 +67 +171 +129 +45 +171 +129 +45 +171 +129 +45 +59 +50 +39 +154 +133 +118 +250 +200 +166 +250 +197 +158 +249 +189 +146 +248 +180 +134 +249 +174 +124 +247 +165 +111 +247 +165 +111 +245 +162 +103 +249 +159 +103 +245 +162 +103 +247 +165 +111 +249 +174 +124 +203 +161 +131 +55 +66 +67 +69 +69 +61 +111 +94 +57 +105 +93 +60 +69 +69 +61 +63 +74 +74 +137 +127 +115 +51 +62 +63 +62 +63 +61 +95 +87 +59 +129 +106 +52 +137 +110 +49 +137 +110 +49 +123 +102 +54 +95 +87 +59 +62 +63 +61 +51 +62 +63 +133 +120 +107 +239 +182 +144 +248 +180 +134 +245 +169 +119 +247 +165 +111 +249 +159 +103 +245 +162 +103 +251 +168 +115 +250 +176 +132 +239 +182 +144 +154 +133 +118 +63 +74 +74 +51 +62 +63 +75 +74 +61 +105 +93 +60 +123 +102 +54 +137 +110 +49 +137 +110 +49 +137 +110 +49 +123 +102 +54 +100 +89 +56 +75 +74 +61 +56 +64 +60 +55 +66 +67 +124 +111 +99 +219 +170 +138 +252 +185 +144 +250 +176 +132 +249 +174 +124 +249 +174 +124 +250 +176 +132 +252 +185 +144 +236 +186 +153 +124 +111 +99 +48 +58 +59 +63 +69 +60 +95 +87 +59 +123 +102 +54 +137 +110 +49 +137 +110 +49 +129 +106 +52 +95 +87 +59 +62 +63 +61 +55 +66 +67 +146 +135 +124 +77 +85 +81 +61 +67 +58 +105 +93 +60 +111 +94 +57 +75 +74 +61 +48 +58 +59 +194 +173 +157 +255 +215 +190 +255 +215 +190 +255 +215 +190 +234 +204 +183 +120 +114 +108 +43 +57 +62 +69 +69 +61 +100 +89 +56 +129 +106 +52 +137 +110 +49 +137 +110 +49 +129 +106 +52 +105 +93 +60 +69 +69 +61 +48 +58 +59 +77 +85 +81 +51 +62 +63 +137 +110 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +137 +110 +49 +51 +62 +63 +187 +166 +150 +187 +166 +150 +48 +58 +59 +75 +74 +61 +111 +94 +57 +95 +87 +59 +56 +64 +60 +99 +90 +79 +239 +182 +144 +252 +185 +144 +245 +179 +138 +252 +185 +144 +249 +189 +146 +236 +186 +153 +137 +127 +115 +55 +66 +67 +56 +64 +60 +83 +78 +61 +111 +94 +57 +129 +106 +52 +137 +110 +49 +137 +110 +49 +129 +106 +52 +117 +98 +55 +95 +87 +59 +69 +69 +61 +51 +62 +63 +63 +74 +74 +133 +120 +107 +236 +186 +153 +250 +197 +158 +251 +192 +154 +251 +192 +154 +250 +197 +158 +124 +111 +99 +51 +62 +63 +112 +85 +63 +146 +97 +64 +106 +82 +65 +48 +58 +59 +120 +114 +108 +101 +100 +92 +48 +58 +59 +95 +78 +64 +146 +97 +64 +183 +110 +59 +188 +112 +56 +173 +106 +60 +139 +96 +61 +89 +75 +66 +48 +58 +59 +77 +85 +81 +186 +157 +134 +245 +179 +138 +245 +169 +119 +245 +162 +103 +246 +156 +93 +246 +156 +93 +246 +156 +93 +247 +165 +111 +249 +174 +124 +249 +189 +146 +154 +133 +118 +58 +69 +70 +51 +62 +63 +95 +78 +64 +139 +96 +61 +173 +106 +60 +183 +110 +59 +183 +110 +59 +173 +106 +60 +139 +96 +61 +95 +78 +64 +51 +62 +63 +63 +74 +74 +167 +142 +123 +249 +189 +146 +249 +174 +124 +247 +165 +111 +246 +156 +93 +246 +156 +93 +246 +156 +93 +245 +162 +103 +245 +169 +119 +245 +179 +138 +178 +146 +122 +70 +79 +77 +48 +58 +59 +89 +75 +66 +139 +96 +61 +173 +106 +60 +188 +112 +56 +183 +110 +59 +155 +100 +63 +95 +78 +64 +48 +58 +59 +101 +100 +92 +146 +135 +124 +48 +58 +59 +95 +78 +64 +146 +97 +64 +125 +90 +64 +62 +63 +61 +101 +100 +92 +245 +212 +186 +137 +127 +115 +48 +58 +59 +106 +82 +65 +146 +97 +64 +106 +82 +65 +48 +58 +59 +124 +111 +99 +247 +165 +111 +247 +150 +84 +241 +138 +68 +241 +132 +59 +247 +130 +53 +247 +130 +53 +242 +133 +67 +241 +145 +79 +245 +162 +103 +250 +176 +132 +203 +161 +131 +91 +92 +89 +43 +57 +62 +81 +73 +62 +135 +94 +64 +173 +106 +60 +188 +112 +56 +183 +110 +59 +155 +100 +63 +106 +82 +65 +51 +62 +63 +91 +92 +89 +133 +120 +107 +48 +58 +59 +95 +78 +64 +146 +97 +64 +118 +86 +65 +56 +64 +60 +101 +100 +92 +245 +212 +186 +253 +212 +188 +146 +135 +124 +48 +58 +59 +118 +86 +65 +183 +110 +59 +173 +106 +60 +95 +78 +64 +43 +57 +62 +186 +157 +134 +250 +197 +158 +251 +192 +154 +250 +197 +158 +250 +200 +166 +172 +150 +134 +70 +79 +77 +48 +58 +59 +89 +75 +66 +135 +94 +64 +163 +104 +61 +183 +110 +59 +183 +110 +59 +173 +106 +60 +146 +97 +64 +95 +78 +64 +56 +64 +60 +55 +66 +67 +150 +125 +114 +236 +186 +153 +251 +192 +154 +249 +189 +146 +249 +189 +146 +251 +192 +154 +195 +157 +134 +51 +62 +63 +76 +70 +64 +139 +96 +61 +125 +90 +64 +65 +67 +64 +76 +78 +76 +234 +168 +124 +249 +159 +103 +247 +150 +84 +243 +141 +78 +247 +143 +74 +247 +150 +84 +249 +159 +103 +250 +176 +132 +250 +197 +158 +255 +215 +190 +207 +178 +158 +84 +85 +82 +48 +58 +59 +89 +75 +66 +146 +97 +64 +173 +106 +60 +183 +110 +59 +183 +110 +59 +163 +104 +61 +118 +86 +65 +62 +63 +61 +58 +69 +70 +63 +74 +74 +81 +73 +62 +227 +126 +50 +227 +126 +50 +224 +123 +55 +234 +126 +45 +135 +94 +64 +58 +69 +70 +251 +192 +154 +245 +169 +119 +249 +146 +83 +247 +130 +53 +238 +116 +34 +235 +107 +16 +243 +101 +2 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +246 +97 +3 +246 +97 +3 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +243 +101 +2 +236 +102 +14 +236 +102 +14 +235 +107 +16 +246 +116 +28 +239 +117 +44 +241 +132 +59 +247 +143 +74 +249 +152 +92 +214 +151 +109 +118 +86 +65 +146 +111 +88 +192 +155 +91 +192 +155 +91 +195 +167 +113 +239 +227 +208 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +255 +238 +227 +216 +194 +154 +192 +155 +91 +192 +155 +91 +192 +155 +91 +146 +111 +88 +162 +125 +96 +250 +176 +132 +245 +169 +119 +247 +165 +111 +249 +159 +103 +246 +156 +93 +247 +150 +84 +243 +141 +78 +243 +141 +78 +243 +141 +78 +241 +145 +79 +247 +150 +84 +249 +159 +103 +245 +169 +119 +187 +140 +108 +89 +84 +82 +48 +58 +59 +48 +58 +59 +91 +92 +89 +194 +173 +157 +255 +215 +190 +207 +178 +158 +109 +106 +99 +51 +62 +63 +48 +58 +59 +51 +62 +63 +48 +58 +59 +48 +58 +59 +55 +66 +67 +124 +111 +99 +203 +161 +131 +248 +180 +134 +245 +169 +119 +249 +159 +103 +247 +150 +84 +243 +141 +78 +243 +141 +78 +243 +141 +78 +247 +150 +84 +249 +159 +103 +245 +169 +119 +248 +180 +134 +219 +170 +138 +154 +133 +118 +84 +85 +82 +51 +62 +63 +48 +58 +59 +51 +62 +63 +51 +62 +63 +48 +58 +59 +48 +58 +59 +55 +66 +67 +91 +92 +89 +154 +133 +118 +209 +171 +139 +245 +179 +138 +249 +174 +124 +247 +165 +111 +249 +159 +103 +246 +156 +93 +246 +156 +93 +249 +159 +103 +247 +165 +111 +249 +174 +124 +252 +185 +144 +195 +157 +134 +109 +106 +99 +55 +66 +67 +48 +58 +59 +51 +62 +63 +51 +62 +63 +48 +58 +59 +51 +62 +63 +109 +106 +99 +207 +178 +158 +255 +215 +190 +217 +187 +166 +91 +92 +89 +51 +62 +63 +48 +58 +59 +76 +78 +76 +172 +150 +134 +253 +212 +188 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +255 +215 +190 +194 +173 +157 +101 +100 +92 +51 +62 +63 +48 +58 +59 +48 +58 +59 +51 +62 +63 +48 +58 +59 +48 +58 +59 +97 +98 +96 +194 +173 +157 +146 +135 +124 +56 +64 +60 +145 +114 +49 +168 +127 +42 +158 +125 +46 +168 +127 +42 +129 +106 +52 +48 +58 +59 +194 +173 +157 +255 +215 +190 +176 +156 +141 +76 +78 +76 +48 +58 +59 +55 +66 +67 +115 +102 +92 +234 +168 +124 +245 +169 +119 +247 +165 +111 +247 +165 +111 +247 +165 +111 +245 +169 +119 +249 +174 +124 +245 +179 +138 +209 +171 +139 +144 +125 +110 +76 +78 +76 +48 +58 +59 +48 +58 +59 +51 +62 +63 +51 +62 +63 +48 +58 +59 +48 +58 +59 +58 +69 +70 +101 +100 +92 +154 +133 +118 +219 +170 +138 +252 +185 +144 +248 +180 +134 +249 +174 +124 +245 +169 +119 +249 +174 +124 +250 +176 +132 +230 +173 +136 +124 +111 +99 +55 +66 +67 +43 +57 +62 +58 +69 +70 +137 +127 +115 +245 +212 +186 +245 +212 +186 +161 +144 +134 +70 +79 +77 +43 +57 +62 +51 +62 +63 +51 +62 +63 +48 +58 +59 +43 +57 +62 +84 +85 +82 +154 +133 +118 +240 +181 +138 +249 +174 +124 +247 +165 +111 +249 +152 +92 +243 +141 +78 +241 +138 +68 +242 +133 +67 +241 +138 +68 +241 +145 +79 +246 +156 +93 +247 +165 +111 +250 +176 +132 +219 +170 +138 +144 +125 +110 +77 +85 +81 +43 +57 +62 +48 +58 +59 +48 +58 +59 +51 +62 +63 +48 +58 +59 +43 +57 +62 +77 +85 +81 +150 +125 +114 +219 +170 +138 +250 +176 +132 +247 +165 +111 +246 +156 +93 +241 +145 +79 +241 +138 +68 +241 +138 +68 +241 +138 +68 +243 +141 +78 +249 +152 +92 +247 +165 +111 +250 +176 +132 +230 +173 +136 +154 +133 +118 +77 +85 +81 +43 +57 +62 +48 +58 +59 +51 +62 +63 +48 +58 +59 +43 +57 +62 +70 +79 +77 +161 +144 +134 +245 +212 +186 +255 +215 +190 +161 +144 +134 +63 +74 +74 +43 +57 +62 +51 +62 +63 +109 +106 +99 +217 +187 +166 +251 +209 +178 +238 +205 +179 +137 +127 +115 +58 +69 +70 +43 +57 +62 +58 +69 +70 +139 +115 +96 +238 +159 +107 +249 +152 +92 +241 +138 +68 +247 +130 +53 +238 +123 +45 +239 +117 +44 +247 +118 +39 +238 +123 +45 +241 +132 +59 +241 +145 +79 +249 +159 +103 +249 +174 +124 +240 +181 +138 +167 +142 +123 +91 +92 +89 +43 +57 +62 +48 +58 +59 +51 +62 +63 +48 +58 +59 +43 +57 +62 +63 +74 +74 +137 +127 +115 +234 +204 +183 +255 +215 +190 +146 +135 +124 +63 +74 +74 +43 +57 +62 +51 +62 +63 +115 +102 +92 +236 +186 +153 +251 +192 +154 +251 +192 +154 +236 +186 +153 +133 +120 +107 +43 +57 +62 +48 +58 +59 +48 +58 +59 +55 +66 +67 +158 +130 +108 +248 +180 +134 +250 +176 +132 +249 +174 +124 +249 +174 +124 +250 +176 +132 +252 +185 +144 +239 +182 +144 +154 +133 +118 +84 +85 +82 +43 +57 +62 +48 +58 +59 +48 +58 +59 +51 +62 +63 +48 +58 +59 +43 +57 +62 +70 +79 +77 +133 +120 +107 +219 +170 +138 +245 +179 +138 +250 +176 +132 +245 +169 +119 +247 +165 +111 +247 +165 +111 +245 +169 +119 +249 +174 +124 +187 +140 +108 +81 +77 +76 +43 +57 +62 +43 +57 +62 +99 +90 +79 +214 +151 +109 +249 +159 +103 +247 +150 +84 +247 +143 +74 +241 +138 +68 +241 +138 +68 +249 +146 +83 +249 +159 +103 +250 +176 +132 +250 +197 +158 +255 +215 +190 +255 +215 +190 +245 +212 +186 +161 +144 +134 +77 +85 +81 +43 +57 +62 +48 +58 +59 +51 +62 +63 +48 +58 +59 +41 +58 +57 +55 +66 +67 +120 +114 +108 +217 +187 +166 +97 +98 +96 +95 +78 +64 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +112 +85 +63 +70 +79 +77 +249 +189 +146 +247 +165 +111 +243 +141 +78 +247 +130 +53 +238 +116 +34 +236 +102 +14 +243 +101 +2 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +235 +94 +9 +235 +94 +9 +236 +102 +14 +235 +107 +16 +236 +108 +29 +239 +117 +44 +238 +123 +53 +242 +133 +67 +241 +145 +79 +241 +153 +96 +247 +165 +111 +249 +174 +124 +250 +176 +132 +245 +179 +138 +252 +185 +144 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +249 +189 +146 +252 +185 +144 +245 +179 +138 +250 +176 +132 +249 +174 +124 +245 +169 +119 +245 +162 +103 +241 +153 +96 +241 +145 +86 +243 +141 +78 +241 +138 +68 +242 +133 +67 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +53 +241 +132 +59 +242 +133 +67 +243 +141 +78 +241 +145 +86 +249 +159 +103 +238 +159 +107 +210 +156 +119 +210 +156 +119 +240 +181 +138 +249 +189 +146 +251 +192 +154 +251 +192 +154 +250 +197 +158 +212 +173 +150 +186 +157 +134 +167 +142 +123 +167 +142 +123 +195 +157 +134 +219 +170 +138 +248 +180 +134 +245 +169 +119 +245 +162 +103 +247 +150 +84 +243 +141 +78 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +138 +68 +247 +150 +84 +245 +162 +103 +245 +169 +119 +250 +176 +132 +239 +182 +144 +219 +170 +138 +186 +157 +134 +167 +142 +123 +167 +142 +123 +172 +150 +134 +195 +157 +134 +219 +170 +138 +239 +182 +144 +248 +180 +134 +245 +169 +119 +245 +162 +103 +241 +153 +96 +241 +145 +79 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +145 +79 +241 +153 +96 +247 +165 +111 +249 +174 +124 +245 +179 +138 +219 +170 +138 +186 +157 +134 +167 +142 +123 +167 +142 +123 +186 +157 +134 +212 +173 +150 +250 +197 +158 +251 +192 +154 +251 +192 +154 +249 +189 +146 +239 +182 +144 +219 +170 +138 +219 +170 +138 +239 +182 +144 +250 +197 +158 +250 +200 +166 +251 +209 +178 +238 +205 +179 +172 +150 +134 +137 +127 +115 +161 +144 +134 +217 +187 +166 +253 +212 +188 +227 +196 +175 +194 +173 +157 +176 +156 +141 +172 +150 +134 +187 +166 +150 +217 +187 +166 +255 +215 +190 +245 +212 +186 +76 +78 +76 +75 +74 +61 +158 +125 +46 +158 +125 +46 +158 +125 +46 +171 +129 +45 +105 +93 +60 +58 +69 +70 +217 +187 +166 +255 +215 +190 +253 +204 +176 +236 +186 +153 +210 +156 +119 +210 +156 +119 +247 +165 +111 +249 +159 +103 +249 +152 +92 +241 +145 +86 +243 +141 +78 +241 +145 +79 +247 +150 +84 +241 +153 +96 +245 +162 +103 +245 +169 +119 +248 +180 +134 +239 +182 +144 +209 +171 +139 +186 +157 +134 +167 +142 +123 +167 +142 +123 +178 +146 +122 +195 +157 +134 +230 +173 +136 +239 +182 +144 +250 +176 +132 +245 +169 +119 +247 +165 +111 +249 +159 +103 +241 +153 +96 +249 +152 +92 +249 +152 +92 +241 +153 +96 +245 +162 +103 +247 +165 +111 +210 +156 +119 +210 +156 +119 +230 +173 +136 +249 +189 +146 +249 +189 +146 +251 +192 +154 +250 +197 +158 +236 +186 +153 +203 +161 +131 +167 +142 +123 +167 +142 +123 +178 +146 +122 +203 +161 +131 +240 +181 +138 +249 +174 +124 +247 +165 +111 +241 +153 +96 +243 +141 +78 +242 +133 +67 +238 +123 +53 +238 +123 +45 +238 +123 +45 +238 +123 +45 +241 +132 +59 +241 +138 +68 +241 +145 +86 +249 +159 +103 +245 +169 +119 +250 +176 +132 +240 +181 +138 +209 +171 +139 +178 +146 +122 +167 +142 +123 +167 +142 +123 +186 +157 +134 +209 +171 +139 +240 +181 +138 +250 +176 +132 +245 +169 +119 +249 +159 +103 +241 +145 +86 +241 +138 +68 +241 +132 +59 +238 +123 +45 +238 +123 +45 +238 +123 +45 +247 +130 +53 +242 +133 +67 +241 +145 +79 +241 +153 +96 +247 +165 +111 +250 +176 +132 +240 +181 +138 +203 +161 +131 +178 +146 +122 +167 +142 +123 +167 +142 +123 +195 +157 +134 +236 +186 +153 +251 +192 +154 +251 +192 +154 +249 +189 +146 +249 +189 +146 +230 +173 +136 +203 +161 +131 +219 +170 +138 +245 +179 +138 +245 +179 +138 +245 +179 +138 +245 +179 +138 +248 +180 +134 +234 +168 +124 +214 +151 +109 +214 +151 +109 +245 +162 +103 +241 +145 +86 +241 +138 +68 +238 +123 +53 +239 +117 +44 +238 +116 +34 +236 +108 +29 +236 +108 +29 +238 +116 +34 +238 +123 +45 +241 +132 +59 +243 +141 +78 +241 +153 +96 +247 +165 +111 +249 +174 +124 +240 +181 +138 +209 +171 +139 +178 +146 +122 +167 +142 +123 +167 +142 +123 +195 +157 +134 +236 +186 +153 +250 +197 +158 +251 +192 +154 +249 +189 +146 +249 +189 +146 +230 +173 +136 +210 +156 +119 +210 +156 +119 +250 +176 +132 +249 +174 +124 +249 +174 +124 +249 +174 +124 +249 +174 +124 +250 +176 +132 +210 +156 +119 +162 +125 +96 +162 +125 +96 +214 +151 +109 +247 +165 +111 +245 +162 +103 +241 +153 +96 +241 +153 +96 +241 +153 +96 +249 +159 +103 +247 +165 +111 +245 +169 +119 +250 +176 +132 +240 +181 +138 +209 +171 +139 +186 +157 +134 +167 +142 +123 +167 +142 +123 +178 +146 +122 +203 +161 +131 +239 +182 +144 +248 +180 +134 +245 +169 +119 +245 +162 +103 +241 +153 +96 +241 +145 +86 +241 +145 +86 +241 +145 +86 +247 +150 +84 +241 +153 +96 +245 +162 +103 +238 +159 +107 +204 +141 +99 +214 +151 +109 +241 +153 +96 +249 +152 +92 +243 +141 +78 +242 +133 +67 +241 +132 +59 +241 +132 +59 +241 +138 +68 +241 +145 +79 +245 +162 +103 +248 +180 +134 +212 +173 +150 +146 +135 +124 +137 +127 +115 +176 +156 +141 +234 +204 +183 +253 +212 +188 +217 +187 +166 +187 +166 +150 +172 +150 +134 +176 +156 +141 +194 +173 +157 +234 +204 +183 +255 +215 +190 +194 +173 +157 +43 +57 +62 +139 +96 +61 +234 +126 +45 +224 +123 +55 +227 +126 +50 +227 +126 +50 +89 +75 +66 +101 +100 +92 +245 +179 +138 +245 +162 +103 +241 +138 +68 +238 +123 +45 +236 +108 +29 +236 +102 +14 +235 +94 +9 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +235 +94 +9 +235 +94 +9 +236 +102 +14 +235 +107 +16 +236 +108 +29 +238 +116 +34 +238 +123 +45 +241 +132 +59 +241 +138 +68 +241 +145 +79 +249 +152 +92 +241 +153 +96 +245 +162 +103 +245 +162 +103 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +245 +162 +103 +245 +162 +103 +241 +153 +96 +241 +153 +96 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +53 +241 +132 +59 +243 +141 +78 +241 +145 +86 +241 +153 +96 +245 +162 +103 +245 +162 +103 +247 +165 +111 +247 +165 +111 +245 +169 +119 +245 +169 +119 +245 +169 +119 +249 +174 +124 +245 +169 +119 +245 +169 +119 +245 +169 +119 +247 +165 +111 +241 +153 +96 +241 +145 +86 +243 +141 +78 +241 +132 +59 +238 +123 +53 +239 +117 +44 +238 +116 +34 +238 +116 +34 +238 +116 +34 +239 +117 +44 +238 +123 +45 +241 +132 +59 +241 +138 +68 +241 +145 +86 +241 +153 +96 +245 +162 +103 +245 +169 +119 +249 +174 +124 +250 +176 +132 +250 +176 +132 +250 +176 +132 +249 +174 +124 +245 +169 +119 +247 +165 +111 +241 +153 +96 +241 +145 +86 +243 +141 +78 +242 +133 +67 +241 +132 +59 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +241 +132 +59 +242 +133 +67 +243 +141 +78 +249 +152 +92 +245 +162 +103 +247 +165 +111 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +247 +165 +111 +247 +165 +111 +247 +165 +111 +247 +165 +111 +245 +169 +119 +249 +174 +124 +245 +179 +138 +251 +192 +154 +232 +190 +161 +101 +100 +92 +51 +62 +63 +63 +69 +60 +51 +62 +63 +55 +66 +67 +109 +106 +99 +176 +156 +141 +234 +204 +183 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +207 +178 +158 +91 +92 +89 +51 +62 +63 +129 +106 +52 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +75 +74 +61 +91 +92 +89 +245 +212 +186 +250 +200 +166 +252 +185 +144 +249 +174 +124 +247 +165 +111 +241 +153 +96 +241 +145 +79 +241 +138 +68 +242 +133 +67 +241 +132 +59 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +138 +68 +243 +141 +78 +241 +145 +86 +241 +153 +96 +247 +165 +111 +245 +169 +119 +249 +174 +124 +250 +176 +132 +250 +176 +132 +249 +174 +124 +249 +174 +124 +245 +169 +119 +245 +162 +103 +241 +153 +96 +241 +145 +86 +241 +145 +79 +241 +138 +68 +242 +133 +67 +242 +133 +67 +242 +133 +67 +241 +138 +68 +243 +141 +78 +241 +145 +86 +241 +153 +96 +241 +153 +96 +245 +162 +103 +245 +162 +103 +247 +165 +111 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +247 +165 +111 +245 +162 +103 +241 +153 +96 +241 +145 +79 +241 +138 +68 +238 +123 +53 +238 +123 +45 +238 +116 +34 +235 +113 +30 +235 +113 +30 +238 +116 +34 +239 +117 +44 +238 +123 +45 +241 +132 +59 +241 +138 +68 +241 +145 +86 +241 +153 +96 +245 +162 +103 +245 +169 +119 +245 +169 +119 +249 +174 +124 +249 +174 +124 +245 +169 +119 +245 +169 +119 +245 +162 +103 +241 +153 +96 +241 +145 +86 +241 +138 +68 +241 +132 +59 +238 +123 +45 +239 +117 +44 +238 +116 +34 +235 +113 +30 +235 +113 +30 +238 +116 +34 +238 +123 +45 +241 +132 +59 +241 +138 +68 +241 +145 +86 +241 +153 +96 +245 +162 +103 +247 +165 +111 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +247 +165 +111 +247 +165 +111 +247 +165 +111 +245 +162 +103 +245 +162 +103 +245 +162 +103 +245 +162 +103 +245 +162 +103 +245 +162 +103 +245 +162 +103 +245 +162 +103 +241 +153 +96 +241 +153 +96 +241 +145 +86 +243 +141 +78 +241 +132 +59 +238 +123 +53 +239 +117 +44 +235 +113 +30 +236 +108 +29 +235 +107 +16 +235 +107 +16 +236 +108 +29 +235 +113 +30 +239 +117 +44 +238 +123 +53 +242 +133 +67 +241 +145 +79 +241 +153 +96 +245 +162 +103 +247 +165 +111 +245 +169 +119 +245 +169 +119 +249 +174 +124 +245 +169 +119 +245 +169 +119 +245 +169 +119 +245 +169 +119 +247 +165 +111 +247 +165 +111 +245 +162 +103 +245 +162 +103 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +153 +96 +249 +152 +92 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +138 +68 +243 +141 +78 +241 +145 +86 +241 +153 +96 +245 +162 +103 +245 +169 +119 +245 +169 +119 +249 +174 +124 +249 +174 +124 +249 +174 +124 +245 +169 +119 +247 +165 +111 +241 +153 +96 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +138 +68 +243 +141 +78 +241 +145 +79 +241 +145 +79 +241 +145 +79 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +53 +242 +133 +67 +241 +145 +86 +247 +165 +111 +210 +156 +119 +63 +74 +74 +62 +63 +61 +69 +69 +61 +48 +58 +59 +63 +74 +74 +133 +120 +107 +194 +173 +157 +245 +212 +186 +255 +215 +190 +255 +215 +190 +255 +215 +190 +245 +212 +186 +176 +156 +141 +55 +66 +67 +76 +70 +64 +212 +120 +56 +227 +126 +50 +224 +123 +55 +234 +125 +52 +194 +112 +58 +56 +64 +60 +154 +133 +118 +250 +176 +132 +241 +153 +96 +242 +133 +67 +239 +117 +44 +236 +108 +29 +236 +102 +14 +235 +94 +9 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +236 +108 +29 +235 +113 +30 +239 +117 +44 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +138 +68 +241 +138 +68 +243 +141 +78 +243 +141 +78 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +79 +243 +141 +78 +243 +141 +78 +243 +141 +78 +241 +138 +68 +241 +138 +68 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +45 +238 +116 +34 +238 +116 +34 +236 +108 +29 +236 +108 +29 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +123 +45 +238 +123 +53 +241 +132 +59 +242 +133 +67 +241 +138 +68 +243 +141 +78 +243 +141 +78 +241 +145 +79 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +53 +239 +117 +44 +238 +116 +34 +236 +108 +29 +236 +108 +29 +235 +107 +16 +235 +107 +16 +236 +108 +29 +238 +116 +34 +239 +117 +44 +238 +123 +45 +241 +132 +59 +241 +138 +68 +243 +141 +78 +241 +145 +86 +249 +152 +92 +241 +153 +96 +241 +153 +96 +241 +153 +96 +249 +152 +92 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +53 +238 +123 +45 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +138 +68 +241 +145 +79 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +79 +241 +145 +79 +241 +145 +79 +241 +145 +86 +241 +153 +96 +245 +162 +103 +245 +169 +119 +245 +179 +138 +144 +125 +110 +51 +62 +63 +117 +98 +55 +158 +125 +46 +145 +114 +49 +105 +93 +60 +69 +69 +61 +48 +58 +59 +58 +69 +70 +91 +92 +89 +120 +114 +108 +120 +114 +108 +91 +92 +89 +48 +58 +59 +56 +64 +60 +123 +102 +54 +171 +129 +45 +158 +125 +46 +158 +125 +46 +168 +127 +42 +137 +110 +49 +48 +58 +59 +161 +144 +134 +250 +197 +158 +248 +180 +134 +247 +165 +111 +241 +153 +96 +241 +145 +79 +241 +138 +68 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +138 +68 +243 +141 +78 +241 +145 +86 +249 +152 +92 +241 +153 +96 +241 +153 +96 +241 +153 +96 +241 +145 +86 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +53 +238 +123 +45 +238 +123 +45 +239 +117 +44 +238 +123 +45 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +138 +68 +241 +138 +68 +243 +141 +78 +241 +145 +79 +241 +145 +79 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +79 +243 +141 +78 +242 +133 +67 +241 +132 +59 +238 +123 +45 +238 +116 +34 +235 +113 +30 +236 +108 +29 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +108 +29 +235 +113 +30 +239 +117 +44 +238 +123 +45 +241 +132 +59 +241 +138 +68 +243 +141 +78 +241 +145 +86 +241 +145 +86 +241 +153 +96 +241 +153 +96 +241 +145 +86 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +45 +239 +117 +44 +235 +113 +30 +236 +108 +29 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +108 +29 +235 +113 +30 +239 +117 +44 +238 +123 +45 +241 +132 +59 +242 +133 +67 +243 +141 +78 +241 +145 +79 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +79 +241 +145 +79 +243 +141 +78 +243 +141 +78 +243 +141 +78 +243 +141 +78 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +138 +68 +242 +133 +67 +241 +132 +59 +238 +123 +53 +238 +123 +45 +238 +116 +34 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +238 +116 +34 +238 +123 +45 +238 +123 +53 +242 +133 +67 +241 +138 +68 +241 +145 +79 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +86 +241 +145 +79 +243 +141 +78 +243 +141 +78 +241 +138 +68 +241 +138 +68 +241 +138 +68 +242 +133 +67 +242 +133 +67 +242 +133 +67 +241 +138 +68 +241 +138 +68 +241 +138 +68 +241 +138 +68 +242 +133 +67 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +138 +68 +243 +141 +78 +241 +145 +86 +241 +145 +86 +241 +153 +96 +241 +153 +96 +241 +145 +86 +241 +145 +86 +243 +141 +78 +241 +138 +68 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +239 +117 +44 +239 +117 +44 +239 +117 +44 +238 +123 +45 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +239 +117 +44 +239 +117 +44 +238 +123 +53 +242 +133 +67 +241 +145 +86 +238 +159 +107 +84 +85 +82 +69 +69 +61 +188 +112 +56 +214 +121 +50 +173 +106 +60 +112 +85 +63 +62 +63 +61 +41 +58 +57 +63 +74 +74 +97 +98 +96 +120 +114 +108 +109 +106 +99 +77 +85 +81 +41 +58 +57 +81 +73 +62 +194 +112 +58 +234 +125 +52 +224 +123 +55 +224 +123 +55 +234 +126 +45 +125 +90 +64 +51 +62 +63 +209 +171 +139 +245 +169 +119 +241 +145 +86 +241 +132 +59 +238 +116 +34 +235 +107 +16 +236 +102 +14 +235 +94 +9 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +237 +95 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +235 +94 +9 +235 +94 +9 +236 +102 +14 +235 +107 +16 +236 +108 +29 +235 +113 +30 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +45 +238 +123 +45 +239 +117 +44 +239 +117 +44 +238 +116 +34 +235 +113 +30 +236 +108 +29 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +238 +116 +34 +239 +117 +44 +239 +117 +44 +238 +123 +45 +238 +123 +45 +238 +123 +53 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +123 +45 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +236 +108 +29 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +138 +68 +241 +145 +86 +238 +159 +107 +234 +168 +124 +84 +85 +82 +83 +78 +61 +171 +129 +45 +158 +125 +46 +168 +127 +42 +168 +127 +42 +158 +125 +46 +129 +106 +52 +100 +89 +56 +83 +78 +61 +75 +74 +61 +69 +69 +61 +83 +78 +61 +105 +93 +60 +152 +119 +47 +168 +127 +42 +158 +125 +46 +158 +125 +46 +161 +127 +40 +168 +127 +42 +75 +74 +61 +63 +74 +74 +236 +186 +153 +245 +179 +138 +238 +159 +107 +241 +145 +86 +241 +138 +68 +241 +132 +59 +238 +123 +45 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +45 +238 +123 +53 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +123 +45 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +45 +238 +116 +34 +235 +113 +30 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +123 +45 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +239 +117 +44 +239 +117 +44 +238 +116 +34 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +53 +238 +123 +53 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +239 +117 +44 +239 +117 +44 +239 +117 +44 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +238 +123 +45 +239 +117 +44 +239 +117 +44 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +239 +117 +44 +238 +123 +45 +238 +123 +53 +238 +123 +53 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +241 +132 +59 +238 +123 +53 +238 +123 +45 +239 +117 +44 +238 +116 +34 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +123 +45 +241 +132 +59 +241 +145 +86 +204 +141 +99 +41 +58 +57 +155 +100 +63 +234 +126 +45 +227 +126 +50 +227 +126 +50 +234 +125 +52 +209 +117 +53 +155 +100 +63 +118 +86 +65 +89 +75 +66 +81 +73 +62 +81 +73 +62 +106 +82 +65 +155 +100 +63 +214 +121 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +194 +112 +58 +56 +64 +60 +109 +106 +99 +245 +179 +138 +245 +162 +103 +241 +138 +68 +238 +123 +45 +235 +113 +30 +236 +102 +14 +235 +94 +9 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +235 +113 +30 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +230 +97 +5 +230 +97 +5 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +113 +30 +235 +113 +30 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +239 +117 +44 +239 +117 +44 +239 +117 +44 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +235 +113 +30 +238 +116 +34 +238 +123 +45 +238 +123 +53 +241 +138 +68 +241 +145 +86 +238 +159 +107 +89 +84 +82 +75 +74 +61 +168 +127 +42 +168 +127 +42 +158 +125 +46 +158 +125 +46 +161 +127 +40 +168 +127 +42 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +95 +87 +59 +48 +58 +59 +167 +142 +123 +245 +179 +138 +238 +159 +107 +241 +145 +86 +242 +133 +67 +238 +123 +45 +238 +116 +34 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +239 +117 +44 +239 +117 +44 +239 +117 +44 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +113 +30 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +235 +113 +30 +235 +113 +30 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +230 +97 +5 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +235 +113 +30 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +236 +108 +29 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +113 +30 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +238 +116 +34 +235 +113 +30 +236 +108 +29 +236 +108 +29 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +236 +108 +29 +236 +108 +29 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +108 +29 +235 +113 +30 +239 +117 +44 +241 +132 +59 +241 +145 +79 +204 +141 +99 +48 +58 +59 +139 +96 +61 +234 +126 +45 +224 +123 +55 +224 +123 +55 +224 +123 +55 +227 +126 +50 +234 +126 +45 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +126 +45 +234 +126 +45 +227 +126 +50 +224 +123 +55 +224 +123 +55 +234 +125 +52 +214 +121 +50 +81 +73 +62 +58 +69 +70 +219 +170 +138 +245 +169 +119 +241 +145 +86 +241 +132 +59 +239 +117 +44 +236 +108 +29 +236 +102 +14 +235 +94 +9 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +235 +94 +9 +230 +97 +5 +229 +102 +7 +229 +102 +7 +236 +102 +14 +236 +102 +14 +224 +98 +18 +224 +98 +18 +224 +98 +18 +236 +102 +14 +224 +98 +18 +236 +102 +14 +236 +102 +14 +224 +98 +18 +224 +98 +18 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +224 +98 +18 +236 +102 +14 +236 +102 +14 +229 +102 +7 +229 +102 +7 +230 +97 +5 +235 +94 +9 +235 +94 +9 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +235 +94 +9 +230 +97 +5 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +224 +98 +18 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +235 +94 +9 +230 +97 +5 +229 +102 +7 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +224 +98 +18 +236 +102 +14 +229 +102 +7 +230 +97 +5 +235 +94 +9 +235 +94 +9 +230 +97 +5 +231 +91 +2 +230 +97 +5 +235 +94 +9 +235 +94 +9 +235 +94 +9 +230 +97 +5 +229 +102 +7 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +224 +98 +18 +236 +102 +14 +235 +107 +16 +236 +108 +29 +239 +117 +44 +234 +125 +52 +231 +136 +72 +241 +153 +96 +162 +125 +96 +48 +58 +59 +95 +87 +59 +158 +125 +46 +171 +129 +45 +168 +127 +42 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +158 +125 +46 +168 +127 +42 +171 +129 +45 +158 +125 +46 +95 +87 +59 +48 +58 +59 +124 +111 +99 +245 +179 +138 +247 +165 +111 +241 +145 +86 +241 +132 +59 +238 +123 +45 +238 +116 +34 +236 +108 +29 +224 +98 +18 +229 +102 +7 +230 +97 +5 +235 +94 +9 +235 +94 +9 +230 +97 +5 +230 +97 +5 +230 +97 +5 +235 +94 +9 +230 +97 +5 +229 +102 +7 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +94 +9 +230 +97 +5 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +236 +102 +14 +224 +98 +18 +224 +98 +18 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +224 +98 +18 +236 +102 +14 +229 +102 +7 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +229 +102 +7 +236 +102 +14 +224 +98 +18 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +224 +98 +18 +236 +102 +14 +229 +102 +7 +230 +97 +5 +235 +94 +9 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +235 +94 +9 +235 +94 +9 +229 +102 +7 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +235 +107 +16 +236 +102 +14 +224 +98 +18 +224 +98 +18 +236 +102 +14 +224 +98 +18 +224 +98 +18 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +229 +102 +7 +236 +102 +14 +235 +94 +9 +230 +97 +5 +235 +94 +9 +235 +94 +9 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +235 +94 +9 +230 +97 +5 +230 +97 +5 +229 +102 +7 +236 +102 +14 +224 +98 +18 +236 +102 +14 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +224 +98 +18 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +236 +102 +14 +224 +98 +18 +236 +102 +14 +236 +102 +14 +236 +102 +14 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +236 +102 +14 +236 +102 +14 +224 +98 +18 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +235 +107 +16 +236 +102 +14 +236 +102 +14 +236 +102 +14 +229 +102 +7 +230 +97 +5 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +235 +94 +9 +230 +97 +5 +235 +94 +9 +236 +102 +14 +236 +102 +14 +236 +102 +14 +229 +102 +7 +230 +97 +5 +229 +102 +7 +224 +98 +18 +236 +108 +29 +238 +116 +34 +238 +123 +53 +243 +141 +78 +241 +153 +96 +99 +90 +79 +56 +64 +60 +155 +100 +63 +234 +126 +45 +234 +126 +45 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +227 +126 +50 +224 +123 +55 +224 +123 +55 +227 +126 +50 +227 +126 +50 +234 +126 +45 +194 +112 +58 +81 +73 +62 +48 +58 +59 +178 +146 +122 +249 +174 +124 +241 +153 +96 +231 +136 +72 +234 +125 +52 +238 +116 +34 +235 +107 +16 +229 +102 +7 +235 +94 +9 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +229 +102 +7 +236 +102 +14 +235 +113 +30 +239 +117 +44 +230 +128 +60 +236 +147 +85 +238 +159 +107 +139 +115 +96 +48 +58 +59 +69 +69 +61 +111 +94 +57 +145 +114 +49 +158 +125 +46 +168 +127 +42 +171 +129 +45 +168 +127 +42 +168 +127 +42 +168 +127 +42 +168 +127 +42 +171 +129 +45 +168 +127 +42 +152 +119 +47 +117 +98 +55 +69 +69 +61 +48 +58 +59 +144 +125 +110 +240 +181 +138 +247 +165 +111 +236 +147 +85 +242 +133 +67 +238 +123 +45 +235 +113 +30 +235 +107 +16 +236 +102 +14 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +230 +97 +5 +229 +102 +7 +235 +107 +16 +235 +113 +30 +238 +123 +45 +242 +133 +67 +241 +153 +96 +214 +151 +109 +99 +90 +79 +48 +58 +59 +95 +78 +64 +155 +100 +63 +209 +117 +53 +227 +126 +50 +234 +125 +52 +234 +125 +52 +234 +125 +52 +234 +125 +52 +234 +125 +52 +234 +126 +45 +234 +126 +45 +227 +126 +50 +194 +112 +58 +125 +90 +64 +56 +64 +60 +58 +69 +70 +178 +146 +122 +250 +176 +132 +238 +159 +107 +241 +145 +79 +234 +125 +52 +239 +117 +44 +236 +108 +29 +224 +98 +18 +230 +97 +5 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +230 +97 +5 +229 +102 +7 +223 +103 +18 +226 +110 +35 +234 +125 +52 +231 +136 +72 +241 +153 +96 +245 +169 +119 +178 +146 +122 +101 +100 +92 +48 +58 +59 +56 +64 +60 +69 +69 +61 +95 +87 +59 +111 +94 +57 +123 +102 +54 +129 +106 +52 +129 +106 +52 +123 +102 +54 +105 +93 +60 +88 +82 +59 +62 +63 +61 +48 +58 +59 +91 +92 +89 +186 +157 +134 +245 +179 +138 +238 +159 +107 +236 +147 +85 +230 +128 +60 +234 +125 +52 +226 +110 +35 +223 +103 +18 +224 +98 +18 +230 +97 +5 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +230 +97 +5 +224 +98 +18 +236 +108 +29 +239 +117 +44 +230 +123 +57 +243 +141 +78 +238 +159 +107 +234 +168 +124 +158 +130 +108 +76 +78 +76 +41 +58 +57 +62 +63 +61 +95 +78 +64 +125 +90 +64 +146 +97 +64 +163 +104 +61 +173 +106 +60 +163 +104 +61 +155 +100 +63 +125 +90 +64 +95 +78 +64 +56 +64 +60 +43 +57 +62 +124 +111 +99 +209 +171 +139 +234 +168 +124 +238 +159 +107 +241 +145 +79 +230 +128 +60 +239 +117 +44 +236 +108 +29 +236 +102 +14 +229 +102 +7 +230 +97 +5 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +231 +91 +2 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +226 +93 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +230 +97 +5 +230 +97 +5 +224 +98 +18 +236 +108 +29 +226 +110 +35 +230 +123 +57 +231 +136 +72 +241 +153 +96 +238 +159 +107 +240 +181 +138 +203 +161 +131 +150 +125 +114 +101 +100 +92 +76 +78 +76 +55 +66 +67 +48 +58 +59 +48 +58 +59 +48 +58 +59 +48 +58 +59 +58 +69 +70 +84 +85 +82 +124 +111 +99 +178 +146 +122 +240 +181 +138 +234 +168 +124 +238 +159 +107 +236 +147 +85 +230 +128 +60 +234 +125 +52 +226 +110 +35 +223 +103 +18 +224 +98 +18 +230 +97 +5 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +230 +97 +5 +224 +98 +18 +223 +103 +18 +226 +110 +35 +225 +124 +48 +230 +128 +60 +236 +147 +85 +241 +153 +96 +234 +168 +124 +230 +173 +136 +186 +157 +134 +133 +120 +107 +91 +92 +89 +63 +74 +74 +51 +62 +63 +48 +58 +59 +48 +58 +59 +48 +58 +59 +51 +62 +63 +63 +74 +74 +91 +92 +89 +144 +125 +110 +203 +161 +131 +240 +181 +138 +245 +169 +119 +241 +153 +96 +241 +145 +79 +230 +128 +60 +225 +124 +48 +226 +110 +35 +223 +103 +18 +224 +98 +18 +230 +97 +5 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +230 +97 +5 +224 +98 +18 +223 +103 +18 +226 +110 +35 +239 +117 +44 +230 +123 +57 +231 +136 +72 +236 +147 +85 +238 +159 +107 +245 +169 +119 +234 +168 +124 +240 +181 +138 +239 +182 +144 +236 +186 +153 +250 +197 +158 +250 +197 +158 +250 +197 +158 +251 +192 +154 +236 +186 +153 +239 +182 +144 +245 +179 +138 +234 +168 +124 +238 +159 +107 +241 +153 +96 +231 +136 +72 +230 +128 +60 +225 +124 +48 +226 +110 +35 +223 +103 +18 +224 +98 +18 +230 +97 +5 +230 +97 +5 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +230 +97 +5 +224 +98 +18 +223 +103 +18 +226 +110 +35 +225 +124 +48 +230 +128 +60 +231 +136 +72 +241 +153 +96 +238 +159 +107 +234 +168 +124 +240 +181 +138 +239 +182 +144 +236 +186 +153 +251 +192 +154 +250 +197 +158 +250 +197 +158 +250 +197 +158 +236 +186 +153 +239 +182 +144 +240 +181 +138 +234 +168 +124 +245 +169 +119 +238 +159 +107 +236 +147 +85 +231 +136 +72 +230 +123 +57 +239 +117 +44 +226 +110 +35 +223 +103 +18 +224 +98 +18 +230 +97 +5 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +225 +92 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +220 +93 +11 +220 +93 +11 +224 +98 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +225 +124 +48 +230 +128 +60 +231 +136 +72 +236 +147 +85 +241 +153 +96 +238 +159 +107 +238 +159 +107 +234 +168 +124 +234 +168 +124 +234 +168 +124 +234 +168 +124 +234 +168 +124 +238 +159 +107 +238 +159 +107 +241 +153 +96 +236 +147 +85 +231 +136 +72 +230 +128 +60 +230 +123 +57 +226 +110 +35 +226 +110 +35 +223 +103 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +220 +93 +11 +220 +93 +11 +224 +98 +18 +223 +103 +18 +226 +110 +35 +225 +124 +48 +230 +123 +57 +230 +128 +60 +231 +136 +72 +236 +147 +85 +241 +153 +96 +238 +159 +107 +238 +159 +107 +234 +168 +124 +234 +168 +124 +234 +168 +124 +234 +168 +124 +234 +168 +124 +238 +159 +107 +238 +159 +107 +241 +153 +96 +236 +147 +85 +231 +136 +72 +230 +128 +60 +225 +124 +48 +226 +110 +35 +226 +110 +35 +223 +103 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +220 +93 +11 +220 +93 +11 +220 +93 +11 +224 +98 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +225 +124 +48 +230 +128 +60 +230 +128 +60 +231 +136 +72 +231 +136 +72 +236 +147 +85 +236 +147 +85 +236 +147 +85 +236 +147 +85 +236 +147 +85 +231 +136 +72 +231 +136 +72 +231 +136 +72 +230 +128 +60 +227 +126 +50 +225 +124 +48 +226 +110 +35 +223 +103 +18 +223 +103 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +218 +87 +5 +220 +93 +11 +220 +93 +11 +224 +98 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +225 +124 +48 +230 +123 +57 +230 +128 +60 +231 +136 +72 +231 +136 +72 +231 +136 +72 +236 +147 +85 +236 +147 +85 +236 +147 +85 +236 +147 +85 +236 +147 +85 +231 +136 +72 +231 +136 +72 +230 +128 +60 +230 +123 +57 +225 +124 +48 +226 +110 +35 +226 +110 +35 +223 +103 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +220 +93 +11 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +218 +87 +5 +218 +87 +5 +220 +93 +11 +220 +93 +11 +224 +98 +18 +223 +103 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +225 +124 +48 +225 +124 +48 +225 +124 +48 +224 +123 +55 +224 +123 +55 +224 +123 +55 +230 +123 +57 +224 +123 +55 +224 +123 +55 +225 +124 +48 +225 +124 +48 +226 +110 +35 +226 +110 +35 +223 +103 +18 +223 +103 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +218 +87 +5 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +218 +87 +5 +218 +87 +5 +220 +93 +11 +220 +93 +11 +220 +93 +11 +224 +98 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +226 +110 +35 +225 +124 +48 +225 +124 +48 +224 +123 +55 +230 +123 +57 +230 +123 +57 +230 +123 +57 +230 +123 +57 +230 +123 +57 +225 +124 +48 +225 +124 +48 +226 +110 +35 +226 +110 +35 +226 +110 +35 +223 +103 +18 +224 +98 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +221 +89 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +218 +87 +5 +218 +87 +5 +218 +87 +5 +220 +93 +11 +220 +93 +11 +224 +98 +18 +224 +98 +18 +224 +98 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +223 +103 +18 +223 +103 +18 +224 +98 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +218 +87 +5 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +220 +93 +11 +220 +93 +11 +224 +98 +18 +224 +98 +18 +223 +103 +18 +223 +103 +18 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +226 +110 +35 +223 +103 +18 +224 +98 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +220 +93 +11 +218 +87 +5 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +220 +93 +11 +220 +93 +11 +220 +93 +11 +220 +93 +11 +224 +98 +18 +224 +98 +18 +224 +98 +18 +224 +98 +18 +224 +98 +18 +224 +98 +18 +220 +93 +11 +224 +98 +18 +220 +93 +11 +220 +93 +11 +220 +93 +11 +218 +87 +5 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +218 +87 +5 +217 +86 +3 +218 +87 +5 +218 +87 +5 +218 +87 +5 +220 +93 +11 +220 +93 +11 +220 +93 +11 +220 +93 +11 +220 +93 +11 +224 +98 +18 +224 +98 +18 +224 +98 +18 +224 +98 +18 +224 +98 +18 +220 +93 +11 +220 +93 +11 +220 +93 +11 +220 +93 +11 +220 +93 +11 +218 +87 +5 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +218 +87 +5 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +217 +86 +3 +217 +86 +3 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 +214 +84 +0 diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 7042cab3db..24f34ccb19 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "050684c18f2ea0b08fdd5233a0cd3c7f96e00a0e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r34" +PR = "r35" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ @@ -19,6 +19,7 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://timer-suppression.patch;patch=1 \ file://soc.patch;patch=1 \ file://16bpp.patch;patch=1 \ + file://logo_linux_clut224.ppm \ " SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ -- cgit v1.2.3 From ce3b7d15c9ded3512c1558371bf0f087ba352433 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 13:55:59 +0000 Subject: dsplink: add -include linux/autoconf.h to the kernel cflags, obsoleting patches adding #includes for that --- packages/dsplink/dsplink-1.51/prcs-fix-include.patch | 20 -------------------- packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- packages/dsplink/files/davinci_mvlpro5.0.mk | 2 +- 4 files changed, 3 insertions(+), 23 deletions(-) diff --git a/packages/dsplink/dsplink-1.51/prcs-fix-include.patch b/packages/dsplink/dsplink-1.51/prcs-fix-include.patch index 6fa92cd50a..a71cea3904 100644 --- a/packages/dsplink/dsplink-1.51/prcs-fix-include.patch +++ b/packages/dsplink/dsplink-1.51/prcs-fix-include.patch @@ -27,23 +27,3 @@ /* ----------------------------------- DSP/BIOS Link */ #include ---- /tmp/hal_intgen.c 2008-06-29 23:42:05.000000000 +0200 -+++ dsplink_1_51_00_08/dsplink/gpp/src/ldrv/HAL/OMAP/3530/hal_intgen.c 2008-06-29 23:42:18.000000000 +0200 -@@ -17,6 +17,7 @@ - - - /* ----------------------------------- OS headers */ -+#include - #include - - /* ----------------------------------- DSP/BIOS Link */ ---- /tmp/hal_prcm.c 2008-06-29 23:42:05.000000000 +0200 -+++ dsplink_1_51_00_08/dsplink/gpp/src/ldrv/HAL/OMAP/3530/hal_prcm.c 2008-06-29 23:43:10.000000000 +0200 -@@ -18,6 +18,7 @@ - - - /* ----------------------------------- OS headers */ -+#include - #include - - /* ----------------------------------- DSP/BIOS Link */ diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index b9664e7e5b..c1b6f15694 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r3" +PR = "r4" PE = "1" PV = "1.50" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index d79b5e655c..02c04aa054 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r0" +PR = "r1" PE = "1" PV = "1.51" diff --git a/packages/dsplink/files/davinci_mvlpro5.0.mk b/packages/dsplink/files/davinci_mvlpro5.0.mk index 66365f607b..2379bc359e 100644 --- a/packages/dsplink/files/davinci_mvlpro5.0.mk +++ b/packages/dsplink/files/davinci_mvlpro5.0.mk @@ -99,7 +99,7 @@ CC_SW_DEB := -g # ---------------------------------------------------------------------------- # Standard flags for the compiler # ---------------------------------------------------------------------------- -STD_KRNL_FLAGS := -c -iwithprefix include -Iinclude -Wall -Wstrict-prototypes\ +STD_KRNL_FLAGS := -include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall -Wstrict-prototypes\ -Wno-trigraphs -fno-strict-aliasing -fno-common \ -fno-omit-frame-pointer -mapcs -mno-sched-prolog \ -mlittle-endian -D__LINUX_ARM_ARCH__=5 -march=armv5t \ -- cgit v1.2.3 From 9ab5ce1216e60759d29cade01dc4ba26a5304af5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 14:26:49 +0000 Subject: linux-omap2 git: sync with sakomans tree and drop unused patches --- .../beagleboard/fix-dispc-clocks.patch | 147 --------------------- .../beagleboard/no-empty-flash-warnings.patch | 15 +++ .../omap3evm/no-empty-flash-warnings.patch | 15 +++ packages/linux/linux-omap2_git.bb | 8 +- 4 files changed, 36 insertions(+), 149 deletions(-) delete mode 100644 packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch create mode 100644 packages/linux/linux-omap2-git/beagleboard/no-empty-flash-warnings.patch create mode 100644 packages/linux/linux-omap2-git/omap3evm/no-empty-flash-warnings.patch diff --git a/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch b/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch deleted file mode 100644 index 0b9e3441b6..0000000000 --- a/packages/linux/linux-omap2-git/beagleboard/fix-dispc-clocks.patch +++ /dev/null @@ -1,147 +0,0 @@ -From linux-omap-owner@vger.kernel.org Sun Jun 22 10:11:39 2008 -Received: from localhost - ([127.0.0.1] helo=dominion ident=koen) - by dominion.dominion.void with esmtp (Exim 4.63) - (envelope-from ) - id 1KAKfj-0008Qc-FC - for koen@localhost; Sun, 22 Jun 2008 10:11:39 +0200 -Received: from xs.service.utwente.nl [130.89.5.250] - by dominion with POP3 (fetchmail-6.3.6) - for (single-drop); Sun, 22 Jun 2008 10:11:39 +0200 (CEST) -Received: from mail.service.utwente.nl ([130.89.5.253]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Sat, 21 Jun 2008 19:06:02 +0200 -Received: from smtp.utwente.nl ([130.89.2.9]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Sat, 21 Jun 2008 19:06:01 +0200 -Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) - by smtp.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m5LH5TSm026212 - for ; Sat, 21 Jun 2008 19:05:30 +0200 -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S1753396AbYFURFN (ORCPT ); - Sat, 21 Jun 2008 13:05:13 -0400 -Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753305AbYFURFN - (ORCPT ); - Sat, 21 Jun 2008 13:05:13 -0400 -Received: from utopia.booyaka.com ([72.9.107.138]:41675 "EHLO - utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1753145AbYFURFL (ORCPT - ); Sat, 21 Jun 2008 13:05:11 -0400 -Received: (qmail 20532 invoked by uid 526); 21 Jun 2008 17:05:10 -0000 -Date: Sat, 21 Jun 2008 11:05:10 -0600 (MDT) -From: Paul Walmsley -To: "Gadiyar, Anand" , - "linux-omap@vger.kernel.org" -cc: Dirk Behme , - "jouni.hogander@nokia.com" -Subject: [PATCH] OMAP3 clock: fix omap2_clk_wait_ready for OMAP3430ES2 DSS -In-Reply-To: <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com> -Message-ID: -References: <5A47E75E594F054BAF48C5E4FC4B92AB022BE46296@dbde02.ent.ti.com>,<485CA347.909@googlemail.com> <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com> -User-Agent: Alpine 1.00 (DEB 882 2007-12-20) -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=US-ASCII -Sender: linux-omap-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: linux-omap@vger.kernel.org -X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information. -X-UTwente-MailScanner: Found to be clean -X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org -X-Spam-Status: No -X-OriginalArrivalTime: 21 Jun 2008 17:06:02.0187 (UTC) FILETIME=[157001B0:01C8D3C1] - - -On OMAP3430ES2, DSS has both an initiator standby CM_IDLEST bit, and a -target idle CM_IDLEST bit. This is a departure from previous silicon, -which only had an initiator standby bit. - -This means we need to test the target idle bit after enabling -dss1_alwon_fclk. Previous clock code has done the wrong thing since ES2 -came out: it's either tested the wrong bit, causing intermittent - - Clock dss1_alwon_fck didn't enable in 100000 tries - -messages; or not tested anything at all, causing intermittent crashes -during DISPC initialization with: - - Unhandled fault: external abort on non-linefetch (0x1028) - -This patch modifies omap2_clk_wait_ready() to wait for the DSS to become -accessible after dss1_alwon_fclk is enabled. - -Thanks to Anand Gadiyar for identifying one of the -problem patches. - -Signed-off-by: Paul Walmsley ---- - - arch/arm/mach-omap2/clock.c | 30 ++++++++++++++++++++++++------ - arch/arm/mach-omap2/cm-regbits-34xx.h | 4 +++- - 2 files changed, 27 insertions(+), 7 deletions(-) - -diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c -index ed15868..1820f75 100644 ---- a/arch/arm/mach-omap2/clock.c -+++ b/arch/arm/mach-omap2/clock.c -@@ -244,18 +244,36 @@ static void omap2_clk_wait_ready(struct clk *clk) - } - - /* REVISIT: What are the appropriate exclusions for 34XX? */ -- /* OMAP3: ignore DSS-mod clocks */ -- if (cpu_is_omap34xx() && -- ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) || -- (((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0)) && -- clk->enable_bit == OMAP3430_EN_SSI_SHIFT))) -- return; -+ if (cpu_is_omap34xx()) { -+ -+ /* 3430ES1 DSS and SSI have no target idlest bits */ -+ if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0) && -+ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) || -+ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0) && -+ clk->enable_bit == OMAP3430_EN_SSI_SHIFT))) -+ return; -+ -+ /* Even for 3430ES2 DSS, only wait for dss1_alwon_fclk */ -+ if (is_sil_rev_greater_than(OMAP3430_REV_ES1_0) && -+ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) && -+ clk->enable_bit != OMAP3430_EN_DSS1_SHIFT) -+ return; -+ -+ } - - /* Check if both functional and interface clocks - * are running. */ - bit = 1 << clk->enable_bit; - if (!(__raw_readl((__force void __iomem *)other_reg) & bit)) - return; -+ -+ /* OMAP3430ES2 DSS is an unusual case */ -+ if (cpu_is_omap34xx() && -+ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) && -+ clk->enable_bit == OMAP3430_EN_DSS1_SHIFT) { -+ bit = OMAP3430ES2_ST_DSS_IDLE; -+ } -+ - st_reg = ((other_reg & ~0xf0) | 0x20); /* CM_IDLEST* */ - - omap2_wait_clock_ready((__force void __iomem *)st_reg, bit, clk->name); -diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h -index 6ec66f4..946c552 100644 ---- a/arch/arm/mach-omap2/cm-regbits-34xx.h -+++ b/arch/arm/mach-omap2/cm-regbits-34xx.h -@@ -500,7 +500,9 @@ - #define OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT 0 - - /* CM_IDLEST_DSS */ --#define OMAP3430_ST_DSS (1 << 0) -+#define OMAP3430ES2_ST_DSS_IDLE (1 << 1) -+#define OMAP3430ES2_ST_DSS_STDBY (1 << 0) -+#define OMAP3430ES1_ST_DSS (1 << 0) - - /* CM_AUTOIDLE_DSS */ - #define OMAP3430_AUTO_DSS (1 << 0) --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - diff --git a/packages/linux/linux-omap2-git/beagleboard/no-empty-flash-warnings.patch b/packages/linux/linux-omap2-git/beagleboard/no-empty-flash-warnings.patch new file mode 100644 index 0000000000..ab344b0449 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/no-empty-flash-warnings.patch @@ -0,0 +1,15 @@ +diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c +index 1d437de..33b3feb 100644 +--- a/fs/jffs2/scan.c ++++ b/fs/jffs2/scan.c +@@ -647,8 +647,8 @@ scan_more: + inbuf_ofs = ofs - buf_ofs; + while (inbuf_ofs < scan_end) { + if (unlikely(*(uint32_t *)(&buf[inbuf_ofs]) != 0xffffffff)) { +- printk(KERN_WARNING "Empty flash at 0x%08x ends at 0x%08x\n", +- empty_start, ofs); ++// printk(KERN_WARNING "Empty flash at 0x%08x ends at 0x%08x\n", ++// empty_start, ofs); + if ((err = jffs2_scan_dirty_space(c, jeb, ofs-empty_start))) + return err; + goto scan_more; diff --git a/packages/linux/linux-omap2-git/omap3evm/no-empty-flash-warnings.patch b/packages/linux/linux-omap2-git/omap3evm/no-empty-flash-warnings.patch new file mode 100644 index 0000000000..ab344b0449 --- /dev/null +++ b/packages/linux/linux-omap2-git/omap3evm/no-empty-flash-warnings.patch @@ -0,0 +1,15 @@ +diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c +index 1d437de..33b3feb 100644 +--- a/fs/jffs2/scan.c ++++ b/fs/jffs2/scan.c +@@ -647,8 +647,8 @@ scan_more: + inbuf_ofs = ofs - buf_ofs; + while (inbuf_ofs < scan_end) { + if (unlikely(*(uint32_t *)(&buf[inbuf_ofs]) != 0xffffffff)) { +- printk(KERN_WARNING "Empty flash at 0x%08x ends at 0x%08x\n", +- empty_start, ofs); ++// printk(KERN_WARNING "Empty flash at 0x%08x ends at 0x%08x\n", ++// empty_start, ofs); + if ((err = jffs2_scan_dirty_space(c, jeb, ofs-empty_start))) + return err; + goto scan_more; diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 24f34ccb19..0defe87be6 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,8 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "050684c18f2ea0b08fdd5233a0cd3c7f96e00a0e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r35" - +PR = "r36" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -19,6 +18,7 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://timer-suppression.patch;patch=1 \ file://soc.patch;patch=1 \ file://16bpp.patch;patch=1 \ + file://no-empty-flash-warnings.patch;patch=1 \ file://logo_linux_clut224.ppm \ " @@ -26,6 +26,10 @@ SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ file://0001-ASoC-OMAP-Add-basic-support-for-OMAP34xx-in-McBSP.patch;patch=1 \ file://0001-omap3-cpuidle.patch;patch=1 \ file://0002-omap3-cpuidle.patch;patch=1 \ + file://timer-suppression.patch;patch=1 \ + file://soc.patch;patch=1 \ + file://no-empty-flash-warnings.patch;patch=1 \ + file://touchscreen.patch;patch=1 \ " -- cgit v1.2.3 From 0c4549cead750f8f461490c720a5e3121ea96d10 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Thu, 3 Jul 2008 15:05:44 +0000 Subject: u-boot : Update SFF SDR board patch and bump git rev to current HEAD. --- packages/u-boot/files/sffsdr-u-boot.patch | 522 ++++++++++++++++++------------ packages/u-boot/u-boot_git.bb | 2 +- 2 files changed, 318 insertions(+), 206 deletions(-) diff --git a/packages/u-boot/files/sffsdr-u-boot.patch b/packages/u-boot/files/sffsdr-u-boot.patch index cf8415330b..dcb34e2c51 100644 --- a/packages/u-boot/files/sffsdr-u-boot.patch +++ b/packages/u-boot/files/sffsdr-u-boot.patch @@ -1,93 +1,103 @@ -X-Mozilla-Status: 0003 +X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 -Return-Path: -Received: from mail6.zoneedit.com (mail6.zoneedit.com [66.240.226.247]) - by www.balister.org (8.13.8/8.13.5) with ESMTP id m4GGYUC2017393 - for ; Fri, 16 May 2008 12:34:31 -0400 -Received: from listserv.vt.edu (listserv.vt.edu [198.82.161.192]) - by mail6.zoneedit.com (Postfix) with ESMTP id B457D5D5B6 - for ; Fri, 16 May 2008 12:34:29 -0400 (EDT) -Received: from listserv.vt.edu (listserv.vt.edu [127.0.0.1]) - by listserv.vt.edu (8.13.1/8.13.1/LISTSERV) with ESMTP id m4G7PKLG018387; - Fri, 16 May 2008 12:34:28 -0400 -Received: by LISTSERV.VT.EDU (LISTSERV-TCP/IP release 14.4) with spool id - 29624903 for SFFSDR@LISTSERV.VT.EDU; Fri, 16 May 2008 12:34:28 -0400 -Received: from freya.cc.vt.edu (IDENT:mirapoint@freya.cc.vt.edu - [198.82.161.17]) by listserv.vt.edu (8.13.1/8.13.1/LISTSERV) with - ESMTP id m4GGYSHs005336 for ; Fri, 16 May - 2008 12:34:28 -0400 -Received: from server.hugovil.com (201-217-static-ppp.3menatwork.com - [64.235.217.201]) by freya.cc.vt.edu (MOS 3.8.6-GA) with ESMTP id - AOF41814; Fri, 16 May 2008 12:34:27 -0400 (EDT) -Received: from localhost.localdomain (mail.lyrtech.com [204.101.172.90]) by - server.hugovil.com (8.13.6/8.13.6) with ESMTP id m4GGYOYT028003 for - ; Fri, 16 May 2008 12:34:24 -0400 +X-Mozilla-Keys: +Return-Path: +Received: from mail5.zoneedit.com (mail5.zoneedit.com [69.64.89.63]) + by www.balister.org (8.13.8/8.13.5) with ESMTP id m56KcqTB024438 + for ; Fri, 6 Jun 2008 16:38:53 -0400 +Received: from lists-outbound.sourceforge.net (lists-outbound.sourceforge.net [66.35.250.225]) + by mail5.zoneedit.com (Postfix) with ESMTP id BD2E51594778 + for ; Fri, 6 Jun 2008 13:26:54 -0700 (PDT) +Received: from sc8-sf-list1-new.sourceforge.net (sc8-sf-list1-new-b.sourceforge.net [10.3.1.93]) + by sc8-sf-spam2.sourceforge.net (Postfix) with ESMTP + id 4C55A12A74; Fri, 6 Jun 2008 13:38:52 -0700 (PDT) +Received: from sc8-sf-mx1-b.sourceforge.net ([10.3.1.91] + helo=mail.sourceforge.net) + by sc8-sf-list1-new.sourceforge.net with esmtp (Exim 4.43) + id 1K4ii2-00059t-CF + for u-boot-users@lists.sourceforge.net; Fri, 06 Jun 2008 13:38:50 -0700 +Received: from 201-217-static-ppp.3menatwork.com ([64.235.217.201] + helo=server.hugovil.com) + by mail.sourceforge.net with esmtp (Exim 4.44) id 1K4ihy-0003RQ-Od + for u-boot-users@lists.sourceforge.net; Fri, 06 Jun 2008 13:38:50 -0700 +Received: from localhost.localdomain (mail.lyrtech.com [204.101.172.90]) + by server.hugovil.com (8.13.6/8.13.6) with ESMTP id m56KcjQC031450; + Fri, 6 Jun 2008 16:38:46 -0400 +From: Hugo Villeneuve +To: u-boot-users@lists.sourceforge.net +Date: Fri, 6 Jun 2008 16:39:10 -0400 +Message-Id: <1212784750-10682-1-git-send-email-hugo.villeneuve@lyrtech.com> X-Mailer: git-send-email 1.5.4.5 -X-Greylist: Default is to whitelist mail, - not delayed by milter-greylist-3.0 (server.hugovil.com - [64.235.217.201]); Fri, 16 May 2008 12:34:25 -0400 (EDT) -X-Junkmail-Status: score=10/50, host=freya.cc.vt.edu -X-Junkmail-SD-Raw: score=unknown, - refid=str=0001.0A090205.482DB793.02F2,ss=1,fgs=0, - ip=64.235.217.201, so=2007-10-30 19:00:17, - dmn=5.4.3/2007-10-19 -X-Junkmail-IWF: false -Message-ID: <1210970183-26615-1-git-send-email-hugo.villeneuve@lyrtech.com> -Date: Fri, 16 May 2008 16:36:23 -0400 -Reply-To: sffsdr Discussion List -Sender: sffsdr Discussion List -From: Hugo Villeneuve -Subject: [PATCH] Add support for Lyrtech SFF-SDR board (ARM926EJS) -To: SFFSDR@LISTSERV.VT.EDU +X-Greylist: Default is to whitelist mail, not delayed by milter-greylist-3.0 + (server.hugovil.com [64.235.217.201]); + Fri, 06 Jun 2008 16:38:46 -0400 (EDT) +X-Spam-Score: 1.2 (+) +X-Spam-Report: Spam Filtering performed by sourceforge.net. + See http://spamassassin.org/tag/ for more details. + Report problems to + http://sf.net/tracker/?func=add&group_id=1&atid=200001 + 1.0 FORGED_RCVD_HELO Received: contains a forged HELO + 0.2 UPPERCASE_25_50 message body is 25-50% uppercase + 0.0 DRUGS_SLEEP Refers to a sleep aid drug +Cc: "Philip Balister, OpenSDR" +Subject: [U-Boot-Users] [PATCH V8] ARM: Add support for Lyrtech SFF-SDR + board (ARM926EJS) +X-BeenThere: u-boot-users@lists.sourceforge.net +X-Mailman-Version: 2.1.8 Precedence: list +List-Id: Universal Boot Loader general discussion + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +Sender: u-boot-users-bounces@lists.sourceforge.net +Errors-To: u-boot-users-bounces@lists.sourceforge.net -Philip, -this is the patch I´m planning on sending to the U-Boot -folks so that the SFFSDR is integrated into mainline -U-Boot. - -It is mostly based on the work you have done. - -I added code to make the EEPROM accessible through -the I2C bus. This is needed because we use an I2C -switch on the SFFSDR that is turned OFF by default. -I also added code to read the MAC address from the -EEPROM. - -I also removed unused stuff specific to the -Schmoogie board. - -The network and NAND are both working fine with -that patch. - -I´m looking forward to your comments. - -Hugo V. - ---- - -This patch adds support for the Lyrtech SFF-SDR, based -on the TI DaVinci architecture (ARM926EJS). +ARM: This patch adds support for the Lyrtech SFF-SDR +board, based on the TI DaVinci architecture (ARM926EJS). Signed-off-by: Hugo Villeneuve +Signed-off-by: Philip Balister, OpenSDR + --- + CREDITS | 5 + MAKEALL | 1 + Makefile | 3 + - board/davinci/sffsdr/Makefile | 52 +++++++++ - board/davinci/sffsdr/board_init.S | 29 +++++ - board/davinci/sffsdr/config.mk | 24 ++++ - board/davinci/sffsdr/dv_board.c | 211 +++++++++++++++++++++++++++++++++++++ - board/davinci/sffsdr/u-boot.lds | 52 +++++++++ - include/asm-arm/mach-types.h | 13 +++ - include/configs/davinci_sffsdr.h | 171 ++++++++++++++++++++++++++++++ - 9 files changed, 556 insertions(+), 0 deletions(-) + board/davinci/sffsdr/Makefile | 51 ++++++ + board/davinci/sffsdr/board_init.S | 32 ++++ + board/davinci/sffsdr/config.mk | 42 +++++ + board/davinci/sffsdr/sffsdr.c | 306 +++++++++++++++++++++++++++++++++++++ + board/davinci/sffsdr/u-boot.lds | 52 +++++++ + include/asm-arm/mach-types.h | 13 ++ + include/configs/davinci_sffsdr.h | 148 ++++++++++++++++++ + 10 files changed, 653 insertions(+), 0 deletions(-) +diff --git a/CREDITS b/CREDITS +index e84ef38..b855904 100644 +--- a/CREDITS ++++ b/CREDITS +@@ -533,3 +533,8 @@ N: Timo Tuunainen + E: timo.tuunainen@sysart.fi + D: Support for Artila M-501 starter kit + W: http://www.sysart.fi/ ++ ++N: Philip Balister ++E: philip@opensdr.com ++D: Port to Lyrtech SFFSDR development board. ++W: www.opensdr.com diff --git a/MAKEALL b/MAKEALL -index 791eabc..1a0cb37 100755 +index 37b4334..f53ceec 100755 --- a/MAKEALL +++ b/MAKEALL -@@ -495,6 +495,7 @@ LIST_ARM9=" \ +@@ -496,6 +496,7 @@ LIST_ARM9=" \ voiceblue \ davinci_dvevm \ davinci_schmoogie \ @@ -96,10 +106,10 @@ index 791eabc..1a0cb37 100755 " diff --git a/Makefile b/Makefile -index 167a717..6280a59 100644 +index 6548f8e..05d90aa 100644 --- a/Makefile +++ b/Makefile -@@ -2402,6 +2402,9 @@ davinci_dvevm_config : unconfig +@@ -2408,6 +2408,9 @@ davinci_dvevm_config : unconfig davinci_schmoogie_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs schmoogie davinci davinci @@ -111,10 +121,10 @@ index 167a717..6280a59 100644 diff --git a/board/davinci/sffsdr/Makefile b/board/davinci/sffsdr/Makefile new file mode 100644 -index 0000000..fa00138 +index 0000000..4413b33 --- /dev/null +++ b/board/davinci/sffsdr/Makefile -@@ -0,0 +1,52 @@ +@@ -0,0 +1,51 @@ +# +# (C) Copyright 2000, 2001, 2002 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. @@ -138,13 +148,12 @@ index 0000000..fa00138 +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA -+# + +include $(TOPDIR)/config.mk + +LIB = $(obj)lib$(BOARD).a + -+COBJS := dv_board.o ++COBJS := $(BOARD).o +SOBJS := board_init.o + +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) @@ -169,17 +178,20 @@ index 0000000..fa00138 +######################################################################### diff --git a/board/davinci/sffsdr/board_init.S b/board/davinci/sffsdr/board_init.S new file mode 100644 -index 0000000..22d8adc +index 0000000..84ecd96 --- /dev/null +++ b/board/davinci/sffsdr/board_init.S -@@ -0,0 +1,29 @@ +@@ -0,0 +1,32 @@ +/* -+ * Copyright (C) 2007 Sergey Kubushyn -+ * + * Board-specific low level initialization code. Called at the very end + * of cpu/arm926ejs/davinci/lowlevel_init.S. Just returns if there is no + * initialization required. + * ++ * Copyright (C) 2007 Sergey Kubushyn ++ * ++ * See file CREDITS for list of people who contributed to this ++ * project. ++ * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of @@ -204,17 +216,38 @@ index 0000000..22d8adc + mov pc, lr diff --git a/board/davinci/sffsdr/config.mk b/board/davinci/sffsdr/config.mk new file mode 100644 -index 0000000..e8a329c +index 0000000..b1c4ead --- /dev/null +++ b/board/davinci/sffsdr/config.mk -@@ -0,0 +1,24 @@ +@@ -0,0 +1,42 @@ ++# ++# Lyrtech SFF SDR board (ARM926EJS) cpu +# +# (C) Copyright 2002 +# Gary Jennejohn, DENX Software Engineering, +# David Mueller, ELSOFT AG, +# -+# Lyrtech SFF SDR board (ARM926EJS) cpu -+# see http://www.lyrtech.com/ for more information on Lyrtech ++# Copyright (C) 2008 Lyrtech ++# Copyright (C) 2008 Philip Balister, OpenSDR ++# ++# See file CREDITS for list of people who contributed to this ++# project. ++# ++# This program is free software; you can redistribute it and/or ++# modify it under the terms of the GNU General Public License as ++# published by the Free Software Foundation; either version 2 of ++# the License, or (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, ++# MA 02111-1307 USA ++ +# +# SFF SDR board has 1 bank of 128 MB DDR RAM +# Physical Address: @@ -226,28 +259,29 @@ index 0000000..e8a329c +# Integrity kernel is expected to be at 8000'0000, entry 8000'00D0, +# up to 81FF'FFFF (uses up to 32 MB of memory for text, heap, etc). +# -+# we load ourself to 8400'0000 -+# -+# -+ -+# Provide at least 32MB spacing between us and the Integrity kernel image ++# we load ourself to 8400'0000 to provide at least 32MB spacing ++# between us and the Integrity kernel image +TEXT_BASE = 0x84000000 -diff --git a/board/davinci/sffsdr/dv_board.c b/board/davinci/sffsdr/dv_board.c +diff --git a/board/davinci/sffsdr/sffsdr.c b/board/davinci/sffsdr/sffsdr.c new file mode 100644 -index 0000000..a3f60cb +index 0000000..31e0f24 --- /dev/null -+++ b/board/davinci/sffsdr/dv_board.c -@@ -0,0 +1,211 @@ ++++ b/board/davinci/sffsdr/sffsdr.c +@@ -0,0 +1,306 @@ +/* + * Copyright (C) 2007 Sergey Kubushyn + * ++ * Copyright (C) 2008 Lyrtech ++ * Copyright (C) 2008 Philip Balister, OpenSDR ++ * + * Parts are shamelessly stolen from various TI sources, original copyright + * follows: -+ * ----------------------------------------------------------------- + * + * Copyright (C) 2004 Texas Instruments. + * -+ * ---------------------------------------------------------------------------- ++ * See file CREDITS for list of people who contributed to this ++ * project. ++ * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or @@ -258,10 +292,9 @@ index 0000000..a3f60cb + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * ---------------------------------------------------------------------------- ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include @@ -269,18 +302,24 @@ index 0000000..a3f60cb +#include +#include + ++#define DAVINCI_A3CR (0x01E00014) /* EMIF-A CS3 config register. */ ++#define DAVINCI_A3CR_VAL (0x3FFFFFFD) /* EMIF-A CS3 value for FPGA. */ ++ ++#define INTEGRITY_SYSCFG_OFFSET 0x7E8 ++#define INTEGRITY_CHECKWORD_OFFSET 0x7F8 ++#define INTEGRITY_CHECKWORD_VALUE 0x10ADBEEF ++ +DECLARE_GLOBAL_DATA_PTR; + -+extern void i2c_init(int speed, int slaveaddr); -+extern void timer_init(void); -+extern int eth_hw_init(void); -+extern phy_t phy; ++extern void timer_init(void); ++extern int eth_hw_init(void); ++extern phy_t phy; + + +/* Works on Always On power domain only (no PD argument) */ +void lpsc_on(unsigned int id) +{ -+ dv_reg_p mdstat, mdctl; ++ dv_reg_p mdstat, mdctl; + + if (id >= DAVINCI_LPSC_GEM) + return; /* Don't work on DSP Power Domain */ @@ -288,7 +327,7 @@ index 0000000..a3f60cb + mdstat = REG_P(PSC_MDSTAT_BASE + (id * 4)); + mdctl = REG_P(PSC_MDCTL_BASE + (id * 4)); + -+ while (REG(PSC_PTSTAT) & 0x01) {;} ++ while (REG(PSC_PTSTAT) & 0x01); + + if ((*mdstat & 0x1f) == 0x03) + return; /* Already on and enabled */ @@ -296,32 +335,34 @@ index 0000000..a3f60cb + *mdctl |= 0x03; + + /* Special treatment for some modules as for sprue14 p.7.4.2 */ -+ if ( (id == DAVINCI_LPSC_VPSSSLV) || -+ (id == DAVINCI_LPSC_EMAC) || -+ (id == DAVINCI_LPSC_EMAC_WRAPPER) || -+ (id == DAVINCI_LPSC_MDIO) || -+ (id == DAVINCI_LPSC_USB) || -+ (id == DAVINCI_LPSC_ATA) || -+ (id == DAVINCI_LPSC_VLYNQ) || -+ (id == DAVINCI_LPSC_UHPI) || -+ (id == DAVINCI_LPSC_DDR_EMIF) || -+ (id == DAVINCI_LPSC_AEMIF) || -+ (id == DAVINCI_LPSC_MMC_SD) || -+ (id == DAVINCI_LPSC_MEMSTICK) || -+ (id == DAVINCI_LPSC_McBSP) || -+ (id == DAVINCI_LPSC_GPIO) -+ ) -+ *mdctl |= 0x200; ++ switch (id) { ++ case DAVINCI_LPSC_VPSSSLV: ++ case DAVINCI_LPSC_EMAC: ++ case DAVINCI_LPSC_EMAC_WRAPPER: ++ case DAVINCI_LPSC_MDIO: ++ case DAVINCI_LPSC_USB: ++ case DAVINCI_LPSC_ATA: ++ case DAVINCI_LPSC_VLYNQ: ++ case DAVINCI_LPSC_UHPI: ++ case DAVINCI_LPSC_DDR_EMIF: ++ case DAVINCI_LPSC_AEMIF: ++ case DAVINCI_LPSC_MMC_SD: ++ case DAVINCI_LPSC_MEMSTICK: ++ case DAVINCI_LPSC_McBSP: ++ case DAVINCI_LPSC_GPIO: ++ *mdctl |= 0x200; ++ break; ++ } + + REG(PSC_PTCMD) = 0x01; + -+ while (REG(PSC_PTSTAT) & 0x03) {;} -+ while ((*mdstat & 0x1f) != 0x03) {;} /* Probably an overkill... */ ++ while (REG(PSC_PTSTAT) & 0x03); ++ while ((*mdstat & 0x1f) != 0x03); /* Probably an overkill... */ +} + +void dsp_on(void) +{ -+ int i; ++ int i; + + if (REG(PSC_PDSTAT1) & 0x1f) + return; /* Already on */ @@ -352,7 +393,6 @@ index 0000000..a3f60cb + REG(PSC_GBLCTL) &= ~0x1f; +} + -+ +int board_init(void) +{ + /* arch number of the board */ @@ -399,46 +439,131 @@ index 0000000..a3f60cb + return(0); +} + -+int misc_init_r (void) ++/* Read ethernet MAC address from Integrity data structure inside EEPROM. */ ++int read_mac_address(uint8_t *buf) +{ -+ u_int8_t tmp[20], buf[10]; -+ int i = 0; -+ int clk = 0; ++ u_int32_t value, mac[2], address; ++ ++ /* Read Integrity data structure checkword. */ ++ if (i2c_read(CFG_I2C_EEPROM_ADDR, INTEGRITY_CHECKWORD_OFFSET, ++ CFG_I2C_EEPROM_ADDR_LEN, (uint8_t *) &value, 4)) ++ goto err; ++ if (value != INTEGRITY_CHECKWORD_VALUE) ++ return 1; ++ ++ /* Read SYSCFG structure offset. */ ++ if (i2c_read(CFG_I2C_EEPROM_ADDR, INTEGRITY_SYSCFG_OFFSET, ++ CFG_I2C_EEPROM_ADDR_LEN, (uint8_t *) &value, 4)) ++ goto err; ++ address = 0x800 + (int) value; /* Address of SYSCFG structure. */ ++ ++ /* Read NET CONFIG structure offset. */ ++ if (i2c_read(CFG_I2C_EEPROM_ADDR, address, ++ CFG_I2C_EEPROM_ADDR_LEN, (uint8_t *) &value, 4)) ++ goto err; ++ address = 0x800 + (int) value; /* Address of NET CONFIG structure. */ ++ address += 12; /* Address of NET INTERFACE CONFIG structure. */ ++ ++ /* Read NET INTERFACE CONFIG 2 structure offset. */ ++ if (i2c_read(CFG_I2C_EEPROM_ADDR, address, ++ CFG_I2C_EEPROM_ADDR_LEN, (uint8_t *) &value, 4)) ++ goto err; ++ address = 0x800 + 16 + (int) value; /* Address of NET INTERFACE ++ * CONFIG 2 structure. */ ++ ++ /* Read MAC address. */ ++ if (i2c_read(CFG_I2C_EEPROM_ADDR, address, ++ CFG_I2C_EEPROM_ADDR_LEN, (uint8_t *) &mac[0], 8)) ++ goto err; ++ ++ buf[0] = mac[0] >> 24; ++ buf[1] = mac[0] >> 16; ++ buf[2] = mac[0] >> 8; ++ buf[3] = mac[0]; ++ buf[4] = mac[1] >> 24; ++ buf[5] = mac[1] >> 16; ++ ++ return 0; ++ ++err: ++ printf("Read from EEPROM @ 0x%02x failed\n", CFG_I2C_EEPROM_ADDR); ++ return 1; ++} ++ ++/* Platform dependent initialisation. */ ++int misc_init_r(void) ++{ ++ int i; ++ u_int8_t i2cbuf; ++ u_int8_t env_enetaddr[6], eeprom_enetaddr[6]; ++ char *tmp = getenv("ethaddr"); ++ char *end; ++ int clk; ++ ++ /* EMIF-A CS3 configuration for FPGA. */ ++ REG(DAVINCI_A3CR) = DAVINCI_A3CR_VAL; + + clk = ((REG(PLL2_PLLM) + 1) * 27) / ((REG(PLL2_DIV2) & 0x1f) + 1); + -+ printf ("ARM Clock: %dMHz\n", ((REG(PLL1_PLLM) + 1) * 27 ) / 2); -+ printf ("DDR Clock: %dMHz\n", (clk / 2)); ++ printf("ARM Clock: %dMHz\n", ((REG(PLL1_PLLM) + 1) * 27) / 2); ++ printf("DDR Clock: %dMHz\n", (clk / 2)); + + /* Configure I2C switch (PCA9543) to enable channel 0. */ -+ tmp[0] = CFG_I2C_PCA9543_ENABLE_CH0; -+ if (i2c_write(CFG_I2C_PCA9543_ADDR, 0, CFG_I2C_PCA9543_ADDR_LEN, tmp, 1)) { -+ printf ("Write to MUX @ 0x%02x failed\n", CFG_I2C_PCA9543_ADDR); ++ i2cbuf = CFG_I2C_PCA9543_ENABLE_CH0; ++ if (i2c_write(CFG_I2C_PCA9543_ADDR, 0, ++ CFG_I2C_PCA9543_ADDR_LEN, &i2cbuf, 1)) { ++ printf("Write to MUX @ 0x%02x failed\n", CFG_I2C_PCA9543_ADDR); ++ return 1; + } + -+ /* Set Ethernet MAC address from EEPROM. -+ * We must read 8 bytes because data is stored in little-endian. */ -+ if (i2c_read(CFG_I2C_EEPROM_ADDR, 0x05A8, CFG_I2C_EEPROM_ADDR_LEN, buf, 8)) { -+ printf ("Read from EEPROM @ 0x%02x failed\n", CFG_I2C_EEPROM_ADDR); -+ } else { -+ tmp[0] = 0xff; -+ for (i = 0; i < 6; i++) -+ tmp[0] &= buf[i]; -+ -+ if ((tmp[0] != 0xff) && (getenv("ethaddr") == NULL)) { -+ sprintf ((char *)&tmp[0], "%02x:%02x:%02x:%02x:%02x:%02x", -+ buf[3], buf[2], buf[1], buf[0], -+ buf[7], buf[6]); -+ setenv ("ethaddr", (char *)&tmp[0]); ++ /* Read Ethernet MAC address from the U-Boot environment. */ ++ for (i = 0; i < 6; i++) { ++ env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0; ++ if (tmp) ++ tmp = (*end) ? end+1 : end; ++ } ++ ++ /* Read Ethernet MAC address from EEPROM. */ ++ if (read_mac_address(eeprom_enetaddr) == 0) { ++ if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6) != 0 && ++ memcmp(env_enetaddr, eeprom_enetaddr, 6) != 0) { ++ printf("\nWarning: MAC addresses don't match:\n"); ++ printf("\tHW MAC address: " ++ "%02X:%02X:%02X:%02X:%02X:%02X\n", ++ eeprom_enetaddr[0], eeprom_enetaddr[1], ++ eeprom_enetaddr[2], eeprom_enetaddr[3], ++ eeprom_enetaddr[4], eeprom_enetaddr[5]); ++ printf("\t\"ethaddr\" value: " ++ "%02X:%02X:%02X:%02X:%02X:%02X\n", ++ env_enetaddr[0], env_enetaddr[1], ++ env_enetaddr[2], env_enetaddr[3], ++ env_enetaddr[4], env_enetaddr[5]) ; ++ debug("### Set MAC addr from environment\n"); ++ memcpy(eeprom_enetaddr, env_enetaddr, 6); ++ } ++ if (!tmp) { ++ char ethaddr[20]; ++ ++ sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", ++ eeprom_enetaddr[0], eeprom_enetaddr[1], ++ eeprom_enetaddr[2], eeprom_enetaddr[3], ++ eeprom_enetaddr[4], eeprom_enetaddr[5]) ; ++ debug("### Set environment from HW MAC addr = \"%s\"\n", ++ ethaddr); ++ setenv("ethaddr", ethaddr); + } + } + + if (!eth_hw_init()) { -+ printf ("Ethernet init failed\n"); ++ printf("Ethernet init failed\n"); + } else { -+ printf ("ETH PHY: %s\n", phy.name); ++ printf("ETH PHY: %s\n", phy.name); + } -+ ++ ++ /* On this platform, U-Boot is copied in RAM by the UBL, ++ * so we are always in the relocated state. */ ++ gd->flags |= GD_FLG_RELOC; ++ + return(0); +} + @@ -540,13 +665,16 @@ index aaf2ea2..b347857 100644 # undef machine_arch_type diff --git a/include/configs/davinci_sffsdr.h b/include/configs/davinci_sffsdr.h new file mode 100644 -index 0000000..a9b480b +index 0000000..897e9e5 --- /dev/null +++ b/include/configs/davinci_sffsdr.h -@@ -0,0 +1,171 @@ +@@ -0,0 +1,148 @@ +/* + * Copyright (C) 2007 Sergey Kubushyn + * ++ * Copyright (C) 2008 Lyrtech ++ * Copyright (C) 2008 Philip Balister, OpenSDR ++ * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of @@ -567,30 +695,22 @@ index 0000000..a9b480b +#define __CONFIG_H +#include + -+/*=======*/ +/* Board */ -+/*=======*/ +#define SFFSDR +#define CFG_NAND_LARGEPAGE +#define CFG_USE_NAND -+/*===================*/ +/* SoC Configuration */ -+/*===================*/ +#define CONFIG_ARM926EJS /* arm926ejs CPU core */ +#define CONFIG_SYS_CLK_FREQ 297000000 /* Arm Clock frequency */ +#define CFG_TIMERBASE 0x01c21400 /* use timer 0 */ +#define CFG_HZ_CLOCK 27000000 /* Timer Input clock freq */ +#define CFG_HZ 1000 -+/*==================================================*/ -+/* EEPROM definitions for Atmel 24LC64 EEPROM chip */ -+/*==================================================*/ ++/* EEPROM definitions for Atmel 24LC64 EEPROM chip */ +#define CFG_I2C_EEPROM_ADDR_LEN 2 +#define CFG_I2C_EEPROM_ADDR 0x50 +#define CFG_EEPROM_PAGE_WRITE_BITS 5 +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 20 -+/*=============*/ +/* Memory Info */ -+/*=============*/ +#define CFG_MALLOC_LEN (0x10000 + 256*1024) /* malloc() len */ +#define CFG_GBL_DATA_SIZE 128 /* reserved for initial data */ +#define CFG_MEMTEST_START 0x80000000 /* memtest start address */ @@ -600,9 +720,7 @@ index 0000000..a9b480b +#define PHYS_SDRAM_1 0x80000000 /* DDR Start */ +#define PHYS_SDRAM_1_SIZE 0x08000000 /* DDR size 128MB */ +#define DDR_4BANKS /* 4-bank DDR2 (128MB) */ -+/*====================*/ +/* Serial Driver info */ -+/*====================*/ +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE 4 /* NS16550 register size */ @@ -611,16 +729,12 @@ index 0000000..a9b480b +#define CONFIG_CONS_INDEX 1 /* use UART0 for console */ +#define CONFIG_BAUDRATE 115200 /* Default baud rate */ +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } -+/*===================*/ +/* I2C Configuration */ -+/*===================*/ +#define CONFIG_HARD_I2C +#define CONFIG_DRIVER_DAVINCI_I2C +#define CFG_I2C_SPEED 80000 /* 100Kbps won't work, silicon bug */ +#define CFG_I2C_SLAVE 10 /* Bogus, master-only in U-Boot */ -+/*==================================*/ +/* Network & Ethernet Configuration */ -+/*==================================*/ +#define CONFIG_DRIVER_TI_EMAC +#define CONFIG_MII +#define CONFIG_BOOTP_DEFAULT @@ -629,9 +743,7 @@ index 0000000..a9b480b +#define CONFIG_BOOTP_SEND_HOSTNAME +#define CONFIG_NET_RETRY_COUNT 10 +#define CONFIG_OVERWRITE_ETHADDR_ONCE -+/*=====================*/ +/* Flash & Environment */ -+/*=====================*/ +#undef CFG_ENV_IS_IN_FLASH +#define CFG_NO_FLASH +#define CFG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */ @@ -644,54 +756,46 @@ index 0000000..a9b480b +#define CFG_MAX_NAND_DEVICE 1 /* Max number of NAND devices */ +#define NAND_MAX_CHIPS 1 +#define CFG_ENV_OFFSET 0x0 /* Block 0--not used by bootcode */ -+/*=====================*/ -+/* Board related stuff */ -+/*=====================*/ -+/*==========================================*/ -+/* I2C switch definitions for PCA9543 chip */ -+/* on Lyrtech SFF SDR board. */ -+/*==========================================*/ ++/* I2C switch definitions for PCA9543 chip */ +#define CFG_I2C_PCA9543_ADDR 0x70 -+#define CFG_I2C_PCA9543_ADDR_LEN 0 /* This chip has a single register. */ ++#define CFG_I2C_PCA9543_ADDR_LEN 0 /* Single register. */ +#define CFG_I2C_PCA9543_ENABLE_CH0 0x01 /* Enable channel 0. */ -+/*==============================*/ +/* U-Boot general configuration */ -+/*==============================*/ -+#undef CONFIG_USE_IRQ /* No IRQ/FIQ in U-Boot */ ++#undef CONFIG_USE_IRQ /* No IRQ/FIQ in U-Boot */ +#define CONFIG_MISC_INIT_R -+#undef CONFIG_BOOTDELAY ++#define CONFIG_BOOTDELAY 5 /* Autoboot after 5 seconds. */ +#define CONFIG_BOOTFILE "uImage" /* Boot file name */ +#define CFG_PROMPT "U-Boot > " /* Monitor Command Prompt */ +#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ -+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print buffer sz */ ++#define CFG_PBSIZE \ ++ (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) /* Print buffer size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ -+#define CFG_LOAD_ADDR 0x80700000 /* default Linux kernel load address */ ++#define CFG_LOAD_ADDR 0x80700000 /* Default Linux kernel ++ * load address. */ +#define CONFIG_VERSION_VARIABLE -+#define CONFIG_AUTO_COMPLETE /* Won't work with hush so far, may be later */ ++#define CONFIG_AUTO_COMPLETE /* Won't work with hush so far, ++ * may be later */ +#define CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " +#define CONFIG_CMDLINE_EDITING +#define CFG_LONGHELP +#define CONFIG_CRC32_VERIFY +#define CONFIG_MX_CYCLIC -+/* -+ * Define this to load an Integrity kernel. -+ * -+#define CONFIG_CMD_ELF -+ */ -+ -+/*===================*/ +/* Linux Information */ -+/*===================*/ +#define LINUX_BOOT_PARAM_ADDR 0x80000100 +#define CONFIG_CMDLINE_TAG +#define CONFIG_SETUP_MEMORY_TAGS -+#define CONFIG_BOOTARGS "mem=56M console=ttyS0,115200n8 root=/dev/hda1 rw noinitrd ip=dhcp" -+#define CONFIG_BOOTCOMMAND "setenv setboot setenv bootargs \\$(bootargs) video=dm64xxfb:output=\\$(videostd);run setboot" -+/*=================*/ ++#define CONFIG_BOOTARGS \ ++ "mem=56M " \ ++ "console=ttyS0,115200n8 " \ ++ "root=/dev/nfs rw noinitrd ip=dhcp " \ ++ "nfsroot=${serverip}:/nfsroot/sffsdr " \ ++ "nwhwconf=device:eth0,hwaddr:${ethaddr}" ++#define CONFIG_BOOTCOMMAND \ ++ "nand read 87A00000 100000 300000;" \ ++ "bootelf 87A00000" +/* U-Boot commands */ -+/*=================*/ +#include +#define CONFIG_CMD_ASKENV +#define CONFIG_CMD_DHCP @@ -707,12 +811,20 @@ index 0000000..a9b480b +#undef CONFIG_CMD_SETGETDCR +#undef CONFIG_CMD_FLASH +#undef CONFIG_CMD_IMLS -+/*=======================*/ +/* KGDB support (if any) */ -+/*=======================*/ +#ifdef CONFIG_CMD_KGDB +#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */ +#endif +#endif /* __CONFIG_H */ +------------------------------------------------------------------------- +Check out the new SourceForge.net Marketplace. +It's the best place to buy or sell services for +just about anything Open Source. +http://sourceforge.net/services/buy/index.php +_______________________________________________ +U-Boot-Users mailing list +U-Boot-Users@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/u-boot-users + diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index 68d5167b8b..545438e9f7 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,7 +1,7 @@ require u-boot.inc PR="r4" -SRCREV_davinci-sffsdr = "4ce1e23b5e12283579828b3d23e8fd6e1328a7aa" +SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" SRCREV_beagleboard = "a94f22f08f280905926219e568568964cb9eeb9d" SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git " -- cgit v1.2.3 From e7b01db35cb3e2a99513e6ee0006f1c2321c19d7 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 15:35:23 +0000 Subject: oprofile: fix build with gcc 4.3 --- packages/oprofile/oprofile/gcc43x-fix.patch | 254 ++++++++++++++++++++++++++++ packages/oprofile/oprofile_0.9.3.bb | 5 +- 2 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 packages/oprofile/oprofile/gcc43x-fix.patch diff --git a/packages/oprofile/oprofile/gcc43x-fix.patch b/packages/oprofile/oprofile/gcc43x-fix.patch new file mode 100644 index 0000000000..4be15cb81d --- /dev/null +++ b/packages/oprofile/oprofile/gcc43x-fix.patch @@ -0,0 +1,254 @@ +This is a multi-part message in MIME format. +--------------010700040803000401040503 +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit + +When I was going through OProfile to compile using GCC-4.3 I found a number of +include that needed to be added. Information about porting applications to +GCC-4.3 is on: + +http://gcc.gnu.org/gcc-4.3/porting_to.html + +The attached patch has required changes to successfully compile with GCC 4.3. I +have tested that the oprofile still builds on Fedora 8 and RHEL 4 machines. +However, I haven't tested on older distrobutions. Does anyone see a problem with +this patch on older systems? If not, I would like to check this in. + +-Will + +2008-02-15 Will Cohen + + * gui/oprof_start_util.cpp + * libutil++/file_manip.cpp + * libutil++/bfd_support.cpp + * libutil++/bfd_spu_support.cpp + * libutil++/op_spu_bfd.cpp + * libutil++/cverb.cpp + * libutil++/child_reader.cpp + * pp/opgprof_options.cpp + * pp/opannotate_options.cpp + * pp/oparchive.cpp + * pp/common_option.cpp + * libpp/sample_container.cpp + * libpp/op_header.cpp + * libpp/profile.cpp + * libabi/opimport.cpp + * libregex/demangle_symbol.cpp: Add includes for gcc 4.3 compatibility. + +--------------010700040803000401040503 +Content-Type: text/x-patch; + name="oprofile_gcc43.patch" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline; + filename="oprofile_gcc43.patch" + +diff -up oprofile-gcc43/pp/oparchive.cpp.orig oprofile-gcc43/pp/oparchive.cpp +--- oprofile-gcc43/pp/oparchive.cpp.orig 2007-11-20 15:47:00.000000000 -0500 ++++ oprofile-gcc43/pp/oparchive.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -12,6 +12,7 @@ + + #include + #include ++#include + + #include + #include +diff -up oprofile-gcc43/pp/opgprof_options.cpp.orig oprofile-gcc43/pp/opgprof_options.cpp +--- oprofile-gcc43/pp/opgprof_options.cpp.orig 2007-11-20 15:47:00.000000000 -0500 ++++ oprofile-gcc43/pp/opgprof_options.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + + #include "opgprof_options.h" + #include "popt_options.h" +diff -up oprofile-gcc43/pp/common_option.cpp.orig oprofile-gcc43/pp/common_option.cpp +--- oprofile-gcc43/pp/common_option.cpp.orig 2007-11-20 15:46:59.000000000 -0500 ++++ oprofile-gcc43/pp/common_option.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + + #include "op_config.h" + #include "locate_images.h" +diff -up oprofile-gcc43/pp/opannotate_options.cpp.orig oprofile-gcc43/pp/opannotate_options.cpp +--- oprofile-gcc43/pp/opannotate_options.cpp.orig 2008-02-13 13:57:22.000000000 -0500 ++++ oprofile-gcc43/pp/opannotate_options.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + + #include "profile_spec.h" + #include "arrange_profiles.h" +diff -up oprofile-gcc43/libregex/demangle_symbol.cpp.orig oprofile-gcc43/libregex/demangle_symbol.cpp +--- oprofile-gcc43/libregex/demangle_symbol.cpp.orig 2007-06-03 12:50:17.000000000 -0400 ++++ oprofile-gcc43/libregex/demangle_symbol.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -8,6 +8,8 @@ + * @author John Levon + */ + ++#include ++ + #include "config.h" + + #include "demangle_symbol.h" +diff -up oprofile-gcc43/libpp/sample_container.cpp.orig oprofile-gcc43/libpp/sample_container.cpp +--- oprofile-gcc43/libpp/sample_container.cpp.orig 2003-08-10 20:59:18.000000000 -0400 ++++ oprofile-gcc43/libpp/sample_container.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -9,6 +9,7 @@ + * @author John Levon + */ + ++#include + #include + #include + #include +diff -up oprofile-gcc43/libpp/profile.cpp.orig oprofile-gcc43/libpp/profile.cpp +--- oprofile-gcc43/libpp/profile.cpp.orig 2007-11-12 16:56:07.000000000 -0500 ++++ oprofile-gcc43/libpp/profile.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + + #include + +diff -up oprofile-gcc43/libpp/op_header.cpp.orig oprofile-gcc43/libpp/op_header.cpp +--- oprofile-gcc43/libpp/op_header.cpp.orig 2007-11-12 16:56:07.000000000 -0500 ++++ oprofile-gcc43/libpp/op_header.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + #include + #include +diff -up oprofile-gcc43/libabi/opimport.cpp.orig oprofile-gcc43/libabi/opimport.cpp +--- oprofile-gcc43/libabi/opimport.cpp.orig 2005-08-17 15:15:41.000000000 -0400 ++++ oprofile-gcc43/libabi/opimport.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -17,6 +17,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +diff -up oprofile-gcc43/gui/oprof_start_util.cpp.orig oprofile-gcc43/gui/oprof_start_util.cpp +--- oprofile-gcc43/gui/oprof_start_util.cpp.orig 2005-08-07 07:15:48.000000000 -0400 ++++ oprofile-gcc43/gui/oprof_start_util.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include + #include +diff -up oprofile-gcc43/libutil++/file_manip.cpp.orig oprofile-gcc43/libutil++/file_manip.cpp +--- oprofile-gcc43/libutil++/file_manip.cpp.orig 2007-11-12 16:56:07.000000000 -0500 ++++ oprofile-gcc43/libutil++/file_manip.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -15,6 +15,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +diff -up oprofile-gcc43/libutil++/bfd_support.cpp.orig oprofile-gcc43/libutil++/bfd_support.cpp +--- oprofile-gcc43/libutil++/bfd_support.cpp.orig 2007-11-12 16:56:07.000000000 -0500 ++++ oprofile-gcc43/libutil++/bfd_support.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -19,6 +19,8 @@ + #include + #include + #include ++#include ++#include + + using namespace std; + +diff -up oprofile-gcc43/libutil++/child_reader.cpp.orig oprofile-gcc43/libutil++/child_reader.cpp +--- oprofile-gcc43/libutil++/child_reader.cpp.orig 2004-01-19 15:00:27.000000000 -0500 ++++ oprofile-gcc43/libutil++/child_reader.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -11,10 +11,13 @@ + + #include + #include ++#include + + #include + #include + #include ++#include ++#include + + #include "op_libiberty.h" + #include "child_reader.h" +diff -up oprofile-gcc43/libutil++/bfd_spu_support.cpp.orig oprofile-gcc43/libutil++/bfd_spu_support.cpp +--- oprofile-gcc43/libutil++/bfd_spu_support.cpp.orig 2008-02-13 13:57:18.000000000 -0500 ++++ oprofile-gcc43/libutil++/bfd_spu_support.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + + struct spu_elf { +diff -up oprofile-gcc43/libutil++/cverb.cpp.orig oprofile-gcc43/libutil++/cverb.cpp +--- oprofile-gcc43/libutil++/cverb.cpp.orig 2006-11-20 10:01:48.000000000 -0500 ++++ oprofile-gcc43/libutil++/cverb.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + + #include "cverb.h" + +diff -up oprofile-gcc43/libutil++/op_spu_bfd.cpp.orig oprofile-gcc43/libutil++/op_spu_bfd.cpp +--- oprofile-gcc43/libutil++/op_spu_bfd.cpp.orig 2008-02-13 13:57:18.000000000 -0500 ++++ oprofile-gcc43/libutil++/op_spu_bfd.cpp 2008-02-15 10:58:50.000000000 -0500 +@@ -14,6 +14,8 @@ + #include + + #include ++#include ++#include + + #include "op_bfd.h" + #include "locate_images.h" + +--------------010700040803000401040503 +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +------------------------------------------------------------------------- +This SF.net email is sponsored by: Microsoft +Defy all challenges. Microsoft(R) Visual Studio 2008. +http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ +--------------010700040803000401040503 +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +_______________________________________________ +oprofile-list mailing list +oprofile-list@lists.sourceforge.net +https://lists.sourceforge.net/lists/listinfo/oprofile-list + +--------------010700040803000401040503-- diff --git a/packages/oprofile/oprofile_0.9.3.bb b/packages/oprofile/oprofile_0.9.3.bb index c4194ab2e1..a302068c27 100644 --- a/packages/oprofile/oprofile_0.9.3.bb +++ b/packages/oprofile/oprofile_0.9.3.bb @@ -4,7 +4,8 @@ of profiling all running code at low overhead." LICENSE = "GPL" DEPENDS = "popt binutils" RDEPENDS = "binutils-symlinks" -PR = "r4" +RRECOMMENDS = "kernel-vmlinux" +PR = "r6" SRC_URI = "${SOURCEFORGE_MIRROR}/oprofile/oprofile-${PV}.tar.gz \ file://armv6_fix.patch;patch=1 \ @@ -12,7 +13,9 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/oprofile/oprofile-${PV}.tar.gz \ file://root_option.patch;patch=1 \ file://opstart.patch;patch=1 \ file://fix-arith.patch;patch=1;pnum=0 \ + file://gcc43x-fix.patch;patch=1 \ file://acinclude.m4" + S = "${WORKDIR}/oprofile-${PV}" inherit autotools -- cgit v1.2.3 From 5b84c61ca405f8002bf053a60c22ff8cd66bfd1d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 17:56:19 +0000 Subject: gst-ffmpeg: add 0.10.4, disabled by default --- .../gstreamer/gst-ffmpeg-0.10.4/.mtn2git_empty | 0 .../gst-ffmpeg-0.10.4/configure-hack.diff | 10 +++++++ packages/gstreamer/gst-ffmpeg_0.10.4.bb | 34 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 packages/gstreamer/gst-ffmpeg-0.10.4/.mtn2git_empty create mode 100644 packages/gstreamer/gst-ffmpeg-0.10.4/configure-hack.diff create mode 100644 packages/gstreamer/gst-ffmpeg_0.10.4.bb diff --git a/packages/gstreamer/gst-ffmpeg-0.10.4/.mtn2git_empty b/packages/gstreamer/gst-ffmpeg-0.10.4/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gstreamer/gst-ffmpeg-0.10.4/configure-hack.diff b/packages/gstreamer/gst-ffmpeg-0.10.4/configure-hack.diff new file mode 100644 index 0000000000..0c3b5b162f --- /dev/null +++ b/packages/gstreamer/gst-ffmpeg-0.10.4/configure-hack.diff @@ -0,0 +1,10 @@ +--- /tmp/configure.ac 2008-07-03 19:47:44.000000000 +0200 ++++ gst-ffmpeg-0.10.4/configure.ac 2008-07-03 19:47:57.000000000 +0200 +@@ -294,7 +294,6 @@ + AC_SUBST(FFMPEG_CO_DIR) + AC_SUBST(FFMPEG_SVN) + AC_SUBST(FFMPEG_REVISION) +- AC_CONFIG_SUBDIRS(gst-libs/ext/ffmpeg) + AC_MSG_NOTICE([Using included FFMpeg code]) + fi + diff --git a/packages/gstreamer/gst-ffmpeg_0.10.4.bb b/packages/gstreamer/gst-ffmpeg_0.10.4.bb new file mode 100644 index 0000000000..fdc986a0a7 --- /dev/null +++ b/packages/gstreamer/gst-ffmpeg_0.10.4.bb @@ -0,0 +1,34 @@ +DESCRIPTION = "FFmpeg-based GStreamer plug-in" +SECTION = "multimedia" +PRIORITY = "optional" +LICENSE = "LGPL" +HOMEPAGE = "http://www.gstreamer.net/" +DEPENDS = "ffmpeg gstreamer zlib" +PR = "r0" + +# This uses the systems ffmpeg, which is unsupported, but we can't build the internal one with the current autotools (ab)usage +DEFAULT_PREFERENCE = "-1" + +inherit autotools pkgconfig + +SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \ + file://configure-hack.diff;patch =1 \ +" + +FILES_${PN} += "${libdir}/gstreamer-0.10/*.so" +FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug" +FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a" + +EXTRA_OECONF = "--disable-sdltest --disable-ffplay --disable-freetypetest \ + --disable-vorbis --disable-vorbistest --disable-encoders \ + --disable-v4l --disable-audio-oss --disable-dv1394 \ + --disable-vhook --with-system-ffmpeg --disable-ffserver \ + --enable-pp --disable-decoder-vorbis" + +# We do this because the install program is called with -s which causes it to +# call "strip" and it then mangles cross compiled stuff.. +PATH_prepend="${CROSS_DIR}/${TARGET_SYS}/bin:" + +# Hack to get STAGING_LIBDIR into the linker path when building ffmpeg +CC = "${CCACHE} ${HOST_PREFIX}gcc ${TARGET_CC_ARCH} -L${STAGING_LIBDIR}" + -- cgit v1.2.3 From 403e16fa076f702a357c12df00a7c2637b9b9c24 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Thu, 3 Jul 2008 17:57:35 +0000 Subject: zhone: uses distutils now --- packages/freesmartphone/zhone_git.bb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/freesmartphone/zhone_git.bb b/packages/freesmartphone/zhone_git.bb index c9411a58c3..a766eb1ab5 100644 --- a/packages/freesmartphone/zhone_git.bb +++ b/packages/freesmartphone/zhone_git.bb @@ -1,16 +1,16 @@ DESCRIPTION = "Zhone: Zen Phone" LICENSE = "GPL" SECTION = "x11" -DEPENDS = "edje-native" +DEPENDS = "edje-native python-pyrex-native python-cython-native" RDEPENDS = "task-python-efl python-textutils python-dbus" PV = "0.0.0+gitr${SRCREV}" -PR = "r5" +PR = "r6" SRC_URI = "${FREESMARTPHONE_GIT}/zhone.git;protocol=git;branch=master \ file://80zhone" S = "${WORKDIR}/git" -inherit autotools +inherit distutils do_install_append() { install -d ${D}${sysconfdir}/X11/Xsession.d/ @@ -18,6 +18,3 @@ do_install_append() { } FILES_${PN} += "${datadir} ${sysconfdir}" - -PACKAGE_ARCH = "all" - -- cgit v1.2.3 From 8794aab16b8db895c656e4021f755f6a585a676b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 3 Jul 2008 18:48:54 +0000 Subject: gst-ffmpeg 0.10.4: fix src_uri --- packages/gstreamer/gst-ffmpeg_0.10.4.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gstreamer/gst-ffmpeg_0.10.4.bb b/packages/gstreamer/gst-ffmpeg_0.10.4.bb index fdc986a0a7..dc6db0dd9c 100644 --- a/packages/gstreamer/gst-ffmpeg_0.10.4.bb +++ b/packages/gstreamer/gst-ffmpeg_0.10.4.bb @@ -4,7 +4,7 @@ PRIORITY = "optional" LICENSE = "LGPL" HOMEPAGE = "http://www.gstreamer.net/" DEPENDS = "ffmpeg gstreamer zlib" -PR = "r0" +PR = "r1" # This uses the systems ffmpeg, which is unsupported, but we can't build the internal one with the current autotools (ab)usage DEFAULT_PREFERENCE = "-1" @@ -12,7 +12,7 @@ DEFAULT_PREFERENCE = "-1" inherit autotools pkgconfig SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \ - file://configure-hack.diff;patch =1 \ + file://configure-hack.diff;patch=1 \ " FILES_${PN} += "${libdir}/gstreamer-0.10/*.so" -- cgit v1.2.3 From c0149ee4a8478d3b771847b9bfc7b5e0cdc370e5 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Thu, 3 Jul 2008 20:26:29 +0000 Subject: davinci-sffsdr : Update kernel defconfig. --- .../linux/linux-davinci/davinci-sffsdr/defconfig | 48 ++++++++++++++++------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/packages/linux/linux-davinci/davinci-sffsdr/defconfig b/packages/linux/linux-davinci/davinci-sffsdr/defconfig index 3ebe33cf0d..8f53af1a17 100644 --- a/packages/linux/linux-davinci/davinci-sffsdr/defconfig +++ b/packages/linux/linux-davinci/davinci-sffsdr/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.25-davinci1 -# Thu May 22 17:00:44 2008 +# Linux kernel version: 2.6.26-rc5-davinci1 +# Sun Jun 22 19:30:45 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -31,7 +31,6 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y @@ -62,6 +61,7 @@ CONFIG_SYSCTL=y CONFIG_EMBEDDED=y CONFIG_UID16=y CONFIG_SYSCTL_SYSCALL=y +CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_EXTRA_PASS is not set @@ -88,12 +88,14 @@ CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y +# CONFIG_HAVE_DMA_ATTRS is not set CONFIG_PROC_PAGE_MONITOR=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y # CONFIG_TINY_SHMEM is not set CONFIG_BASE_SMALL=0 CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_MODVERSIONS=y @@ -182,6 +184,8 @@ CONFIG_ARCH_DAVINCI644x=y CONFIG_MACH_SFFSDR=y CONFIG_DAVINCI_I2C_EXPANDER=y # CONFIG_DAVINCI_MCBSP is not set +# CONFIG_DAVINCI_RESET_CLOCKS is not set +# CONFIG_DAVINCI_BOOT_TAG is not set # # DaVinci Options @@ -225,7 +229,7 @@ CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_PREEMPT=y +# CONFIG_PREEMPT is not set CONFIG_HZ=100 CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set @@ -238,6 +242,7 @@ CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y # CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4096 # CONFIG_RESOURCES_64BIT is not set CONFIG_ZONE_DMA_FLAG=1 @@ -252,7 +257,7 @@ CONFIG_ALIGNMENT_TRAP=y # CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="" +CONFIG_CMDLINE=" debug " # CONFIG_XIP_KERNEL is not set # CONFIG_KEXEC is not set @@ -425,6 +430,7 @@ CONFIG_MTD_PARTITIONS=y # CONFIG_MTD_REDBOOT_PARTS is not set # CONFIG_MTD_CMDLINE_PARTS is not set # CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_AR7_PARTS is not set # # User Modules And Translation Layers @@ -654,8 +660,8 @@ CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_PENMOUNT is not set # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set # CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set # CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set # CONFIG_INPUT_MISC is not set @@ -675,6 +681,7 @@ CONFIG_VT=y # CONFIG_VT_CONSOLE is not set CONFIG_HW_CONSOLE=y # CONFIG_VT_HW_CONSOLE_BINDING is not set +CONFIG_DEVKMEM=y # CONFIG_SERIAL_NONSTANDARD is not set # @@ -737,12 +744,7 @@ CONFIG_GPIOEXPANDER_DAVINCI=y # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# # CONFIG_SPI is not set -# CONFIG_SPI_MASTER is not set CONFIG_HAVE_GPIO_LIB=y # @@ -842,8 +844,17 @@ CONFIG_SSB_POSSIBLE=y # # Multimedia devices # + +# +# Multimedia core support +# # CONFIG_VIDEO_DEV is not set # CONFIG_DVB_CORE is not set +# CONFIG_VIDEO_MEDIA is not set + +# +# Multimedia drivers +# # CONFIG_DAB is not set # @@ -912,11 +923,15 @@ CONFIG_USB_DEVICEFS=y CONFIG_USB_DEVICE_CLASS=y # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set # # USB Host Controller Drivers # +# CONFIG_USB_C67X00_HCD is not set # CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set # CONFIG_USB_SL811_HCD is not set # CONFIG_USB_R8A66597_HCD is not set CONFIG_USB_MUSB_HDRC=m @@ -937,6 +952,7 @@ CONFIG_USB_MUSB_LOGLEVEL=0 # # CONFIG_USB_ACM is not set # CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set # # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' @@ -958,6 +974,7 @@ CONFIG_USB_STORAGE=m # CONFIG_USB_STORAGE_ALAUDA is not set # CONFIG_USB_STORAGE_ONETOUCH is not set # CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set # CONFIG_USB_LIBUSUAL is not set # @@ -994,6 +1011,7 @@ CONFIG_USB_MON=y # CONFIG_USB_TRANCEVIBRATOR is not set # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set CONFIG_USB_GADGET=m # CONFIG_USB_GADGET_DEBUG is not set CONFIG_USB_GADGET_DEBUG_FILES=y @@ -1005,6 +1023,7 @@ CONFIG_USB_GADGET_SELECTED=y # CONFIG_USB_GADGET_NET2280 is not set # CONFIG_USB_GADGET_PXA2XX is not set # CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_PXA27X is not set # CONFIG_USB_GADGET_GOKU is not set # CONFIG_USB_GADGET_LH7A40X is not set # CONFIG_USB_GADGET_OMAP is not set @@ -1031,6 +1050,7 @@ CONFIG_MMC=m CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_BOUNCE=y # CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set # # MMC/SD Host Controller Drivers @@ -1050,6 +1070,7 @@ CONFIG_LEDS_GPIO=m CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=m CONFIG_LEDS_TRIGGER_HEARTBEAT=m +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y @@ -1278,6 +1299,7 @@ CONFIG_NLS_UTF8=m # CONFIG_PRINTK_TIME is not set CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=1024 # CONFIG_MAGIC_SYSRQ is not set # CONFIG_UNUSED_SYMBOLS is not set CONFIG_DEBUG_FS=y @@ -1288,8 +1310,8 @@ CONFIG_DETECT_SOFTLOCKUP=y CONFIG_SCHED_DEBUG=y # CONFIG_SCHEDSTATS is not set CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_OBJECTS is not set # CONFIG_DEBUG_SLAB is not set -CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set @@ -1403,6 +1425,8 @@ CONFIG_CRYPTO=y # Library routines # CONFIG_BITREVERSE=y +# CONFIG_GENERIC_FIND_FIRST_BIT is not set +# CONFIG_GENERIC_FIND_NEXT_BIT is not set CONFIG_CRC_CCITT=m # CONFIG_CRC16 is not set # CONFIG_CRC_ITU_T is not set -- cgit v1.2.3 From 0cc43b56da7ea0a82e3013afa93e8357d0230ca4 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 4 Jul 2008 08:31:26 +0000 Subject: linux-omap2 git: add oprofile patch for armv7a --- .../linux/linux-omap2-git/beagleboard/defconfig | 18 +- .../beagleboard/oprofile-0.9.3.armv7.diff | 611 +++++++++++++++++++++ packages/linux/linux-omap2_git.bb | 5 +- 3 files changed, 622 insertions(+), 12 deletions(-) create mode 100644 packages/linux/linux-omap2-git/beagleboard/oprofile-0.9.3.armv7.diff diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 7fc46c9113..87fadae1ec 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1,10 +1,10 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.26-rc7-omap1 -# Tue Jun 24 20:16:52 2008 +# Linux kernel version: 2.6.26-rc8-omap1 +# Fri Jul 4 09:57:18 2008 # CONFIG_ARM=y -CONFIG_SYS_SUPPORTS_APM_EMULATION=n +CONFIG_SYS_SUPPORTS_APM_EMULATION=y CONFIG_GENERIC_GPIO=y CONFIG_GENERIC_TIME=y CONFIG_GENERIC_CLOCKEVENTS=y @@ -23,6 +23,7 @@ CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ARCH_SUPPORTS_AOUT=y CONFIG_ZONE_DMA=y +CONFIG_OPROFILE_ARMV7=y CONFIG_VECTORS_BASE=0xffff0000 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" @@ -31,7 +32,6 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" # CONFIG_EXPERIMENTAL=y CONFIG_BROKEN_ON_SMP=y -CONFIG_LOCK_KERNEL=y CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y @@ -84,8 +84,9 @@ CONFIG_SLUB_DEBUG=y # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set -# CONFIG_PROFILING is not set +CONFIG_PROFILING=y # CONFIG_MARKERS is not set +CONFIG_OPROFILE=y CONFIG_HAVE_OPROFILE=y # CONFIG_KPROBES is not set CONFIG_HAVE_KPROBES=y @@ -254,7 +255,7 @@ CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_PREEMPT=n +# CONFIG_PREEMPT is not set CONFIG_HZ=128 CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set @@ -346,7 +347,7 @@ CONFIG_PM=y CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y -CONFIG_APM_EMULATION=n +# CONFIG_APM_EMULATION is not set CONFIG_ARCH_SUSPEND_POSSIBLE=y # @@ -772,7 +773,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 # CONFIG_INPUT_JOYDEV is not set CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set -# CONFIG_INPUT_APMPOWER is not set # # Input Device Drivers @@ -932,7 +932,6 @@ CONFIG_HAVE_GPIO_LIB=y CONFIG_POWER_SUPPLY=m # CONFIG_POWER_SUPPLY_DEBUG is not set # CONFIG_PDA_POWER is not set -# CONFIG_APM_POWER is not set # CONFIG_BATTERY_DS2760 is not set # CONFIG_BATTERY_BQ27x00 is not set CONFIG_HWMON=y @@ -1827,7 +1826,6 @@ CONFIG_TIMER_STATS=y # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set -CONFIG_DEBUG_PREEMPT=y # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set # CONFIG_DEBUG_SPINLOCK is not set diff --git a/packages/linux/linux-omap2-git/beagleboard/oprofile-0.9.3.armv7.diff b/packages/linux/linux-omap2-git/beagleboard/oprofile-0.9.3.armv7.diff new file mode 100644 index 0000000000..dbc11fbe7d --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/oprofile-0.9.3.armv7.diff @@ -0,0 +1,611 @@ +Hi, + +This patch adds Oprofile support on ARMv7, using the PMNC unit. +Tested on OMAP3430 SDP. + +Feedback and comments are welcome. + +The patch to user space components is attached for reference. It i applies +against version 0.9.3 of oprofile source +(http://prdownloads.sourceforge.net/oprofile/oprofile-0.9.3.tar.gz). + +Regards, +Jean. + +--- + +From: Jean Pihet +Date: Tue, 6 May 2008 17:21:44 +0200 +Subject: [PATCH] ARM: Add ARMv7 oprofile support + +Add ARMv7 Oprofile support to kernel + +Signed-off-by: Jean Pihet +--- + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index c60a27d..60b50a0 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -161,6 +161,11 @@ config OPROFILE_MPCORE + config OPROFILE_ARM11_CORE + bool + ++config OPROFILE_ARMV7 ++ def_bool y ++ depends on CPU_V7 && !SMP ++ bool ++ + endif + + config VECTORS_BASE +diff --git a/arch/arm/oprofile/Makefile b/arch/arm/oprofile/Makefile +index e61d0cc..88e31f5 100644 +--- a/arch/arm/oprofile/Makefile ++++ b/arch/arm/oprofile/Makefile +@@ -11,3 +11,4 @@ oprofile-$(CONFIG_CPU_XSCALE) += op_model_xscale.o + oprofile-$(CONFIG_OPROFILE_ARM11_CORE) += op_model_arm11_core.o + oprofile-$(CONFIG_OPROFILE_ARMV6) += op_model_v6.o + oprofile-$(CONFIG_OPROFILE_MPCORE) += op_model_mpcore.o ++oprofile-$(CONFIG_OPROFILE_ARMV7) += op_model_v7.o +diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c +index 0a5cf3a..3fcd752 100644 +--- a/arch/arm/oprofile/common.c ++++ b/arch/arm/oprofile/common.c +@@ -145,6 +145,10 @@ int __init oprofile_arch_init(struct oprofile_operations *ops) + spec = &op_mpcore_spec; + #endif + ++#ifdef CONFIG_OPROFILE_ARMV7 ++ spec = &op_armv7_spec; ++#endif ++ + if (spec) { + ret = spec->init(); + if (ret < 0) +diff --git a/arch/arm/oprofile/op_arm_model.h +b/arch/arm/oprofile/op_arm_model.h +index 4899c62..8c4e4f6 100644 +--- a/arch/arm/oprofile/op_arm_model.h ++++ b/arch/arm/oprofile/op_arm_model.h +@@ -26,6 +26,7 @@ extern struct op_arm_model_spec op_xscale_spec; + + extern struct op_arm_model_spec op_armv6_spec; + extern struct op_arm_model_spec op_mpcore_spec; ++extern struct op_arm_model_spec op_armv7_spec; + + extern void arm_backtrace(struct pt_regs * const regs, unsigned int depth); + +diff --git a/arch/arm/oprofile/op_model_v7.c b/arch/arm/oprofile/op_model_v7.c +new file mode 100644 +index 0000000..a159bc1 +--- /dev/null ++++ b/arch/arm/oprofile/op_model_v7.c +@@ -0,0 +1,407 @@ ++/** ++ * @file op_model_v7.c ++ * ARM V7 (Cortex A8) Event Monitor Driver ++ * ++ * @remark Copyright 2008 Jean Pihet ++ * @remark Copyright 2004 ARM SMP Development Team ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "op_counter.h" ++#include "op_arm_model.h" ++#include "op_model_v7.h" ++ ++/* #define DEBUG */ ++ ++ ++/* ++ * ARM V7 PMNC support ++ */ ++ ++static u32 cnt_en[CNTMAX]; ++ ++static inline void armv7_pmnc_write(u32 val) ++{ ++ val &= PMNC_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c12, 0" : : "r" (val)); ++} ++ ++static inline u32 armv7_pmnc_read(void) ++{ ++ u32 val; ++ ++ asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r" (val)); ++ return val; ++} ++ ++static inline u32 armv7_pmnc_enable_counter(unsigned int cnt) ++{ ++ u32 val; ++ ++ if (cnt >= CNTMAX) { ++ printk(KERN_ERR "oprofile: CPU%u enabling wrong PMNC counter" ++ " %d\n", smp_processor_id(), cnt); ++ return -1; ++ } ++ ++ if (cnt == CCNT) ++ val = CNTENS_C; ++ else ++ val = (1 << (cnt - CNT0)); ++ ++ val &= CNTENS_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c12, 1" : : "r" (val)); ++ ++ return cnt; ++} ++ ++static inline u32 armv7_pmnc_disable_counter(unsigned int cnt) ++{ ++ u32 val; ++ ++ if (cnt >= CNTMAX) { ++ printk(KERN_ERR "oprofile: CPU%u disabling wrong PMNC counter" ++ " %d\n", smp_processor_id(), cnt); ++ return -1; ++ } ++ ++ if (cnt == CCNT) ++ val = CNTENC_C; ++ else ++ val = (1 << (cnt - CNT0)); ++ ++ val &= CNTENC_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c12, 2" : : "r" (val)); ++ ++ return cnt; ++} ++ ++static inline u32 armv7_pmnc_enable_intens(unsigned int cnt) ++{ ++ u32 val; ++ ++ if (cnt >= CNTMAX) { ++ printk(KERN_ERR "oprofile: CPU%u enabling wrong PMNC counter" ++ " interrupt enable %d\n", smp_processor_id(), cnt); ++ return -1; ++ } ++ ++ if (cnt == CCNT) ++ val = INTENS_C; ++ else ++ val = (1 << (cnt - CNT0)); ++ ++ val &= INTENS_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c14, 1" : : "r" (val)); ++ ++ return cnt; ++} ++ ++static inline u32 armv7_pmnc_getreset_flags(void) ++{ ++ u32 val; ++ ++ /* Read */ ++ asm volatile("mrc p15, 0, %0, c9, c12, 3" : "=r" (val)); ++ ++ /* Write to clear flags */ ++ val &= FLAG_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c12, 3" : : "r" (val)); ++ ++ return val; ++} ++ ++static inline int armv7_pmnc_select_counter(unsigned int cnt) ++{ ++ u32 val; ++ ++ if ((cnt == CCNT) || (cnt >= CNTMAX)) { ++ printk(KERN_ERR "oprofile: CPU%u selecting wrong PMNC counteri" ++ " %d\n", smp_processor_id(), cnt); ++ return -1; ++ } ++ ++ val = (cnt - CNT0) & SELECT_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c12, 5" : : "r" (val)); ++ ++ return cnt; ++} ++ ++static inline void armv7_pmnc_write_evtsel(unsigned int cnt, u32 val) ++{ ++ if (armv7_pmnc_select_counter(cnt) == cnt) { ++ val &= EVTSEL_MASK; ++ asm volatile("mcr p15, 0, %0, c9, c13, 1" : : "r" (val)); ++ } ++} ++ ++static void armv7_pmnc_reset_counter(unsigned int cnt) ++{ ++ u32 cpu_cnt = CPU_COUNTER(smp_processor_id(), cnt); ++ u32 val = -(u32)counter_config[cpu_cnt].count; ++ ++ switch (cnt) { ++ case CCNT: ++ armv7_pmnc_disable_counter(cnt); ++ ++ asm volatile("mcr p15, 0, %0, c9, c13, 0" : : "r" (val)); ++ ++ if (cnt_en[cnt] != 0) ++ armv7_pmnc_enable_counter(cnt); ++ ++ break; ++ ++ case CNT0: ++ case CNT1: ++ case CNT2: ++ case CNT3: ++ armv7_pmnc_disable_counter(cnt); ++ ++ if (armv7_pmnc_select_counter(cnt) == cnt) ++ asm volatile("mcr p15, 0, %0, c9, c13, 2" : : "r" (val)); ++ ++ if (cnt_en[cnt] != 0) ++ armv7_pmnc_enable_counter(cnt); ++ ++ break; ++ ++ default: ++ printk(KERN_ERR "oprofile: CPU%u resetting wrong PMNC counter" ++ " %d\n", smp_processor_id(), cnt); ++ break; ++ } ++} ++ ++int armv7_setup_pmnc(void) ++{ ++ unsigned int cnt; ++ ++ if (armv7_pmnc_read() & PMNC_E) { ++ printk(KERN_ERR "oprofile: CPU%u PMNC still enabled when setup" ++ " new event counter.\n", smp_processor_id()); ++ return -EBUSY; ++ } ++ ++ /* ++ * Initialize & Reset PMNC: C bit, D bit and P bit. ++ * Note: Using a slower count for CCNT (D bit: divide by 64) results ++ * in a more stable system ++ */ ++ armv7_pmnc_write(PMNC_P | PMNC_C | PMNC_D); ++ ++ ++ for (cnt = CCNT; cnt < CNTMAX; cnt++) { ++ unsigned long event; ++ u32 cpu_cnt = CPU_COUNTER(smp_processor_id(), cnt); ++ ++ /* ++ * Disable counter ++ */ ++ armv7_pmnc_disable_counter(cnt); ++ cnt_en[cnt] = 0; ++ ++ if (!counter_config[cpu_cnt].enabled) ++ continue; ++ ++ event = counter_config[cpu_cnt].event & 255; ++ ++ /* ++ * Set event (if destined for PMNx counters) ++ * We don't need to set the event if it's a cycle count ++ */ ++ if (cnt != CCNT) ++ armv7_pmnc_write_evtsel(cnt, event); ++ ++ /* ++ * Enable interrupt for this counter ++ */ ++ armv7_pmnc_enable_intens(cnt); ++ ++ /* ++ * Reset counter ++ */ ++ armv7_pmnc_reset_counter(cnt); ++ ++ /* ++ * Enable counter ++ */ ++ armv7_pmnc_enable_counter(cnt); ++ cnt_en[cnt] = 1; ++ } ++ ++ return 0; ++} ++ ++static inline void armv7_start_pmnc(void) ++{ ++ armv7_pmnc_write(armv7_pmnc_read() | PMNC_E); ++} ++ ++static inline void armv7_stop_pmnc(void) ++{ ++ armv7_pmnc_write(armv7_pmnc_read() & ~PMNC_E); ++} ++ ++/* ++ * CPU counters' IRQ handler (one IRQ per CPU) ++ */ ++static irqreturn_t armv7_pmnc_interrupt(int irq, void *arg) ++{ ++ struct pt_regs *regs = get_irq_regs(); ++ unsigned int cnt; ++ u32 flags; ++ ++ ++ /* ++ * Stop IRQ generation ++ */ ++ armv7_stop_pmnc(); ++ ++ /* ++ * Get and reset overflow status flags ++ */ ++ flags = armv7_pmnc_getreset_flags(); ++ ++ /* ++ * Cycle counter ++ */ ++ if (flags & FLAG_C) { ++ u32 cpu_cnt = CPU_COUNTER(smp_processor_id(), CCNT); ++ armv7_pmnc_reset_counter(CCNT); ++ oprofile_add_sample(regs, cpu_cnt); ++ } ++ ++ /* ++ * PMNC counters 0:3 ++ */ ++ for (cnt = CNT0; cnt < CNTMAX; cnt++) { ++ if (flags & (1 << (cnt - CNT0))) { ++ u32 cpu_cnt = CPU_COUNTER(smp_processor_id(), cnt); ++ armv7_pmnc_reset_counter(cnt); ++ oprofile_add_sample(regs, cpu_cnt); ++ } ++ } ++ ++ /* ++ * Allow IRQ generation ++ */ ++ armv7_start_pmnc(); ++ ++ return IRQ_HANDLED; ++} ++ ++int armv7_request_interrupts(int *irqs, int nr) ++{ ++ unsigned int i; ++ int ret = 0; ++ ++ for (i = 0; i < nr; i++) { ++ ret = request_irq(irqs[i], armv7_pmnc_interrupt, ++ IRQF_DISABLED, "CP15 PMNC", NULL); ++ if (ret != 0) { ++ printk(KERN_ERR "oprofile: unable to request IRQ%u" ++ " for ARMv7\n", ++ irqs[i]); ++ break; ++ } ++ } ++ ++ if (i != nr) ++ while (i-- != 0) ++ free_irq(irqs[i], NULL); ++ ++ return ret; ++} ++ ++void armv7_release_interrupts(int *irqs, int nr) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < nr; i++) ++ free_irq(irqs[i], NULL); ++} ++ ++#ifdef DEBUG ++static void armv7_pmnc_dump_regs(void) ++{ ++ u32 val; ++ unsigned int cnt; ++ ++ printk(KERN_INFO "PMNC registers dump:\n"); ++ ++ asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r" (val)); ++ printk(KERN_INFO "PMNC =0x%08x\n", val); ++ ++ asm volatile("mrc p15, 0, %0, c9, c12, 1" : "=r" (val)); ++ printk(KERN_INFO "CNTENS=0x%08x\n", val); ++ ++ asm volatile("mrc p15, 0, %0, c9, c14, 1" : "=r" (val)); ++ printk(KERN_INFO "INTENS=0x%08x\n", val); ++ ++ asm volatile("mrc p15, 0, %0, c9, c12, 3" : "=r" (val)); ++ printk(KERN_INFO "FLAGS =0x%08x\n", val); ++ ++ asm volatile("mrc p15, 0, %0, c9, c12, 5" : "=r" (val)); ++ printk(KERN_INFO "SELECT=0x%08x\n", val); ++ ++ asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r" (val)); ++ printk(KERN_INFO "CCNT =0x%08x\n", val); ++ ++ for (cnt = CNT0; cnt < CNTMAX; cnt++) { ++ armv7_pmnc_select_counter(cnt); ++ asm volatile("mrc p15, 0, %0, c9, c13, 2" : "=r" (val)); ++ printk(KERN_INFO "CNT[%d] count =0x%08x\n", cnt-CNT0, val); ++ asm volatile("mrc p15, 0, %0, c9, c13, 1" : "=r" (val)); ++ printk(KERN_INFO "CNT[%d] evtsel=0x%08x\n", cnt-CNT0, val); ++ } ++} ++#endif ++ ++ ++static int irqs[] = { ++#ifdef CONFIG_ARCH_OMAP3 ++ INT_34XX_BENCH_MPU_EMUL, ++#endif ++}; ++ ++static void armv7_pmnc_stop(void) ++{ ++#ifdef DEBUG ++ armv7_pmnc_dump_regs(); ++#endif ++ armv7_stop_pmnc(); ++ armv7_release_interrupts(irqs, ARRAY_SIZE(irqs)); ++} ++ ++static int armv7_pmnc_start(void) ++{ ++ int ret; ++ ++#ifdef DEBUG ++ armv7_pmnc_dump_regs(); ++#endif ++ ret = armv7_request_interrupts(irqs, ARRAY_SIZE(irqs)); ++ if (ret >= 0) ++ armv7_start_pmnc(); ++ ++ return ret; ++} ++ ++static int armv7_detect_pmnc(void) ++{ ++ return 0; ++} ++ ++struct op_arm_model_spec op_armv7_spec = { ++ .init = armv7_detect_pmnc, ++ .num_counters = 5, ++ .setup_ctrs = armv7_setup_pmnc, ++ .start = armv7_pmnc_start, ++ .stop = armv7_pmnc_stop, ++ .name = "arm/armv7", ++}; +diff --git a/arch/arm/oprofile/op_model_v7.h b/arch/arm/oprofile/op_model_v7.h +new file mode 100644 +index 0000000..08f40ea +--- /dev/null ++++ b/arch/arm/oprofile/op_model_v7.h +@@ -0,0 +1,101 @@ ++/** ++ * @file op_model_v7.h ++ * ARM v7 (Cortex A8) Event Monitor Driver ++ * ++ * @remark Copyright 2008 Jean Pihet ++ * @remark Copyright 2004 ARM SMP Development Team ++ * @remark Copyright 2000-2004 Deepak Saxena ++ * @remark Copyright 2000-2004 MontaVista Software Inc ++ * @remark Copyright 2004 Dave Jiang ++ * @remark Copyright 2004 Intel Corporation ++ * @remark Copyright 2004 Zwane Mwaikambo ++ * @remark Copyright 2004 Oprofile Authors ++ * ++ * @remark Read the file COPYING ++ * ++ * @author Zwane Mwaikambo ++ */ ++#ifndef OP_MODEL_V7_H ++#define OP_MODEL_V7_H ++ ++/* ++ * Per-CPU PMNC: config reg ++ */ ++#define PMNC_E (1 << 0) /* Enable all counters */ ++#define PMNC_P (1 << 1) /* Reset all counters */ ++#define PMNC_C (1 << 2) /* Cycle counter reset */ ++#define PMNC_D (1 << 3) /* CCNT counts every 64th cpu cycle */ ++#define PMNC_X (1 << 4) /* Export to ETM */ ++#define PMNC_DP (1 << 5) /* Disable CCNT if non-invasive debug*/ ++#define PMNC_MASK 0x3f /* Mask for writable bits */ ++ ++/* ++ * Available counters ++ */ ++#define CCNT 0 ++#define CNT0 1 ++#define CNT1 2 ++#define CNT2 3 ++#define CNT3 4 ++#define CNTMAX 5 ++ ++#define CPU_COUNTER(cpu, counter) ((cpu) * CNTMAX + (counter)) ++ ++/* ++ * CNTENS: counters enable reg ++ */ ++#define CNTENS_P0 (1 << 0) ++#define CNTENS_P1 (1 << 1) ++#define CNTENS_P2 (1 << 2) ++#define CNTENS_P3 (1 << 3) ++#define CNTENS_C (1 << 31) ++#define CNTENS_MASK 0x8000000f /* Mask for writable bits */ ++ ++/* ++ * CNTENC: counters disable reg ++ */ ++#define CNTENC_P0 (1 << 0) ++#define CNTENC_P1 (1 << 1) ++#define CNTENC_P2 (1 << 2) ++#define CNTENC_P3 (1 << 3) ++#define CNTENC_C (1 << 31) ++#define CNTENC_MASK 0x8000000f /* Mask for writable bits */ ++ ++/* ++ * INTENS: counters overflow interrupt enable reg ++ */ ++#define INTENS_P0 (1 << 0) ++#define INTENS_P1 (1 << 1) ++#define INTENS_P2 (1 << 2) ++#define INTENS_P3 (1 << 3) ++#define INTENS_C (1 << 31) ++#define INTENS_MASK 0x8000000f /* Mask for writable bits */ ++ ++/* ++ * EVTSEL: Event selection reg ++ */ ++#define EVTSEL_MASK 0x7f /* Mask for writable bits */ ++ ++/* ++ * SELECT: Counter selection reg ++ */ ++#define SELECT_MASK 0x1f /* Mask for writable bits */ ++ ++/* ++ * FLAG: counters overflow flag status reg ++ */ ++#define FLAG_P0 (1 << 0) ++#define FLAG_P1 (1 << 1) ++#define FLAG_P2 (1 << 2) ++#define FLAG_P3 (1 << 3) ++#define FLAG_C (1 << 31) ++#define FLAG_MASK 0x8000000f /* Mask for writable bits */ ++ ++ ++int armv7_setup_pmu(void); ++int armv7_start_pmu(void); ++int armv7_stop_pmu(void); ++int armv7_request_interrupts(int *, int); ++void armv7_release_interrupts(int *, int); ++ ++#endif +diff --git a/include/asm-arm/arch-omap/irqs.h +b/include/asm-arm/arch-omap/irqs.h +index c80e160..89ca90e 100644 +--- a/include/asm-arm/arch-omap/irqs.h ++++ b/include/asm-arm/arch-omap/irqs.h +@@ -297,6 +297,7 @@ + #define INT_243X_HS_USB_DMA 93 + #define INT_243X_CARKIT_IRQ 94 + ++#define INT_34XX_BENCH_MPU_EMUL 3 + #define INT_34XX_ST_MCBSP2_IRQ 4 + #define INT_34XX_ST_MCBSP3_IRQ 5 + #define INT_34XX_SYS_NIRQ 7 diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 0defe87be6..5307629282 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -2,10 +2,10 @@ require linux-omap.inc FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MACHINE}" -SRCREV = "050684c18f2ea0b08fdd5233a0cd3c7f96e00a0e" +SRCREV = "c32c81d59d2d8a66e63f82c9732db256d302068e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r36" +PR = "r38" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -20,6 +20,7 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://16bpp.patch;patch=1 \ file://no-empty-flash-warnings.patch;patch=1 \ file://logo_linux_clut224.ppm \ + file://oprofile-0.9.3.armv7.diff;patch=1 \ " SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ -- cgit v1.2.3 From b73b2c1d213d3cff1af98b38240ec977fd6cb61b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 4 Jul 2008 08:50:00 +0000 Subject: oprofile 0.9.3: add armv7a support --- packages/oprofile/oprofile/armv7a.diff | 151 +++++++++++++++++++++++++++++++++ packages/oprofile/oprofile_0.9.3.bb | 3 +- 2 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 packages/oprofile/oprofile/armv7a.diff diff --git a/packages/oprofile/oprofile/armv7a.diff b/packages/oprofile/oprofile/armv7a.diff new file mode 100644 index 0000000000..cb53e5e791 --- /dev/null +++ b/packages/oprofile/oprofile/armv7a.diff @@ -0,0 +1,151 @@ +diff -urN oprofile-0.9.3/ChangeLog oprofile-0.9.3.armv7/ChangeLog +--- oprofile-0.9.3/ChangeLog 2007-07-16 20:22:17.000000000 +0200 ++++ oprofile-0.9.3.armv7/ChangeLog 2008-04-23 18:38:40.000000000 +0200 +@@ -1,3 +1,14 @@ ++ ++2008-04-23 Jean Pihet ++ ++ * events/arm/armv7/events: ++ * events/arm/armv7/unit_masks: ++ * libop/op_cpu_type.c: ++ * libop/op_cpu_type.h: ++ * libop/op_events.c: ++ * utils/ophelp.c: Added ARMv7 support to be consistent with the kernel, ++ remove some duplicate code and add some extra events ++ + 2007-07-09 Maynard Johnson + + * doc/opreport.xsd: +diff -urN oprofile-0.9.3/events/arm/armv7/events oprofile-0.9.3.armv7/events/arm/armv7/events +--- oprofile-0.9.3/events/arm/armv7/events 1970-01-01 01:00:00.000000000 +0100 ++++ oprofile-0.9.3.armv7/events/arm/armv7/events 2008-04-24 15:06:48.000000000 +0200 +@@ -0,0 +1,53 @@ ++# ARM V7 events ++# From Cortex A8 DDI (ARM DDI 0344B, revision r1p1) ++# ++event:0x00 counters:1,2,3,4 um:zero minimum:500 name:PMNC_SW_INCR : Software increment of PMNC registers ++event:0x01 counters:1,2,3,4 um:zero minimum:500 name:IFETCH_MISS : Instruction fetch misses from cache or normal cacheable memory ++event:0x02 counters:1,2,3,4 um:zero minimum:500 name:ITLB_MISS : Instruction fetch misses from TLB ++event:0x03 counters:1,2,3,4 um:zero minimum:500 name:DCACHE_REFILL : Data R/W operation that causes a refill from cache or normal cacheable memory ++event:0x04 counters:1,2,3,4 um:zero minimum:500 name:DCACHE_ACCESS : Data R/W from cache ++event:0x05 counters:1,2,3,4 um:zero minimum:500 name:DTLB_REFILL : Data R/W that causes a TLB refill ++event:0x06 counters:1,2,3,4 um:zero minimum:500 name:DREAD : Data read architecturally executed (note: architecturally executed = for instructions that are unconditional or that pass the condition code) ++event:0x07 counters:1,2,3,4 um:zero minimum:500 name:DWRITE : Data write architecturally executed ++event:0x08 counters:1,2,3,4 um:zero minimum:500 name:INSTR_EXECUTED : All executed instructions ++event:0x09 counters:1,2,3,4 um:zero minimum:500 name:EXC_TAKEN : Exception taken ++event:0x0A counters:1,2,3,4 um:zero minimum:500 name:EXC_EXECUTED : Exception return architecturally executed ++event:0x0B counters:1,2,3,4 um:zero minimum:500 name:CID_WRITE : Instruction that writes to the Context ID Register architecturally executed ++event:0x0C counters:1,2,3,4 um:zero minimum:500 name:PC_WRITE : SW change of PC, architecturally executed (not by exceptions) ++event:0x0D counters:1,2,3,4 um:zero minimum:500 name:PC_IMM_BRANCH : Immediate branch instruction executed (taken or not) ++event:0x0E counters:1,2,3,4 um:zero minimum:500 name:PC_PROC_RETURN : Procedure return architecturally executed (not by exceptions) ++event:0x0F counters:1,2,3,4 um:zero minimum:500 name:UNALIGNED_ACCESS : Unaligned access architecturally executed ++event:0x10 counters:1,2,3,4 um:zero minimum:500 name:PC_BRANCH_MIS_PRED : Branch mispredicted or not predicted. Counts pipeline flushes because of misprediction ++event:0x12 counters:1,2,3,4 um:zero minimum:500 name:PC_BRANCH_MIS_USED : Branch or change in program flow that could have been predicted ++event:0x40 counters:1,2,3,4 um:zero minimum:500 name:WRITE_BUFFER_FULL : Any write buffer full cycle ++event:0x41 counters:1,2,3,4 um:zero minimum:500 name:L2_STORE_MERGED : Any store that is merged in L2 cache ++event:0x42 counters:1,2,3,4 um:zero minimum:500 name:L2_STORE_BUFF : Any bufferable store from load/store to L2 cache ++event:0x43 counters:1,2,3,4 um:zero minimum:500 name:L2_ACCESS : Any access to L2 cache ++event:0x44 counters:1,2,3,4 um:zero minimum:500 name:L2_CACH_MISS : Any cacheable miss in L2 cache ++event:0x45 counters:1,2,3,4 um:zero minimum:500 name:AXI_READ_CYCLES : Number of cycles for an active AXI read ++event:0x46 counters:1,2,3,4 um:zero minimum:500 name:AXI_WRITE_CYCLES : Number of cycles for an active AXI write ++event:0x47 counters:1,2,3,4 um:zero minimum:500 name:MEMORY_REPLAY : Any replay event in the memory subsystem ++event:0x48 counters:1,2,3,4 um:zero minimum:500 name:UNALIGNED_ACCESS_REPLAY : Unaligned access that causes a replay ++event:0x49 counters:1,2,3,4 um:zero minimum:500 name:L1_DATA_MISS : L1 data cache miss as a result of the hashing algorithm ++event:0x4A counters:1,2,3,4 um:zero minimum:500 name:L1_INST_MISS : L1 instruction cache miss as a result of the hashing algorithm ++event:0x4B counters:1,2,3,4 um:zero minimum:500 name:L1_DATA_COLORING : L1 data access in which a page coloring alias occurs ++event:0x4C counters:1,2,3,4 um:zero minimum:500 name:L1_NEON_DATA : NEON data access that hits L1 cache ++event:0x4D counters:1,2,3,4 um:zero minimum:500 name:L1_NEON_CACH_DATA : NEON cacheable data access that hits L1 cache ++event:0x4E counters:1,2,3,4 um:zero minimum:500 name:L2_NEON : L2 access as a result of NEON memory access ++event:0x4F counters:1,2,3,4 um:zero minimum:500 name:L2_NEON_HIT : Any NEON hit in L2 cache ++event:0x50 counters:1,2,3,4 um:zero minimum:500 name:L1_INST : Any L1 instruction cache access, excluding CP15 cache accesses ++event:0x51 counters:1,2,3,4 um:zero minimum:500 name:PC_RETURN_MIS_PRED : Return stack misprediction at return stack pop (incorrect target address) ++event:0x52 counters:1,2,3,4 um:zero minimum:500 name:PC_BRANCH_FAILED : Branch prediction misprediction ++event:0x53 counters:1,2,3,4 um:zero minimum:500 name:PC_BRANCH_TAKEN : Any predicted branch that is taken ++event:0x54 counters:1,2,3,4 um:zero minimum:500 name:PC_BRANCH_EXECUTED : Any taken branch that is executed ++event:0x55 counters:1,2,3,4 um:zero minimum:500 name:OP_EXECUTED : Number of operations executed (in instruction or mutli-cycle instruction) ++event:0x56 counters:1,2,3,4 um:zero minimum:500 name:CYCLES_INST_STALL : Cycles where no instruction available ++event:0x57 counters:1,2,3,4 um:zero minimum:500 name:CYCLES_INST : Number of instructions issued in a cycle ++event:0x58 counters:1,2,3,4 um:zero minimum:500 name:CYCLES_NEON_DATA_STALL : Number of cycles the processor waits on MRC data from NEON ++event:0x59 counters:1,2,3,4 um:zero minimum:500 name:CYCLES_NEON_INST_STALL : Number of cycles the processor waits on NEON instruction queue or NEON load queue ++event:0x5A counters:1,2,3,4 um:zero minimum:500 name:NEON_CYCLES : Number of cycles NEON and integer processors are not idle ++event:0x70 counters:1,2,3,4 um:zero minimum:500 name:PMU0_EVENTS : Number of events from external input source PMUEXTIN[0] ++event:0x71 counters:1,2,3,4 um:zero minimum:500 name:PMU1_EVENTS : Number of events from external input source PMUEXTIN[1] ++event:0x72 counters:1,2,3,4 um:zero minimum:500 name:PMU_EVENTS : Number of events from both external input sources PMUEXTIN[0] and PMUEXTIN[1] ++event:0xFF counters:0 um:zero minimum:500 name:CPU_CYCLES : Number of CPU cycles ++ +diff -urN oprofile-0.9.3/events/arm/armv7/unit_masks oprofile-0.9.3.armv7/events/arm/armv7/unit_masks +--- oprofile-0.9.3/events/arm/armv7/unit_masks 1970-01-01 01:00:00.000000000 +0100 ++++ oprofile-0.9.3.armv7/events/arm/armv7/unit_masks 2008-04-01 10:52:00.000000000 +0200 +@@ -0,0 +1,4 @@ ++# ARM V7 PMNC possible unit masks ++# ++name:zero type:mandatory default:0x00 ++ 0x00 No unit mask +diff -urN oprofile-0.9.3/events/Makefile.in oprofile-0.9.3.armv7/events/Makefile.in +--- oprofile-0.9.3/events/Makefile.in 2007-07-16 20:23:28.000000000 +0200 ++++ oprofile-0.9.3.armv7/events/Makefile.in 2008-04-24 15:11:52.000000000 +0200 +@@ -211,6 +211,7 @@ + arm/xscale1/events arm/xscale1/unit_masks \ + arm/xscale2/events arm/xscale2/unit_masks \ + arm/armv6/events arm/armv6/unit_masks \ ++ arm/armv7/events arm/armv7/unit_masks \ + arm/mpcore/events arm/mpcore/unit_masks \ + mips/20K/events mips/20K/unit_masks \ + mips/24K/events mips/24K/unit_masks \ +@@ -270,7 +271,7 @@ + + + distdir: $(DISTFILES) +- $(mkdir_p) $(distdir)/alpha/ev4 $(distdir)/alpha/ev5 $(distdir)/alpha/ev6 $(distdir)/alpha/ev67 $(distdir)/alpha/pca56 $(distdir)/arm/armv6 $(distdir)/arm/mpcore $(distdir)/arm/xscale1 $(distdir)/arm/xscale2 $(distdir)/i386/athlon $(distdir)/i386/core $(distdir)/i386/core_2 $(distdir)/i386/p4 $(distdir)/i386/p4-ht $(distdir)/i386/p6_mobile $(distdir)/i386/pii $(distdir)/i386/piii $(distdir)/i386/ppro $(distdir)/ia64/ia64 $(distdir)/ia64/itanium $(distdir)/ia64/itanium2 $(distdir)/mips/20K $(distdir)/mips/24K $(distdir)/mips/25K $(distdir)/mips/34K $(distdir)/mips/5K $(distdir)/mips/r10000 $(distdir)/mips/r12000 $(distdir)/mips/rm7000 $(distdir)/mips/rm9000 $(distdir)/mips/sb1 $(distdir)/mips/vr5432 $(distdir)/mips/vr5500 $(distdir)/ppc/7450 $(distdir)/ppc/e500 $(distdir)/ppc/e500v2 $(distdir)/ppc64/970 $(distdir)/ppc64/970MP $(distdir)/ppc64/cell-be $(distdir)/ppc64/pa6t $(distdir)/ppc64/power4 $(distdir)/ppc64/power5 $(distdir)/ppc64/power5+ $(distdir)/ppc64/power5++ $(distdir)/ppc64/power6 $(distdir)/rtc $(distdir)/x86-64/family10 $(distdir)/x86-64/hammer ++ $(mkdir_p) $(distdir)/alpha/ev4 $(distdir)/alpha/ev5 $(distdir)/alpha/ev6 $(distdir)/alpha/ev67 $(distdir)/alpha/pca56 $(distdir)/arm/armv6 $(distdir)/arm/armv7 $(distdir)/arm/mpcore $(distdir)/arm/xscale1 $(distdir)/arm/xscale2 $(distdir)/i386/athlon $(distdir)/i386/core $(distdir)/i386/core_2 $(distdir)/i386/p4 $(distdir)/i386/p4-ht $(distdir)/i386/p6_mobile $(distdir)/i386/pii $(distdir)/i386/piii $(distdir)/i386/ppro $(distdir)/ia64/ia64 $(distdir)/ia64/itanium $(distdir)/ia64/itanium2 $(distdir)/mips/20K $(distdir)/mips/24K $(distdir)/mips/25K $(distdir)/mips/34K $(distdir)/mips/5K $(distdir)/mips/r10000 $(distdir)/mips/r12000 $(distdir)/mips/rm7000 $(distdir)/mips/rm9000 $(distdir)/mips/sb1 $(distdir)/mips/vr5432 $(distdir)/mips/vr5500 $(distdir)/ppc/7450 $(distdir)/ppc/e500 $(distdir)/ppc/e500v2 $(distdir)/ppc64/970 $(distdir)/ppc64/970MP $(distdir)/ppc64/cell-be $(distdir)/ppc64/pa6t $(distdir)/ppc64/power4 $(distdir)/ppc64/power5 $(distdir)/ppc64/power5+ $(distdir)/ppc64/power5++ $(distdir)/ppc64/power6 $(distdir)/rtc $(distdir)/x86-64/family10 $(distdir)/x86-64/hammer + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ +diff -urN oprofile-0.9.3/libop/op_cpu_type.c oprofile-0.9.3.armv7/libop/op_cpu_type.c +--- oprofile-0.9.3/libop/op_cpu_type.c 2007-07-16 20:22:17.000000000 +0200 ++++ oprofile-0.9.3.armv7/libop/op_cpu_type.c 2008-04-23 18:31:56.000000000 +0200 +@@ -71,6 +71,7 @@ + { "ppc64 PA6T", "ppc64/pa6t", CPU_PPC64_PA6T, 6 }, + { "ARM MPCore", "arm/mpcore", CPU_ARM_MPCORE, 2 }, + { "ARM V6 PMU", "arm/armv6", CPU_ARM_V6, 3 }, ++ { "ARM V7 PMNC", "arm/armv7", CPU_ARM_V7, 5 }, + { "ppc64 POWER5++", "ppc64/power5++", CPU_PPC64_POWER5pp, 6 }, + }; + +diff -urN oprofile-0.9.3/libop/op_cpu_type.h oprofile-0.9.3.armv7/libop/op_cpu_type.h +--- oprofile-0.9.3/libop/op_cpu_type.h 2007-07-16 20:22:17.000000000 +0200 ++++ oprofile-0.9.3.armv7/libop/op_cpu_type.h 2008-04-23 18:34:37.000000000 +0200 +@@ -69,6 +69,7 @@ + CPU_PPC64_PA6T, /**< ppc64 PA6T */ + CPU_ARM_MPCORE, /**< ARM MPCore */ + CPU_ARM_V6, /**< ARM V6 */ ++ CPU_ARM_V7, /**< ARM V7 */ + CPU_PPC64_POWER5pp, /**< ppc64 Power5++ family */ + MAX_CPU_TYPE + } op_cpu; +diff -urN oprofile-0.9.3/libop/op_events.c oprofile-0.9.3.armv7/libop/op_events.c +--- oprofile-0.9.3/libop/op_events.c 2007-07-16 20:22:17.000000000 +0200 ++++ oprofile-0.9.3.armv7/libop/op_events.c 2008-04-23 18:39:30.000000000 +0200 +@@ -788,6 +788,7 @@ + case CPU_ARM_XSCALE2: + case CPU_ARM_MPCORE: + case CPU_ARM_V6: ++ case CPU_ARM_V7: + descr->name = "CPU_CYCLES"; + break; + +diff -urN oprofile-0.9.3/utils/ophelp.c oprofile-0.9.3.armv7/utils/ophelp.c +--- oprofile-0.9.3/utils/ophelp.c 2007-07-16 20:22:17.000000000 +0200 ++++ oprofile-0.9.3.armv7/utils/ophelp.c 2008-04-23 19:17:51.000000000 +0200 +@@ -433,6 +433,11 @@ + printf("See ARM11 Technical Reference Manual\n"); + break; + ++ case CPU_ARM_V7: ++ printf("See ARM11 Technical Reference Manual\n" ++ "Cortex A8 DDI (ARM DDI 0344B, revision r1p1)\n"); ++ break; ++ + case CPU_PPC64_PA6T: + printf("See PA6T Power Implementation Features Book IV\n" + "Chapter 7 Performance Counters\n"); diff --git a/packages/oprofile/oprofile_0.9.3.bb b/packages/oprofile/oprofile_0.9.3.bb index a302068c27..4d6af997af 100644 --- a/packages/oprofile/oprofile_0.9.3.bb +++ b/packages/oprofile/oprofile_0.9.3.bb @@ -5,7 +5,7 @@ LICENSE = "GPL" DEPENDS = "popt binutils" RDEPENDS = "binutils-symlinks" RRECOMMENDS = "kernel-vmlinux" -PR = "r6" +PR = "r7" SRC_URI = "${SOURCEFORGE_MIRROR}/oprofile/oprofile-${PV}.tar.gz \ file://armv6_fix.patch;patch=1 \ @@ -14,6 +14,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/oprofile/oprofile-${PV}.tar.gz \ file://opstart.patch;patch=1 \ file://fix-arith.patch;patch=1;pnum=0 \ file://gcc43x-fix.patch;patch=1 \ + file://armv7a.diff;patch=1 \ file://acinclude.m4" S = "${WORKDIR}/oprofile-${PV}" -- cgit v1.2.3 From 50778c621a5973ed79d8a3fe3ee824a135348aba Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 4 Jul 2008 11:27:56 +0000 Subject: beagleboard demo image: add oprofile --- packages/images/beagleboard-demo-image.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/images/beagleboard-demo-image.bb b/packages/images/beagleboard-demo-image.bb index 03371c730e..fa211a0a97 100644 --- a/packages/images/beagleboard-demo-image.bb +++ b/packages/images/beagleboard-demo-image.bb @@ -24,7 +24,7 @@ IMAGE_INSTALL = "\ abiword \ # gnumeric \ # gimp \ - powertop \ + powertop oprofile \ pidgin \ # irssi \ " -- cgit v1.2.3 From b119ac565efaae12997830b12ba6c9ae0c68312d Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Fri, 4 Jul 2008 13:22:49 +0000 Subject: boost : Add boost.inc file. --- packages/boost/boost.inc | 157 ++++++++++++++++++++++++++++++++++++++++ packages/boost/boost_1.33.0.bb | 156 +--------------------------------------- packages/boost/boost_1.33.1.bb | 158 +---------------------------------------- 3 files changed, 161 insertions(+), 310 deletions(-) create mode 100644 packages/boost/boost.inc diff --git a/packages/boost/boost.inc b/packages/boost/boost.inc new file mode 100644 index 0000000000..4458f367a1 --- /dev/null +++ b/packages/boost/boost.inc @@ -0,0 +1,157 @@ +# The Boost web site provides free peer-reviewed portable +# C++ source libraries. The emphasis is on libraries which +# work well with the C++ Standard Library. The libraries are +# intended to be widely useful, and are in regular use by +# thousands of programmers across a broad spectrum of applications. +DESCRIPTION = "Free peer-reviewed portable C++ source libraries" +HOMEPAGE = "http://www.boost.org/" +SECTION = "libs" +DEPENDS = "boost-jam-native zlib" +PRIORITY = "optional" +LICENSE = "Boost Software License" +PR = "r1" + +BOOST_VER = "${@"_".join(bb.data.getVar("PV",d,1).split("."))}" +BOOST_MAJ = "${@"_".join(bb.data.getVar("PV",d,1).split(".")[0:2])}" +BOOST_P = "boost_${BOOST_VER}" + +S = "${WORKDIR}/${BOOST_P}" + +# Make a package for each library, plus -dev and -python +PACKAGES = "${PN}-dbg" +BOOSTLIBS = "" + +PACKAGES += "boost-date-time" +FILES_boost-date-time = "${libdir}/libboost_date_time.so.${PV}" + +BOOSTLIBS += "boost-filesystem" +FILES_boost-filesystem = "${libdir}/libboost_filesystem.so.${PV}" + +BOOSTLIBS += "boost-prg-exec-monitor" +FILES_boost-prg-exec-monitor = "${libdir}/libboost_prg_exec_monitor.so.${PV}" + +BOOSTLIBS += "boost-program-options" +FILES_boost-program-options = "${libdir}/libboost_program_options.so.${PV}" + +BOOSTLIBS += "boost-regex" +FILES_boost-regex = "${libdir}/libboost_regex.so.${PV}" + +BOOSTLIBS += "boost-signals" +FILES_boost-signals = "${libdir}/libboost_signals.so.${PV}" + +BOOSTLIBS += "boost-test-exec-monitor" +FILES_boost-test-exec-monitor = "${libdir}/libboost_test_exec_monitor.so.${PV}" + +BOOSTLIBS += "boost-thread-mt" +FILES_boost-thread-mt = "${libdir}/libboost_thread-mt.so.${PV}" + +BOOSTLIBS += "boost-unit-test-framework" +FILES_boost-unit-test-framework = "${libdir}/libboost_unit_test_framework.so.${PV}" + +BOOSTLIBS += "boost-iostreams" +FILES_boost-iostreams = "${libdir}/libboost_iostreams.so.${PV}" + +BOOSTLIBS += "boost-serialization" +FILES_boost-serialization = "${libdir}/libboost_serialization.so.${PV}" + +BOOSTLIBS += "boost-wserialization" +FILES_boost-wserialization = "${libdir}/libboost_wserialization.so.${PV}" + +# Python - remove this and set: +#PYTHON_ROOT = "/dev/null" +# to remove the python build +DEPENDS += "python" +PYTHON_ROOT = "${STAGING_DIR_HOST}" +PYTHON_VERSION = "2.4" + +BOOSTLIBS += "boost-python" +FILES_boost-python = "${libdir}/libboost_python.so.${PV}" + +PACKAGES += "${BOOSTLIBS}" + +# -dev last to pick up the remaining stuff +PACKAGES += "${PN}-dev" +FILES_${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/libboost_*.a" + +# "boost" is a metapackage which pulls in all boost librabries +PACKAGES += "${PN}" +RRECOMMENDS_${PN} += "${BOOSTLIBS}" + +# Oh yippee, a new build system, it's sooo cooool I could eat my own +# foot. inlining=on lets the compiler choose, I think. At least this +# stuff is documented... +# NOTE: if you leave on then in a debug build the build sys +# objcopy will be invoked, and that won't work. Building debug apparently +# requires hacking gcc-tools.jam +# +# Sometimes I wake up screaming. Famous figures are gathered in the nightmare, +# Steve Bourne, Larry Wall, the whole of the ANSI C committee. They're just +# standing there, waiting, but the truely terrifying thing is what they carry +# in their hands. At first sight each seems to bear the same thing, but it is +# not so for the forms in their grasp are ever so slightly different one from +# the other. Each is twisted in some grotesque way from the other to make each +# an unspeakable perversion impossible to perceive without the onset of madness. +# True insanity awaits anyone who perceives all of these horrors together. +# +# Quotation marks, there might be an easier way to do this, but I can't find +# it. The problem is that the user.hpp configuration file must receive a +# pre-processor macro defined as the appropriate string - complete with "'s +# around it. (<> is a possibility here but the danger to that is that the +# failure case interprets the < and > as shell redirections, creating +# random files in the source tree.) +# +#bjam: '-DBOOST_PLATFORM_CONFIG=\"config\"' +#do_compile: '-sGCC=... '"'-DBOOST_PLATFORM_CONFIG=\"config\"'" +SQD = '"' +EQD = '\"' +#boost.bb: "... '-sGCC=... '${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}config${EQD}'${SQD} ..." +BJAM_CONF = "${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}boost/config/platform/${TARGET_OS}.hpp${EQD}'${SQD}" + +# bzip2 and zip are disabled because... they're broken - the compilation simply +# isn't working with bjam. I guess they will fix it, but who needs it? This +# only affects the (new in 33) iostream library. +BJAM_TOOLS = "-sTOOLS=gcc \ + '-sGCC=${CC} '${BJAM_CONF} \ + '-sGXX=${CXX} '${BJAM_CONF} \ + '-sGCC_INCLUDE_DIRECTORY=${STAGING_INCDIR}' \ + '-sGCC_STDLIB_DIRECTORY=${STAGING_LIBDIR}' \ + '-sNO_BZIP2=1' \ + '-sNO_ZLIB=1' \ + '-sBUILD=release space on off' \ + '-sPYTHON_VERSION=${PYTHON_VERSION}' \ + '--layout=system' \ + " + +BJAM_OPTS = '${BJAM_TOOLS} \ + --builddir=${S}/${TARGET_SYS} \ + --with-python-root=${PYTHON_ROOT} \ + ${BJAM_EXTRA}' + + +do_configure_prepend() { + cp -f boost/config/platform/linux.hpp boost/config/platform/linux-gnueabi.hpp +} + +do_compile() { + set -ex + bjam ${BJAM_OPTS} --prefix=${prefix} \ + --exec-prefix=${exec_prefix} \ + --libdir=${libdir} \ + --includedir=${includedir} +} + +do_stage() { + set -ex + bjam ${BJAM_OPTS} \ + --libdir=${STAGING_LIBDIR} \ + --includedir=${STAGING_INCDIR} \ + install +} + +do_install() { + set -ex + bjam ${BJAM_OPTS} \ + --libdir=${D}${libdir} \ + --includedir=${D}${includedir} \ + install +} diff --git a/packages/boost/boost_1.33.0.bb b/packages/boost/boost_1.33.0.bb index 441c0754b3..f910924cf1 100644 --- a/packages/boost/boost_1.33.0.bb +++ b/packages/boost/boost_1.33.0.bb @@ -1,160 +1,6 @@ -# The Boost web site provides free peer-reviewed portable -# C++ source libraries. The emphasis is on libraries which -# work well with the C++ Standard Library. The libraries are -# intended to be widely useful, and are in regular use by -# thousands of programmers across a broad spectrum of applications. -DESCRIPTION = "Free peer-reviewed portable C++ source libraries" -HOMEPAGE = "http://www.boost.org/" -SECTION = "libs" -DEPENDS = "boost-jam-native zlib" -PRIORITY = "optional" -LICENSE = "Boost Software License" -PR = "r1" +include boost.inc -BOOST_VER = "${@"_".join(bb.data.getVar("PV",d,1).split("."))}" -BOOST_MAJ = "${@"_".join(bb.data.getVar("PV",d,1).split(".")[0:2])}" -BOOST_P = "boost_${BOOST_VER}" SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2" #SRC_URI += "file://unit_test_log10f.patch;patch=1" SRC_URI += "file://linux-uclibc.patch;patch=1" -S = "${WORKDIR}/${BOOST_P}" - -# Make a package for each library, plus -dev and -python -PACKAGES = "${PN}-dbg" -BOOSTLIBS = "" - -PACKAGES += "boost-date-time" -FILES_boost-date-time = "${libdir}/libboost_date_time.so.${PV}" - -BOOSTLIBS += "boost-filesystem" -FILES_boost-filesystem = "${libdir}/libboost_filesystem.so.${PV}" - -BOOSTLIBS += "boost-prg-exec-monitor" -FILES_boost-prg-exec-monitor = "${libdir}/libboost_prg_exec_monitor.so.${PV}" - -BOOSTLIBS += "boost-program-options" -FILES_boost-program-options = "${libdir}/libboost_program_options.so.${PV}" - -BOOSTLIBS += "boost-regex" -FILES_boost-regex = "${libdir}/libboost_regex.so.${PV}" - -BOOSTLIBS += "boost-signals" -FILES_boost-signals = "${libdir}/libboost_signals.so.${PV}" - -BOOSTLIBS += "boost-test-exec-monitor" -FILES_boost-test-exec-monitor = "${libdir}/libboost_test_exec_monitor.so.${PV}" - -BOOSTLIBS += "boost-thread-mt" -FILES_boost-thread-mt = "${libdir}/libboost_thread-mt.so.${PV}" - -BOOSTLIBS += "boost-unit-test-framework" -FILES_boost-unit-test-framework = "${libdir}/libboost_unit_test_framework.so.${PV}" - -BOOSTLIBS += "boost-iostreams" -FILES_boost-iostreams = "${libdir}/libboost_iostreams.so.${PV}" - -BOOSTLIBS += "boost-serialization" -FILES_boost-serialization = "${libdir}/libboost_serialization.so.${PV}" - -BOOSTLIBS += "boost-wserialization" -FILES_boost-wserialization = "${libdir}/libboost_wserialization.so.${PV}" - -# Python - remove this and set: -#PYTHON_ROOT = "/dev/null" -# to remove the python build -DEPENDS += "python" -PYTHON_ROOT = "${STAGING_DIR_HOST}" -PYTHON_VERSION = "2.4" - -BOOSTLIBS += "boost-python" -FILES_boost-python = "${libdir}/libboost_python.so.${PV}" - -PACKAGES += "${BOOSTLIBS}" - -# -dev last to pick up the remaining stuff -PACKAGES += "${PN}-dev" -FILES_${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/libboost_*.a" - -# "boost" is a metapackage which pulls in all boost librabries -PACKAGES += "${PN}" -RRECOMMENDS_${PN} += "${BOOSTLIBS}" - -# Oh yippee, a new build system, it's sooo cooool I could eat my own -# foot. inlining=on lets the compiler choose, I think. At least this -# stuff is documented... -# NOTE: if you leave on then in a debug build the build sys -# objcopy will be invoked, and that won't work. Building debug apparently -# requires hacking gcc-tools.jam -# -# Sometimes I wake up screaming. Famous figures are gathered in the nightmare, -# Steve Bourne, Larry Wall, the whole of the ANSI C committee. They're just -# standing there, waiting, but the truely terrifying thing is what they carry -# in their hands. At first sight each seems to bear the same thing, but it is -# not so for the forms in their grasp are ever so slightly different one from -# the other. Each is twisted in some grotesque way from the other to make each -# an unspeakable perversion impossible to perceive without the onset of madness. -# True insanity awaits anyone who perceives all of these horrors together. -# -# Quotation marks, there might be an easier way to do this, but I can't find -# it. The problem is that the user.hpp configuration file must receive a -# pre-processor macro defined as the appropriate string - complete with "'s -# around it. (<> is a possibility here but the danger to that is that the -# failure case interprets the < and > as shell redirections, creating -# random files in the source tree.) -# -#bjam: '-DBOOST_PLATFORM_CONFIG=\"config\"' -#do_compile: '-sGCC=... '"'-DBOOST_PLATFORM_CONFIG=\"config\"'" -SQD = '"' -EQD = '\"' -#boost.bb: "... '-sGCC=... '${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}config${EQD}'${SQD} ..." -BJAM_CONF = "${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}boost/config/platform/${TARGET_OS}.hpp${EQD}'${SQD}" - -# bzip2 and zip are disabled because... they're broken - the compilation simply -# isn't working with bjam. I guess they will fix it, but who needs it? This -# only affects the (new in 33) iostream library. -BJAM_TOOLS = "-sTOOLS=gcc \ - '-sGCC=${CC} '${BJAM_CONF} \ - '-sGXX=${CXX} '${BJAM_CONF} \ - '-sGCC_INCLUDE_DIRECTORY=${STAGING_INCDIR}' \ - '-sGCC_STDLIB_DIRECTORY=${STAGING_LIBDIR}' \ - '-sNO_BZIP2=1' \ - '-sNO_ZLIB=1' \ - '-sBUILD=release space on off' \ - '-sPYTHON_VERSION=${PYTHON_VERSION}' \ - '--layout=system' \ - " - -BJAM_OPTS = '${BJAM_TOOLS} \ - --builddir=${S}/${TARGET_SYS} \ - --with-python-root=${PYTHON_ROOT} \ - ${BJAM_EXTRA}' - - -do_configure_prepend() { - cp -f boost/config/platform/linux.hpp boost/config/platform/linux-gnueabi.hpp -} - -do_compile() { - set -ex - bjam ${BJAM_OPTS} --prefix=${prefix} \ - --exec-prefix=${exec_prefix} \ - --libdir=${libdir} \ - --includedir=${includedir} -} - -do_stage() { - set -ex - bjam ${BJAM_OPTS} \ - --libdir=${STAGING_LIBDIR} \ - --includedir=${STAGING_INCDIR} \ - install -} - -do_install() { - set -ex - bjam ${BJAM_OPTS} \ - --libdir=${D}${libdir} \ - --includedir=${D}${includedir} \ - install -} diff --git a/packages/boost/boost_1.33.1.bb b/packages/boost/boost_1.33.1.bb index 6632f6c8ea..3a804d0075 100644 --- a/packages/boost/boost_1.33.1.bb +++ b/packages/boost/boost_1.33.1.bb @@ -1,161 +1,9 @@ -# The Boost web site provides free peer-reviewed portable -# C++ source libraries. The emphasis is on libraries which -# work well with the C++ Standard Library. The libraries are -# intended to be widely useful, and are in regular use by -# thousands of programmers across a broad spectrum of applications. -DESCRIPTION = "Free peer-reviewed portable C++ source libraries" -HOMEPAGE = "http://www.boost.org/" -SECTION = "libs" -DEPENDS = "boost-jam-native zlib" -PRIORITY = "optional" -LICENSE = "Boost Software License" -PR = "r1" +include boost.inc + +DEFAULT_PREFERENCE = "-1" -BOOST_VER = "${@"_".join(bb.data.getVar("PV",d,1).split("."))}" -BOOST_MAJ = "${@"_".join(bb.data.getVar("PV",d,1).split(".")[0:2])}" -BOOST_P = "boost_${BOOST_VER}" SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2" #SRC_URI += "file://unit_test_log10f.patch;patch=1" SRC_URI += "file://linux-uclibc.patch;patch=1" SRC_URI += "file://atomic_count_gcc_atomicity.patch;patch=1" -S = "${WORKDIR}/${BOOST_P}" - -# Make a package for each library, plus -dev and -python -PACKAGES = "${PN}-dbg" -BOOSTLIBS = "" - -PACKAGES += "boost-date-time" -FILES_boost-date-time = "${libdir}/libboost_date_time.so.${PV}" - -BOOSTLIBS += "boost-filesystem" -FILES_boost-filesystem = "${libdir}/libboost_filesystem.so.${PV}" - -BOOSTLIBS += "boost-prg-exec-monitor" -FILES_boost-prg-exec-monitor = "${libdir}/libboost_prg_exec_monitor.so.${PV}" - -BOOSTLIBS += "boost-program-options" -FILES_boost-program-options = "${libdir}/libboost_program_options.so.${PV}" - -BOOSTLIBS += "boost-regex" -FILES_boost-regex = "${libdir}/libboost_regex.so.${PV}" - -BOOSTLIBS += "boost-signals" -FILES_boost-signals = "${libdir}/libboost_signals.so.${PV}" - -BOOSTLIBS += "boost-test-exec-monitor" -FILES_boost-test-exec-monitor = "${libdir}/libboost_test_exec_monitor.so.${PV}" - -BOOSTLIBS += "boost-thread-mt" -FILES_boost-thread-mt = "${libdir}/libboost_thread-mt.so.${PV}" - -BOOSTLIBS += "boost-unit-test-framework" -FILES_boost-unit-test-framework = "${libdir}/libboost_unit_test_framework.so.${PV}" - -BOOSTLIBS += "boost-iostreams" -FILES_boost-iostreams = "${libdir}/libboost_iostreams.so.${PV}" - -BOOSTLIBS += "boost-serialization" -FILES_boost-serialization = "${libdir}/libboost_serialization.so.${PV}" - -BOOSTLIBS += "boost-wserialization" -FILES_boost-wserialization = "${libdir}/libboost_wserialization.so.${PV}" - -# Python - remove this and set: -#PYTHON_ROOT = "/dev/null" -# to remove the python build -DEPENDS += "python" -PYTHON_ROOT = "${STAGING_DIR_HOST}" -PYTHON_VERSION = "2.4" - -BOOSTLIBS += "boost-python" -FILES_boost-python = "${libdir}/libboost_python.so.${PV}" - -PACKAGES += "${BOOSTLIBS}" - -# -dev last to pick up the remaining stuff -PACKAGES += "${PN}-dev" -FILES_${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/libboost_*.a" - -# "boost" is a metapackage which pulls in all boost librabries -PACKAGES += "${PN}" -RRECOMMENDS_${PN} += "${BOOSTLIBS}" - -# Oh yippee, a new build system, it's sooo cooool I could eat my own -# foot. inlining=on lets the compiler choose, I think. At least this -# stuff is documented... -# NOTE: if you leave on then in a debug build the build sys -# objcopy will be invoked, and that won't work. Building debug apparently -# requires hacking gcc-tools.jam -# -# Sometimes I wake up screaming. Famous figures are gathered in the nightmare, -# Steve Bourne, Larry Wall, the whole of the ANSI C committee. They're just -# standing there, waiting, but the truely terrifying thing is what they carry -# in their hands. At first sight each seems to bear the same thing, but it is -# not so for the forms in their grasp are ever so slightly different one from -# the other. Each is twisted in some grotesque way from the other to make each -# an unspeakable perversion impossible to perceive without the onset of madness. -# True insanity awaits anyone who perceives all of these horrors together. -# -# Quotation marks, there might be an easier way to do this, but I can't find -# it. The problem is that the user.hpp configuration file must receive a -# pre-processor macro defined as the appropriate string - complete with "'s -# around it. (<> is a possibility here but the danger to that is that the -# failure case interprets the < and > as shell redirections, creating -# random files in the source tree.) -# -#bjam: '-DBOOST_PLATFORM_CONFIG=\"config\"' -#do_compile: '-sGCC=... '"'-DBOOST_PLATFORM_CONFIG=\"config\"'" -SQD = '"' -EQD = '\"' -#boost.bb: "... '-sGCC=... '${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}config${EQD}'${SQD} ..." -BJAM_CONF = "${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}boost/config/platform/${TARGET_OS}.hpp${EQD}'${SQD}" - -# bzip2 and zip are disabled because... they're broken - the compilation simply -# isn't working with bjam. I guess they will fix it, but who needs it? This -# only affects the (new in 33) iostream library. -BJAM_TOOLS = "-sTOOLS=gcc \ - '-sGCC=${CC} '${BJAM_CONF} \ - '-sGXX=${CXX} '${BJAM_CONF} \ - '-sGCC_INCLUDE_DIRECTORY=${STAGING_INCDIR}' \ - '-sGCC_STDLIB_DIRECTORY=${STAGING_LIBDIR}' \ - '-sNO_BZIP2=1' \ - '-sNO_ZLIB=1' \ - '-sBUILD=release space on off' \ - '-sPYTHON_VERSION=${PYTHON_VERSION}' \ - '--layout=system' \ - " - -BJAM_OPTS = '${BJAM_TOOLS} \ - --builddir=${S}/${TARGET_SYS} \ - --with-python-root=${PYTHON_ROOT} \ - ${BJAM_EXTRA}' - - -do_configure_prepend() { - cp -f boost/config/platform/linux.hpp boost/config/platform/linux-gnueabi.hpp -} - -do_compile() { - set -ex - bjam ${BJAM_OPTS} --prefix=${prefix} \ - --exec-prefix=${exec_prefix} \ - --libdir=${libdir} \ - --includedir=${includedir} -} - -do_stage() { - set -ex - bjam ${BJAM_OPTS} \ - --libdir=${STAGING_LIBDIR} \ - --includedir=${STAGING_INCDIR} \ - install -} - -do_install() { - set -ex - bjam ${BJAM_OPTS} \ - --libdir=${D}${libdir} \ - --includedir=${D}${includedir} \ - install -} -- cgit v1.2.3 From fc4339ab6190700841cccb856df2288a885893ad Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 4 Jul 2008 13:36:46 +0000 Subject: dasher: update SRC_URI from cvs to svn. * The revision should roughly be the same as before * this changeset gets us past do_fetch but do_compile fails --- conf/distro/include/sane-srcrevs.inc | 1 + packages/dasher/dasher-gpe_0.0-svn.bb | 31 ++++++++++++++++++++++++++++ packages/dasher/dasher-gpe_0.0cvs20040828.bb | 31 ---------------------------- 3 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 packages/dasher/dasher-gpe_0.0-svn.bb delete mode 100644 packages/dasher/dasher-gpe_0.0cvs20040828.bb diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 1ae05e87db..daaddfe961 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -18,6 +18,7 @@ SRCREV_pn-bfin-uclibc ?= "1857" SRCREV_pn-uclibc ?= "21996" SRCREV_pn-uclibc-initial ?= "21996" SRCREV_pn-contact ?= "1410" +SRCREV_pn-dasher ?= "1251" SRCREV_pn-dbus-c++-native ?= "13131" SRCREV_pn-dbus-c++ ?= "13131" SRCREV_pn-dfu-util ?= "4160" diff --git a/packages/dasher/dasher-gpe_0.0-svn.bb b/packages/dasher/dasher-gpe_0.0-svn.bb new file mode 100644 index 0000000000..297aa9ac4f --- /dev/null +++ b/packages/dasher/dasher-gpe_0.0-svn.bb @@ -0,0 +1,31 @@ +LICENSE="GPL" +PV = "0.0+svnr${SRCREV}" +PR = "r1" +DEPENDS = "libxsettings-client libglade libxtst gconf gtk+" +SECTION = "gpe" +SRC_URI = "svn://svn.gnome.org/svn/dasher;module=trunk \ + file://configure-lossage.patch;patch=1" + +S = "${WORKDIR}/trunk" +FILES_${PN} += "${datadir}/dasher" + +inherit autotools + + +EXTRA_OECONF = "--with-gpe --without-gnome --without-speech --without-a11y" +LDFLAGS_append = '-Wl,--export-dynamic' + +do_configure_prepend() { + rm -f m4/libtool.m4 + intltoolize --force +} + +do_install_append () { + install -d ${D}${datadir}/pixmaps/ + mv ${D}${datadir}/icons/dasher.png ${D}${datadir}/pixmaps/ +} + +python populate_packages_prepend () { + do_split_packages(d, bb.data.expand("${datadir}/dasher", d), "training_(.*).txt", "dasher-training-data-%s", "Dasher training data for %s", prepend=True) +} + diff --git a/packages/dasher/dasher-gpe_0.0cvs20040828.bb b/packages/dasher/dasher-gpe_0.0cvs20040828.bb deleted file mode 100644 index 7e515feae7..0000000000 --- a/packages/dasher/dasher-gpe_0.0cvs20040828.bb +++ /dev/null @@ -1,31 +0,0 @@ - -LICENSE="GPL" -PR = "r1" -DEPENDS = "libxsettings-client libglade libxtst gconf gtk+" -SECTION = "gpe" -SRC_URI = "cvs://anonymous@anoncvs.gnome.org/cvs/gnome;module=dasher;date=20040828 \ - file://configure-lossage.patch;patch=1" - -S = "${WORKDIR}/dasher" -FILES_${PN} += "${datadir}/dasher" - -inherit autotools - - -EXTRA_OECONF = "--with-gpe --without-gnome --without-speech --without-a11y" -LDFLAGS_append = '-Wl,--export-dynamic' - -do_configure_prepend() { - rm -f m4/libtool.m4 - intltoolize --force -} - -do_install_append () { - install -d ${D}${datadir}/pixmaps/ - mv ${D}${datadir}/icons/dasher.png ${D}${datadir}/pixmaps/ -} - -python populate_packages_prepend () { - do_split_packages(d, bb.data.expand("${datadir}/dasher", d), "training_(.*).txt", "dasher-training-data-%s", "Dasher training data for %s", prepend=True) -} - -- cgit v1.2.3 From d63780b41e9b5241693e6815f5b71333e749f382 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Fri, 4 Jul 2008 13:47:54 +0000 Subject: boost : Remove DEFAULT_PREFERENCE from earlier commit. --- packages/boost/boost_1.33.1.bb | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/boost/boost_1.33.1.bb b/packages/boost/boost_1.33.1.bb index 3a804d0075..5d9d305f9c 100644 --- a/packages/boost/boost_1.33.1.bb +++ b/packages/boost/boost_1.33.1.bb @@ -1,7 +1,5 @@ include boost.inc -DEFAULT_PREFERENCE = "-1" - SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2" #SRC_URI += "file://unit_test_log10f.patch;patch=1" SRC_URI += "file://linux-uclibc.patch;patch=1" -- cgit v1.2.3 From 3088f84a899101415da38aa8744470a76d6d1d29 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 4 Jul 2008 13:51:32 +0000 Subject: sane-srcrevs.inc: dasher-gpe, not just dasher! --- conf/distro/include/sane-srcrevs.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index daaddfe961..aecdd18bd9 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -18,7 +18,7 @@ SRCREV_pn-bfin-uclibc ?= "1857" SRCREV_pn-uclibc ?= "21996" SRCREV_pn-uclibc-initial ?= "21996" SRCREV_pn-contact ?= "1410" -SRCREV_pn-dasher ?= "1251" +SRCREV_pn-dasher-gpe ?= "1251" SRCREV_pn-dbus-c++-native ?= "13131" SRCREV_pn-dbus-c++ ?= "13131" SRCREV_pn-dfu-util ?= "4160" -- cgit v1.2.3 From ecc322e2e0ebb1cd86ffd3e07dbd5493d368816d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 4 Jul 2008 22:18:52 +0000 Subject: libtool native 2.2.4: stage libltdl source tree for packages that want to rebuild libltdl (e.g. pulse and gnash) --- packages/libtool/libtool-native_2.2.4.bb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/libtool/libtool-native_2.2.4.bb b/packages/libtool/libtool-native_2.2.4.bb index 73e8aabe2e..ad98fc56b2 100644 --- a/packages/libtool/libtool-native_2.2.4.bb +++ b/packages/libtool/libtool-native_2.2.4.bb @@ -1,7 +1,7 @@ require libtool.inc require libtool_${PV}.bb -PR = "r19" +PR = "r20" FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}" SRC_URI_append = " file://cross_compile.patch;patch=1 \ file://prefix.patch;patch=1" @@ -27,13 +27,19 @@ do_stage () { install -d ${STAGING_DATADIR}/libtool/config/ ${STAGING_DATADIR}/aclocal/ install -c ${S}/libltdl/config/config.guess ${STAGING_DATADIR}/libtool/ install -c ${S}/libltdl/config/config.sub ${STAGING_DATADIR}/libtool/ - install -c -m 0644 ${S}/libltdl/config/ltmain.sh ${STAGING_DATADIR}/libtool/config/ + for i in config.guess config.sub compile depcomp general.m4sh getopt.m4sh install-sh ltmain.m4sh ltmain.sh mdate-sh missing mkstamp ; do \ + install -c -m 0644 ${S}/libltdl/config/$i ${STAGING_DATADIR}/libtool/config/ + done install -c -m 0644 ${S}/libltdl/m4/libtool.m4 ${STAGING_DATADIR}/aclocal/ install -c -m 0644 ${S}/libltdl/m4/ltdl.m4 ${STAGING_DATADIR}/aclocal/ install -c -m 0644 ${S}/libltdl/m4/ltoptions.m4 ${STAGING_DATADIR}/aclocal/ install -c -m 0644 ${S}/libltdl/m4/ltversion.m4 ${STAGING_DATADIR}/aclocal/ install -c -m 0644 ${S}/libltdl/m4/ltsugar.m4 ${STAGING_DATADIR}/aclocal/ install -c -m 0644 ${S}/libltdl/m4/lt~obsolete.m4 ${STAGING_DATADIR}/aclocal/ + install -c -m 0644 ${S}/libltdl/m4/argz.m4 ${STAGING_DATADIR}/aclocal/ + + install -d ${STAGING_DATADIR}/libtool/libltdl + cp -pPr ${S}/libltdl/* ${STAGING_DATADIR}/libtool/libltdl/ } do_install () { -- cgit v1.2.3 From 77175b518c26835ab2080af4bf94335ea25c4ca5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 4 Jul 2008 22:54:13 +0000 Subject: gnash: fix build to use external libtool --- packages/gnash/gnash.inc | 2 +- packages/gnash/gnash_0.8.3.bb | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/gnash/gnash.inc b/packages/gnash/gnash.inc index 31e84b84ac..ce66beec45 100644 --- a/packages/gnash/gnash.inc +++ b/packages/gnash/gnash.inc @@ -1,7 +1,7 @@ DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features" HOMEPAGE = "http://www.gnu.org/software/gnash" LICENSE = "GPL-2" -DEPENDS = "gtk+ cairo libxml2 libmad libsdl-mixer zlib boost jpeg pango curl freetype" +DEPENDS = "libtool gtk+ cairo libxml2 libmad libsdl-mixer zlib boost jpeg pango curl freetype" PR = "r1" SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gnash/${PV}/gnash-${PV}.tar.bz2 \ diff --git a/packages/gnash/gnash_0.8.3.bb b/packages/gnash/gnash_0.8.3.bb index 383f970755..cc8de96995 100644 --- a/packages/gnash/gnash_0.8.3.bb +++ b/packages/gnash/gnash_0.8.3.bb @@ -1,6 +1,11 @@ require gnash.inc -do_configure() { - gnu-configize - oe_runconf -} +PR = "r2" + +EXTRA_OECONF += " --without-included-ltdl \ + --with-ltdl-include=${STAGING_INCDIR} \ + --with-ltdl-lib=${STAGING_LIBDIR} \ +" + +SRC_URI += "file://libtool-2.2.patch;patch=1" + -- cgit v1.2.3 From d435bd5d099e524e1deeaf6ceef44751e317e437 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 4 Jul 2008 23:11:46 +0000 Subject: libtool-native 2.2.4: fix forced stagings --- packages/libtool/libtool-native_2.2.4.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libtool/libtool-native_2.2.4.bb b/packages/libtool/libtool-native_2.2.4.bb index ad98fc56b2..a4f76c69dc 100644 --- a/packages/libtool/libtool-native_2.2.4.bb +++ b/packages/libtool/libtool-native_2.2.4.bb @@ -39,7 +39,7 @@ do_stage () { install -c -m 0644 ${S}/libltdl/m4/argz.m4 ${STAGING_DATADIR}/aclocal/ install -d ${STAGING_DATADIR}/libtool/libltdl - cp -pPr ${S}/libltdl/* ${STAGING_DATADIR}/libtool/libltdl/ + cp -pfPr ${S}/libltdl/* ${STAGING_DATADIR}/libtool/libltdl/ } do_install () { -- cgit v1.2.3 From dab87d4b89d202c3bfc84e3bd1422cd5ef3a3242 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 08:34:29 +0000 Subject: boot 1.33.1: add fedora and gentoo patches for gcc 4.3 support and an extra patch hunk stolen from 1.34.1 --- packages/boost/boost_1.33.1.bb | 4 +- packages/boost/files/gcc43.patch | 256 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 packages/boost/files/gcc43.patch diff --git a/packages/boost/boost_1.33.1.bb b/packages/boost/boost_1.33.1.bb index 5d9d305f9c..c08721dc9f 100644 --- a/packages/boost/boost_1.33.1.bb +++ b/packages/boost/boost_1.33.1.bb @@ -1,7 +1,9 @@ include boost.inc +PR = "r1" + SRC_URI = "${SOURCEFORGE_MIRROR}/boost/${BOOST_P}.tar.bz2" #SRC_URI += "file://unit_test_log10f.patch;patch=1" SRC_URI += "file://linux-uclibc.patch;patch=1" SRC_URI += "file://atomic_count_gcc_atomicity.patch;patch=1" - +SRC_URI += "file://gcc43.patch;patch=1" diff --git a/packages/boost/files/gcc43.patch b/packages/boost/files/gcc43.patch new file mode 100644 index 0000000000..aefe0800c3 --- /dev/null +++ b/packages/boost/files/gcc43.patch @@ -0,0 +1,256 @@ +diff -aNru boost_1_34_1-ORIGINAL/boost/archive/polymorphic_iarchive.hpp boost_1_34_1/boost/archive/polymorphic_iarchive.hpp +--- boost_1_34_1-ORIGINAL/boost/archive/polymorphic_iarchive.hpp 2005-12-11 00:12:51.000000000 -0600 ++++ boost_1_34_1/boost/archive/polymorphic_iarchive.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -17,6 +17,7 @@ + // See http://www.boost.org for updates, documentation, and revision history. + + #include // std::size_t ++#include + #include + + #if defined(BOOST_NO_STDC_NAMESPACE) +diff -aNru boost_1_34_1-ORIGINAL/boost/archive/polymorphic_oarchive.hpp boost_1_34_1/boost/archive/polymorphic_oarchive.hpp +--- boost_1_34_1-ORIGINAL/boost/archive/polymorphic_oarchive.hpp 2006-02-11 23:43:06.000000000 -0600 ++++ boost_1_34_1/boost/archive/polymorphic_oarchive.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -17,6 +17,7 @@ + // See http://www.boost.org for updates, documentation, and revision history. + + #include // size_t ++#include + #include + + #include +diff -aNru boost_1_34_1-ORIGINAL/boost/date_time/date_facet.hpp boost_1_34_1/boost/date_time/date_facet.hpp +--- boost_1_34_1-ORIGINAL/boost/date_time/date_facet.hpp 2005-09-05 16:10:50.000000000 -0500 ++++ boost_1_34_1/boost/date_time/date_facet.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -429,7 +429,7 @@ + typedef std::basic_string string_type; + typedef CharT char_type; + typedef boost::date_time::period_parser period_parser_type; +- typedef special_values_parser special_values_parser_type; ++ typedef boost::date_time::special_values_parser special_values_parser_type; + typedef std::vector > input_collection_type; + typedef format_date_parser format_date_parser_type; + // date_generators stuff goes here +diff -aNru boost_1_34_1-ORIGINAL/boost/mpl/zip_view.hpp boost_1_34_1/boost/mpl/zip_view.hpp +--- boost_1_34_1-ORIGINAL/boost/mpl/zip_view.hpp 2004-09-02 10:40:42.000000000 -0500 ++++ boost_1_34_1/boost/mpl/zip_view.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -37,7 +37,7 @@ + typedef zip_iterator< + typename transform1< + IteratorSeq +- , next<_1> ++ , boost::mpl::next<_1> + >::type + > next; + }; +@@ -48,8 +48,8 @@ + struct zip_view + { + private: +- typedef typename transform1< Sequences, begin<_1> >::type first_ones_; +- typedef typename transform1< Sequences, end<_1> >::type last_ones_; ++ typedef typename transform1< Sequences, boost::mpl::begin<_1> >::type first_ones_; ++ typedef typename transform1< Sequences, boost::mpl::end<_1> >::type last_ones_; + + public: + typedef nested_begin_end_tag tag; +diff -aNru boost_1_34_1-ORIGINAL/boost/python/detail/def_helper.hpp boost_1_34_1/boost/python/detail/def_helper.hpp +--- boost_1_34_1-ORIGINAL/boost/python/detail/def_helper.hpp 2004-09-15 20:00:28.000000000 -0500 ++++ boost_1_34_1/boost/python/detail/def_helper.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -155,7 +155,7 @@ + , T3 const& + , T4 const& + , default_call_policies +- , keywords<0> ++ , boost::python::detail::keywords<0> + , char const* + , void(not_specified::*)() // A function pointer type which is never an + // appropriate default implementation +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/basic_regex_creator.hpp boost_1_34_1/boost/regex/v4/basic_regex_creator.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/basic_regex_creator.hpp 2006-07-16 11:06:38.000000000 -0500 ++++ boost_1_34_1/boost/regex/v4/basic_regex_creator.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -24,6 +24,8 @@ + # include BOOST_ABI_PREFIX + #endif + ++#include ++ + namespace boost{ + + namespace re_detail{ +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/basic_regex.hpp boost_1_34_1/boost/regex/v4/basic_regex.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/basic_regex.hpp 2007-06-05 12:28:18.000000000 -0500 ++++ boost_1_34_1/boost/regex/v4/basic_regex.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -23,6 +23,8 @@ + # include BOOST_ABI_PREFIX + #endif + ++#include ++ + namespace boost{ + #ifdef BOOST_MSVC + #pragma warning(push) +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/basic_regex_parser.hpp boost_1_34_1/boost/regex/v4/basic_regex_parser.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/basic_regex_parser.hpp 2006-12-20 11:19:05.000000000 -0600 ++++ boost_1_34_1/boost/regex/v4/basic_regex_parser.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -23,6 +23,8 @@ + # include BOOST_ABI_PREFIX + #endif + ++#include ++ + namespace boost{ + namespace re_detail{ + +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/cpp_regex_traits.hpp boost_1_34_1/boost/regex/v4/cpp_regex_traits.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/cpp_regex_traits.hpp 2007-01-15 05:09:44.000000000 -0600 ++++ boost_1_34_1/boost/regex/v4/cpp_regex_traits.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -41,6 +41,7 @@ + + #include + #include ++#include + + #ifdef BOOST_HAS_ABI_HEADERS + # include BOOST_ABI_PREFIX +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/perl_matcher.hpp boost_1_34_1/boost/regex/v4/perl_matcher.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/perl_matcher.hpp 2006-10-18 07:55:30.000000000 -0500 ++++ boost_1_34_1/boost/regex/v4/perl_matcher.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -18,6 +18,8 @@ + # include BOOST_ABI_PREFIX + #endif + ++#include ++ + namespace boost{ + namespace re_detail{ + +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/regex_split.hpp boost_1_34_1/boost/regex/v4/regex_split.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/regex_split.hpp 2005-01-21 11:22:38.000000000 -0600 ++++ boost_1_34_1/boost/regex/v4/regex_split.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -21,6 +21,8 @@ + #ifndef BOOST_REGEX_SPLIT_HPP + #define BOOST_REGEX_SPLIT_HPP + ++#include ++ + namespace boost{ + + #ifdef BOOST_HAS_ABI_HEADERS +diff -aNru boost_1_34_1-ORIGINAL/boost/regex/v4/states.hpp boost_1_34_1/boost/regex/v4/states.hpp +--- boost_1_34_1-ORIGINAL/boost/regex/v4/states.hpp 2005-09-20 07:01:25.000000000 -0500 ++++ boost_1_34_1/boost/regex/v4/states.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -23,6 +23,8 @@ + # include BOOST_ABI_PREFIX + #endif + ++#include ++ + namespace boost{ + namespace re_detail{ + +diff -aNru boost_1_34_1-ORIGINAL/boost/serialization/collection_traits.hpp boost_1_34_1/boost/serialization/collection_traits.hpp +--- boost_1_34_1-ORIGINAL/boost/serialization/collection_traits.hpp 2005-06-21 00:19:04.000000000 -0500 ++++ boost_1_34_1/boost/serialization/collection_traits.hpp 2008-03-03 03:09:49.000000000 -0600 +@@ -22,6 +22,7 @@ + // compiles recognize the same set of primitive types, the possibility + // exists for archives to be non-portable if class information for primitive + // types is included. This is addressed by the following macros. ++#include + #include + #include + #include +diff -aNru boost_1_34_1-ORIGINAL/boost/spirit/phoenix/operators.hpp boost_1_34_1/boost/spirit/phoenix/operators.hpp +--- boost_1_34_1-ORIGINAL/boost/spirit/phoenix/operators.hpp 2006-08-25 11:27:30.000000000 -0500 ++++ boost_1_34_1/boost/spirit/phoenix/operators.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + /////////////////////////////////////////////////////////////////////////////// + namespace phoenix { +diff -aNru boost_1_34_1-ORIGINAL/boost/test/test_tools.hpp boost_1_34_1/boost/test/test_tools.hpp +--- boost_1_34_1-ORIGINAL/boost/test/test_tools.hpp 2007-02-22 11:57:29.000000000 -0600 ++++ boost_1_34_1/boost/test/test_tools.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -42,6 +42,7 @@ + #include + + // STL ++#include + #include // for std::size_t + #include + +diff -aNru boost_1_34_1-ORIGINAL/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp boost_1_34_1/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp +--- boost_1_34_1-ORIGINAL/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp 2006-12-20 10:38:24.000000000 -0600 ++++ boost_1_34_1/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #if defined(BOOST_SPIRIT_DEBUG) + #include + #endif // defined(BOOST_SPIRIT_DEBUG) +diff -aNru boost_1_34_1-ORIGINAL/boost/wave/util/flex_string.hpp boost_1_34_1/boost/wave/util/flex_string.hpp +--- boost_1_34_1-ORIGINAL/boost/wave/util/flex_string.hpp 2006-04-25 12:21:01.000000000 -0500 ++++ boost_1_34_1/boost/wave/util/flex_string.hpp 2008-03-03 03:08:59.000000000 -0600 +@@ -94,6 +94,7 @@ + #include + #include + #include ++#include + + // this must occur after all of the includes and before any code appears + #ifdef BOOST_HAS_ABI_HEADERS + +--- boost_1_33_1/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp 2008-07-05 01:50:04.000000000 +0200 ++++ boost_1_34_1/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp 2006-12-20 17:38:24.000000000 +0100 +@@ -295,17 +325,20 @@ + + lex_functor(IteratorT const &first, IteratorT const &last, + PositionT const &pos, boost::wave::language_support language) +- : lexer(first, last, pos, language) ++ : re2c_lexer(first, last, pos, language) + {} + virtual ~lex_functor() {} + + // get the next token from the input stream +- token_type get() { return lexer.get(); } +- void set_position(PositionT const &pos) +- { lexer.set_position(pos); } ++ token_type get() { return re2c_lexer.get(); } ++ void set_position(PositionT const &pos) { re2c_lexer.set_position(pos); } ++#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0 ++ bool has_include_guards(std::string& guard_name) const ++ { return re2c_lexer.has_include_guards(guard_name); } ++#endif + + private: +- lexer lexer; ++ lexer re2c_lexer; + }; + + /////////////////////////////////////////////////////////////////////////////// +@@ -338,7 +371,7 @@ + // It is coupled to the iterator type to allow to decouple the lexer/iterator + // configurations at compile time. + // +-// This function is declared inside the cpp_slex_token.hpp file, which is ++// This function is declared inside the cpp_lex_token.hpp file, which is + // referenced by the source file calling the lexer and the source file, which + // instantiates the lex_functor. But is is defined here, so it will be + // instantiated only while compiling the source file, which instantiates the +@@ -356,8 +389,8 @@ + IteratorT const &last, PositionT const &pos, + boost::wave::language_support language) + { +- return new re2clex::lex_functor(first, last, pos, +- language); ++ using re2clex::lex_functor; ++ return new lex_functor(first, last, pos, language); + } + + #undef BOOST_WAVE_RE2C_NEW_LEXER_INLINE -- cgit v1.2.3 From 3ca4c990b9cfbdf77f9295e4158d291761767faa Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 08:38:32 +0000 Subject: gnash: add missing patch --- packages/gnash/files/.mtn2git_empty | 0 packages/gnash/files/libtool-2.2.patch | 35 ++++++++++++++++++++++++++++++++++ packages/gnash/gnash-minimal_0.8.3.bb | 10 ++++++++++ 3 files changed, 45 insertions(+) create mode 100644 packages/gnash/files/.mtn2git_empty create mode 100644 packages/gnash/files/libtool-2.2.patch create mode 100644 packages/gnash/gnash-minimal_0.8.3.bb diff --git a/packages/gnash/files/.mtn2git_empty b/packages/gnash/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/gnash/files/libtool-2.2.patch b/packages/gnash/files/libtool-2.2.patch new file mode 100644 index 0000000000..f0ec274104 --- /dev/null +++ b/packages/gnash/files/libtool-2.2.patch @@ -0,0 +1,35 @@ +diff -NrU5 gnash-0.8.3.orig/libbase/Makefile.am gnash-0.8.3/libbase/Makefile.am +--- gnash-0.8.3.orig/libbase/Makefile.am 2008-06-26 22:56:12.000000000 +0200 ++++ gnash-0.8.3/libbase/Makefile.am 2008-06-26 22:57:48.000000000 +0200 +@@ -19,13 +19,13 @@ + + # this is where Gnash plugins get installed + pluginsdir = $(prefix)/lib/gnash/plugins + + if INSTALL_LTDL +-include_HEADERS = $(top_srcdir)/libltdl/ltdl.h +-LIBLTDLLIB = libltdl.la +-LIBLTDLHEAD = $(top_srcdir)/libltdl/ltdl.h ++#include_HEADERS = $(top_srcdir)/libltdl/ltdl.h ++#LIBLTDLLIB = libltdl.la ++#LIBLTDLHEAD = $(top_srcdir)/libltdl/ltdl.h + endif + + sysconf_DATA = gnashrc gnashpluginrc + + edit = sed \ +@@ -174,12 +174,12 @@ + + libgnashbase_la_LDFLAGS = -release $(VERSION) + + libltdlc_la_CPPFLAGS = $(LTDLINCL) + if CONVENIENCE_LTDL +-noinst_LTLIBRARIES = libltdlc.la +-libltdlc_la_SOURCES = $(top_srcdir)/libltdl/ltdl.c ++#noinst_LTLIBRARIES = libltdlc.la ++#libltdlc_la_SOURCES = $(top_srcdir)/libltdl/ltdl.c + endif + CLEANFILES = libltdl.la libltdlc.la gnashrc gnashpluginrc + + libltdl_la_SOURCES = $(top_srcdir)/libltdl/ltdl.c + libltdl_la_LDFLAGS = -no-undefined -version-info 4:4:1 diff --git a/packages/gnash/gnash-minimal_0.8.3.bb b/packages/gnash/gnash-minimal_0.8.3.bb new file mode 100644 index 0000000000..e161ae2c7a --- /dev/null +++ b/packages/gnash/gnash-minimal_0.8.3.bb @@ -0,0 +1,10 @@ +require gnash-minimal.inc + +EXTRA_OECONF += " --without-included-ltdl \ + --with-ltdl-include=${STAGING_INCDIR} \ + --with-ltdl-lib=${STAGING_LIBDIR} \ +" + +SRC_URI += "file://libtool-2.2.patch;patch=1" + + -- cgit v1.2.3 From 663c30738d09ee605bcc6e199154c5c58eacdfae Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 10:03:31 +0000 Subject: swfdec-mozilla: add NPAPI browser plugin for flash, works with webkit --- packages/swfdec/swfdec-mozilla_0.7.2.bb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/swfdec/swfdec-mozilla_0.7.2.bb diff --git a/packages/swfdec/swfdec-mozilla_0.7.2.bb b/packages/swfdec/swfdec-mozilla_0.7.2.bb new file mode 100644 index 0000000000..e6f198bdac --- /dev/null +++ b/packages/swfdec/swfdec-mozilla_0.7.2.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Swfdec plugin for browsers using NPAPI. Swfdec is a decoder/renderer for Macromedia Flash animations." +LICENSE = "LGPL" + +DEPENDS = "swfdec gstreamer libsoup-2.4 pango cairo liboil zlib libmad gtk+ alsa-lib" + +SRC_URI = "http://swfdec.freedesktop.org/download/swfdec-mozilla/0.7/${P}.tar.gz \ +" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} + +FILES_${PN} += "${libdir}/mozilla/plugins/*.so" +FILES_${PN}-dev += "${libdir}/mozilla/plugins/*a" +FILES_${PN}-dbg += "${libdir}/mozilla/plugins/.debug" + -- cgit v1.2.3 From 78460ca731ed40d9c8c262d28c701ec1f7182288 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 10:20:56 +0000 Subject: gnash-minimal: depend on libtool, remove PR from .inc --- packages/gnash/gnash-minimal.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/gnash/gnash-minimal.inc b/packages/gnash/gnash-minimal.inc index 06b4b9c6ec..1d62a56a05 100644 --- a/packages/gnash/gnash-minimal.inc +++ b/packages/gnash/gnash-minimal.inc @@ -1,8 +1,7 @@ DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features" HOMEPAGE = "http://www.gnu.org/software/gnash" LICENSE = "GPL-2" -DEPENDS = "agg libxml2 libmad zlib boost jpeg pango curl freetype" -PR = "r5" +DEPENDS = "libtool agg libxml2 libmad zlib boost jpeg pango curl freetype" SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gnash/${PV}/gnash-${PV}.tar.bz2" S = ${WORKDIR}/gnash-${PV} -- cgit v1.2.3 From cb9eff8a7d0257e229e8bc1578ef7eb5ec372803 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 10:48:33 +0000 Subject: linux 2.6.25: update at32stk1000 defconfig to include pcmcia->usb drivers --- packages/linux/linux-2.6.25/at32stk1000/defconfig | 177 +++++++++++++++++++++- packages/linux/linux_2.6.25.bb | 2 +- 2 files changed, 175 insertions(+), 4 deletions(-) diff --git a/packages/linux/linux-2.6.25/at32stk1000/defconfig b/packages/linux/linux-2.6.25/at32stk1000/defconfig index 9bacf1739d..66a1a789b3 100644 --- a/packages/linux/linux-2.6.25/at32stk1000/defconfig +++ b/packages/linux/linux-2.6.25/at32stk1000/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.25 -# Tue Jul 1 21:14:57 2008 +# Sat Jul 5 12:40:54 2008 # CONFIG_AVR32=y CONFIG_GENERIC_GPIO=y @@ -432,6 +432,7 @@ CONFIG_MTD_NAND_ATMEL_ECC_HW=y # CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set # CONFIG_MTD_ONENAND is not set # @@ -444,6 +445,7 @@ CONFIG_BLK_DEV=y CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_CRYPTOLOOP is not set CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_UB is not set CONFIG_BLK_DEV_RAM=m CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 @@ -550,6 +552,15 @@ CONFIG_MACB=y # # CONFIG_WLAN_PRE80211 is not set # CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set # CONFIG_NET_PCMCIA is not set # CONFIG_WAN is not set CONFIG_PPP=m @@ -686,6 +697,7 @@ CONFIG_I2C_GPIO=m # CONFIG_I2C_SIMTEC is not set # CONFIG_I2C_TAOS_EVM is not set # CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set # # Miscellaneous I2C Chip support @@ -752,6 +764,11 @@ CONFIG_WATCHDOG=y # CONFIG_SOFT_WATCHDOG is not set CONFIG_AT32AP700X_WDT=y +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set + # # Sonics Silicon Backplane # @@ -865,6 +882,12 @@ CONFIG_SND_ATMEL_AC97=m CONFIG_SND_AT73C213=m CONFIG_SND_AT73C213_TARGET_BITRATE=48000 +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + # # PCMCIA devices # @@ -892,16 +915,164 @@ CONFIG_SOUND_PRIME=m # CONFIG_SOUND_MSNDPIN is not set CONFIG_SOUND_AT32_ABDAC=m CONFIG_AC97_BUS=m -# CONFIG_HID_SUPPORT is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +CONFIG_HIDRAW=y + +# +# USB Input Devices +# +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT_POWERBOOK=y +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y # CONFIG_USB_ARCH_HAS_OHCI is not set # CONFIG_USB_ARCH_HAS_EHCI is not set -# CONFIG_USB is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m # # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' # + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +CONFIG_USB_LIBUSUAL=y + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +CONFIG_USB_EZUSB=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_AIRPRIME=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP2101=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set CONFIG_USB_GADGET=y # CONFIG_USB_GADGET_DEBUG is not set # CONFIG_USB_GADGET_DEBUG_FILES is not set diff --git a/packages/linux/linux_2.6.25.bb b/packages/linux/linux_2.6.25.bb index 309ce5a5f7..e228860a49 100644 --- a/packages/linux/linux_2.6.25.bb +++ b/packages/linux/linux_2.6.25.bb @@ -1,6 +1,6 @@ require linux.inc -PR = "r1" +PR = "r2" # Mark archs/machines that this kernel supports DEFAULT_PREFERENCE = "-1" -- cgit v1.2.3 From 62e7b117418e2abaa90c5089845e5b02a5088b71 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 11:21:54 +0000 Subject: gnuradio: add patch to build against gcc 4.3.x --- packages/gnuradio/gnuradio-3.1.2/gcc43.patch | 900 +++++++++++++++++++++++++++ packages/gnuradio/gnuradio_3.1.2.bb | 3 +- 2 files changed, 902 insertions(+), 1 deletion(-) create mode 100644 packages/gnuradio/gnuradio-3.1.2/gcc43.patch diff --git a/packages/gnuradio/gnuradio-3.1.2/gcc43.patch b/packages/gnuradio/gnuradio-3.1.2/gcc43.patch new file mode 100644 index 0000000000..e9e3aa4a80 --- /dev/null +++ b/packages/gnuradio/gnuradio-3.1.2/gcc43.patch @@ -0,0 +1,900 @@ +Index: gnuradio/trunk/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc (revision 8292) +@@ -39,4 +39,5 @@ + + #include ++#include + + gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector &taps) +Index: gnuradio/trunk/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc (revision 8292) +@@ -34,4 +34,5 @@ + + #include ++#include + + gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector &taps) +Index: gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc (revision 6574) ++++ gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc (revision 8292) +@@ -48,4 +48,5 @@ + #include + #include ++#include + + using std::vector; +Index: gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc (revision 6574) ++++ gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc (revision 8292) +@@ -48,4 +48,5 @@ + #include + #include ++#include + + using std::vector; +Index: gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc (revision 6574) ++++ gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc (revision 8292) +@@ -47,4 +47,5 @@ + #include + #include ++#include + + using std::vector; +Index: gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc (revision 8292) +@@ -33,4 +33,5 @@ + #include + #include ++#include + + using std::vector; +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + + //define ALIGN_ADVANCED_IMPLEMENTATION to have an alternative implementation of the align algoritm which exactly follows the align_interval spec. +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_bin_statistics_f.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_bin_statistics_f.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_bin_statistics_f.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_bin_statistics_f_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_circular_file.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_circular_file.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_circular_file.cc (revision 8292) +@@ -40,4 +40,6 @@ + + #include ++#include ++#include + + static const int HEADER_SIZE = 4096; +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_delay.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_delay.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_delay.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_delay_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + + static const int PAD_VAL = 0xAA; +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_fft_vcc.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_fft_vcc.cc (revision 8244) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_fft_vcc.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + + gr_fft_vcc_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_fft_vfc.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_fft_vfc.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_fft_vfc.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_framer_sink_1.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + + #define VERBOSE 0 +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_head.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_head.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_head.cc (revision 8292) +@@ -26,4 +26,5 @@ + #include + #include ++#include + + gr_head::gr_head (size_t sizeof_stream_item, int nitems) +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_keep_one_in_n_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_log2_const.h +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_log2_const.h (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_log2_const.h (revision 8292) +@@ -32,15 +32,15 @@ + template static inline int gr_log2_const() { assert(0); return 0; } + +-template<> static inline int gr_log2_const<1>() { return 0; } +-template<> static inline int gr_log2_const<2>() { return 1; } +-template<> static inline int gr_log2_const<4>() { return 2; } +-template<> static inline int gr_log2_const<8>() { return 3; } +-template<> static inline int gr_log2_const<16>() { return 4; } +-template<> static inline int gr_log2_const<32>() { return 5; } +-template<> static inline int gr_log2_const<64>() { return 6; } +-template<> static inline int gr_log2_const<128>() { return 7; } +-template<> static inline int gr_log2_const<256>() { return 8; } +-template<> static inline int gr_log2_const<512>() { return 9; } +-template<> static inline int gr_log2_const<1024>(){ return 10; } ++template<> inline int gr_log2_const<1>() { return 0; } ++template<> inline int gr_log2_const<2>() { return 1; } ++template<> inline int gr_log2_const<4>() { return 2; } ++template<> inline int gr_log2_const<8>() { return 3; } ++template<> inline int gr_log2_const<16>() { return 4; } ++template<> inline int gr_log2_const<32>() { return 5; } ++template<> inline int gr_log2_const<64>() { return 6; } ++template<> inline int gr_log2_const<128>() { return 7; } ++template<> inline int gr_log2_const<256>() { return 8; } ++template<> inline int gr_log2_const<512>() { return 9; } ++template<> inline int gr_log2_const<1024>(){ return 10; } + + #endif /* INCLUDED_GR_LOG2_CONST_H */ +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_null_source.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_null_source.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_null_source.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_null_source::gr_null_source (size_t sizeof_stream_item) +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_packet_sink.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_packet_sink.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_packet_sink.cc (revision 8292) +@@ -34,4 +34,5 @@ + #include + #include ++#include + + #define VERBOSE 0 +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc (revision 7324) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_peak_detector2_fb_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_simple_correlator.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_simple_correlator.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_simple_correlator.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_simple_framer.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_simple_framer.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_simple_framer.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_skiphead.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_skiphead.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_skiphead.cc (revision 8292) +@@ -26,4 +26,5 @@ + #include + #include ++#include + + gr_skiphead::gr_skiphead (size_t itemsize, size_t nitems_to_skip) +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_mux.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_mux.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_mux.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + #define VERBOSE 0 +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_to_streams.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_to_streams.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_to_streams.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_stream_to_streams_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_to_vector.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_to_vector.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_stream_to_vector.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_stream_to_vector_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_streams_to_stream.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_streams_to_stream.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_streams_to_stream.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_streams_to_stream_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_streams_to_vector.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_streams_to_vector.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_streams_to_vector.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_streams_to_vector_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_test.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_test.cc (revision 7847) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_test.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + + gr_test_sptr gr_make_test (const std::string &name, +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_throttle.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_throttle.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_throttle.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + #ifdef HAVE_TIME_H + #include +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_vector_to_stream.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_vector_to_stream.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_vector_to_stream.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_vector_to_stream_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/gr_vector_to_streams.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_vector_to_streams.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_vector_to_streams.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + gr_vector_to_streams_sptr +Index: gnuradio/trunk/gnuradio-core/src/lib/general/malloc16.c +=================================================================== +--- import/gnuradio-savannah-20060726/trunk/gnuradio-core/src/lib/general/malloc16.c (revision 1313) ++++ gnuradio/trunk/gnuradio-core/src/lib/general/malloc16.c (revision 8292) +@@ -8,4 +8,5 @@ + #include "malloc16.h" + #include ++#include + + void *malloc16Align(int size){ +Index: gnuradio/trunk/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + @SPTR_NAME@ +Index: gnuradio/trunk/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t (revision 7587) ++++ gnuradio/trunk/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t (revision 8292) +@@ -29,4 +29,5 @@ + #include <@NAME@.h> + #include ++#include + + @SPTR_NAME@ +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc (revision 8292) +@@ -33,4 +33,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc (revision 8292) +@@ -33,4 +33,6 @@ + #include + #include ++#include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_sink_base.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_sink_base.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_sink_base.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + // win32 (mingw/msvc) specific +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_source.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_source.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_file_source.cc (revision 8292) +@@ -32,4 +32,5 @@ + #include + #include ++#include + + // win32 (mingw/msvc) specific +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_message_sink.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_message_sink.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_message_sink.cc (revision 8292) +@@ -33,4 +33,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_message_source.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_message_source.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_message_source.cc (revision 8292) +@@ -33,4 +33,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc (revision 8097) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc (revision 8292) +@@ -29,4 +29,5 @@ + #if defined(HAVE_SOCKET) + #include ++#include + typedef void* optval_t; + #else +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc (revision 8097) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc (revision 8292) +@@ -28,4 +28,6 @@ + #include + #include ++#include ++#include + #if defined(HAVE_SOCKET) + #include +Index: gnuradio/trunk/gnuradio-core/src/lib/io/gri_logger.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/io/gri_logger.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/io/gri_logger.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/reed-solomon/decode_rs.c +=================================================================== +--- import/gnuradio-savannah-20060726/trunk/gnuradio-core/src/lib/reed-solomon/decode_rs.c (revision 605) ++++ gnuradio/trunk/gnuradio-core/src/lib/reed-solomon/decode_rs.c (revision 8292) +@@ -9,4 +9,5 @@ + + #include ++#include + + #define NULL ((void *)0) +Index: gnuradio/trunk/gnuradio-core/src/lib/reed-solomon/encode_rs.c +=================================================================== +--- import/gnuradio-savannah-20060726/trunk/gnuradio-core/src/lib/reed-solomon/encode_rs.c (revision 605) ++++ gnuradio/trunk/gnuradio-core/src/lib/reed-solomon/encode_rs.c (revision 8292) +@@ -4,4 +4,5 @@ + */ + #include ++#include + + #ifdef FIXED +Index: gnuradio/trunk/gnuradio-core/src/lib/reed-solomon/exercise.c +=================================================================== +--- import/gnuradio-savannah-20060726/trunk/gnuradio-core/src/lib/reed-solomon/exercise.c (revision 605) ++++ gnuradio/trunk/gnuradio-core/src/lib/reed-solomon/exercise.c (revision 8292) +@@ -14,4 +14,5 @@ + #include + #include ++#include + + #ifdef FIXED +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_dispatcher.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_dispatcher.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_dispatcher.cc (revision 8292) +@@ -28,4 +28,5 @@ + #include + #include ++#include + + #ifdef HAVE_SELECT +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_error_handler.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_error_handler.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_error_handler.cc (revision 8292) +@@ -49,4 +49,5 @@ + #include + #include ++#include + + #ifdef HAVE_IO_H +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc (revision 8292) +@@ -28,4 +28,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_message.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_message.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_message.cc (revision 8292) +@@ -26,4 +26,5 @@ + #include + #include ++#include + + static long s_ncurrently_allocated = 0; +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_preferences.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_preferences.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_preferences.cc (revision 8292) +@@ -32,4 +32,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_realtime.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_realtime.cc (revision 6427) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_realtime.cc (revision 8292) +@@ -62,4 +62,5 @@ + + #include ++#include + + gr_rt_status_t +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc (revision 6201) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_scheduler_thread.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + #ifdef HAVE_SIGNAL_H +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + #include + +Index: gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc (revision 8292) +@@ -41,5 +41,4 @@ + #include + #include +- + + gr_vmcircbuf_mmap_tmpfile::gr_vmcircbuf_mmap_tmpfile (int size) +Index: gnuradio/trunk/gnuradio-core/src/tests/benchmark_nco.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/tests/benchmark_nco.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/tests/benchmark_nco.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + #define ITERATIONS 20000000 +Index: gnuradio/trunk/gnuradio-core/src/tests/benchmark_vco.cc +=================================================================== +--- gnuradio/trunk/gnuradio-core/src/tests/benchmark_vco.cc (revision 6044) ++++ gnuradio/trunk/gnuradio-core/src/tests/benchmark_vco.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + #define ITERATIONS 5000000 +Index: gnuradio/trunk/gr-atsc/src/lib/atsc_bit_timing_loop.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/atsc_bit_timing_loop.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/atsc_bit_timing_loop.cc (revision 8292) +@@ -28,4 +28,5 @@ + #include + #include ++#include + + // Input rate changed from 20MHz to 19.2 to support usrp at 3 * 6.4MHz +Index: gnuradio/trunk/gr-atsc/src/lib/atsci_reed_solomon.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/atsci_reed_solomon.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/atsci_reed_solomon.cc (revision 8292) +@@ -23,4 +23,5 @@ + #include + #include ++#include + + extern "C" { +Index: gnuradio/trunk/gr-atsc/src/lib/atsci_sliding_correlator.h +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/atsci_sliding_correlator.h (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/atsci_sliding_correlator.h (revision 8292) +@@ -20,8 +20,9 @@ + * Boston, MA 02110-1301, USA. + */ ++#include ++#include ++ + #ifndef _ATSC_SLIDING_CORRELATOR_H_ + #define _ATSC_SLIDING_CORRELATOR_H_ +- +-#include + + extern const unsigned char atsc_pn511[511]; +Index: gnuradio/trunk/gr-atsc/src/lib/atsci_sssr.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/atsci_sssr.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/atsci_sssr.cc (revision 8292) +@@ -28,4 +28,5 @@ + #include + #include ++#include + + /* +Index: gnuradio/trunk/gr-atsc/src/lib/atsci_trellis_encoder.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/atsci_trellis_encoder.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/atsci_trellis_encoder.cc (revision 8292) +@@ -24,4 +24,5 @@ + #include + #include ++#include + + static const int DIBITS_PER_BYTE = 4; +Index: gnuradio/trunk/gr-atsc/src/lib/atsci_viterbi_decoder.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/atsci_viterbi_decoder.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/atsci_viterbi_decoder.cc (revision 8292) +@@ -26,4 +26,5 @@ + #include + #include "atsci_viterbi_mux.cc" ++#include + + +Index: gnuradio/trunk/gr-atsc/src/lib/interleaver_fifo.h +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/interleaver_fifo.h (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/interleaver_fifo.h (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + + /*! +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_data_interleaver.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_data_interleaver.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_data_interleaver.cc (revision 8292) +@@ -23,4 +23,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_equalizer_nop.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_equalizer_nop.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_equalizer_nop.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + + using std::cerr; +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_fake_single_viterbi.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_randomizer.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_randomizer.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_randomizer.cc (revision 8292) +@@ -24,4 +24,5 @@ + + #include ++#include + + static unsigned int expected_initial_states[] = { +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_reed_solomon.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_reed_solomon.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_reed_solomon.cc (revision 8292) +@@ -30,4 +30,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_single_viterbi.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_single_viterbi.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_single_viterbi.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gr-atsc/src/lib/qa_atsci_trellis_encoder.cc +=================================================================== +--- gnuradio/trunk/gr-atsc/src/lib/qa_atsci_trellis_encoder.cc (revision 6044) ++++ gnuradio/trunk/gr-atsc/src/lib/qa_atsci_trellis_encoder.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include + #include ++#include + + #define NELEM(x) (sizeof (x) / sizeof (x[0])) +Index: gnuradio/trunk/gr-audio-portaudio/src/audio_portaudio_sink.cc +=================================================================== +--- gnuradio/trunk/gr-audio-portaudio/src/audio_portaudio_sink.cc (revision 6044) ++++ gnuradio/trunk/gr-audio-portaudio/src/audio_portaudio_sink.cc (revision 8292) +@@ -34,4 +34,5 @@ + #include + #include ++#include + + #define LOGGING 0 // define to 0 or 1 +Index: gnuradio/trunk/gr-audio-portaudio/src/audio_portaudio_source.cc +=================================================================== +--- gnuradio/trunk/gr-audio-portaudio/src/audio_portaudio_source.cc (revision 6044) ++++ gnuradio/trunk/gr-audio-portaudio/src/audio_portaudio_source.cc (revision 8292) +@@ -34,4 +34,5 @@ + #include + #include ++#include + + #define LOGGING 0 // define to 0 or 1 +Index: gnuradio/trunk/gr-gsm-fr-vocoder/src/lib/gsm/code.c +=================================================================== +--- import/gnuradio-savannah-20060726/trunk/gr-gsm-fr-vocoder/src/lib/gsm/code.c (revision 968) ++++ gnuradio/trunk/gr-gsm-fr-vocoder/src/lib/gsm/code.c (revision 8292) +@@ -20,4 +20,5 @@ + #include "gsm.h" + #include "proto.h" ++#include + + /* +Index: gnuradio/trunk/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c +=================================================================== +--- import/gnuradio-savannah-20060726/trunk/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c (revision 968) ++++ gnuradio/trunk/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c (revision 8292) +@@ -31,4 +31,5 @@ + #include "private.h" + #include "proto.h" ++#include + + gsm gsm_create P0() +Index: gnuradio/trunk/gr-trellis/src/lib/fsm.cc +=================================================================== +--- gnuradio/trunk/gr-trellis/src/lib/fsm.cc (revision 6044) ++++ gnuradio/trunk/gr-trellis/src/lib/fsm.cc (revision 8292) +@@ -27,4 +27,5 @@ + #include + #include ++#include + #include "base.h" + #include "fsm.h" +Index: gnuradio/trunk/gr-trellis/src/lib/fsm.h +=================================================================== +--- gnuradio/trunk/gr-trellis/src/lib/fsm.h (revision 6044) ++++ gnuradio/trunk/gr-trellis/src/lib/fsm.h (revision 8292) +@@ -25,4 +25,5 @@ + + #include ++#include + + /*! +Index: gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc +=================================================================== +--- gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc (revision 6044) ++++ gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc (revision 8292) +@@ -28,4 +28,5 @@ + #include + #include ++#include + + trellis_permutation_sptr +Index: gnuradio/trunk/gr-video-sdl/src/video_sdl_sink_s.cc +=================================================================== +--- gnuradio/trunk/gr-video-sdl/src/video_sdl_sink_s.cc (revision 6044) ++++ gnuradio/trunk/gr-video-sdl/src/video_sdl_sink_s.cc (revision 8292) +@@ -36,4 +36,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/gr-video-sdl/src/video_sdl_sink_uc.cc +=================================================================== +--- gnuradio/trunk/gr-video-sdl/src/video_sdl_sink_uc.cc (revision 6044) ++++ gnuradio/trunk/gr-video-sdl/src/video_sdl_sink_uc.cc (revision 8292) +@@ -36,4 +36,5 @@ + #include + #include ++#include + + +Index: gnuradio/trunk/usrp/host/apps/usrper.cc +=================================================================== +--- gnuradio/trunk/usrp/host/apps/usrper.cc (revision 6044) ++++ gnuradio/trunk/usrp/host/apps/usrper.cc (revision 8292) +@@ -31,4 +31,5 @@ + #include "usrp_prims.h" + #include "usrp_spi_defs.h" ++#include + + char *prog_name; +Index: gnuradio/trunk/usrp/host/lib/legacy/fusb_win32.cc +=================================================================== +--- gnuradio/trunk/usrp/host/lib/legacy/fusb_win32.cc (revision 6044) ++++ gnuradio/trunk/usrp/host/lib/legacy/fusb_win32.cc (revision 8292) +@@ -29,4 +29,5 @@ + #include + #include ++#include + + static const int MAX_BLOCK_SIZE = fusb_sysconfig::max_block_size(); +Index: gnuradio/trunk/usrp/host/lib/legacy/usrp_basic.cc +=================================================================== +--- gnuradio/trunk/usrp/host/lib/legacy/usrp_basic.cc (revision 6044) ++++ gnuradio/trunk/usrp/host/lib/legacy/usrp_basic.cc (revision 8292) +@@ -35,4 +35,5 @@ + #include + #include ++#include + + using namespace ad9862; +Index: gnuradio/trunk/usrp/host/lib/legacy/usrp_local_sighandler.cc +=================================================================== +--- gnuradio/trunk/usrp/host/lib/legacy/usrp_local_sighandler.cc (revision 6044) ++++ gnuradio/trunk/usrp/host/lib/legacy/usrp_local_sighandler.cc (revision 8292) +@@ -33,4 +33,5 @@ + #include + #include ++#include + + usrp_local_sighandler::usrp_local_sighandler (int signum, +Index: gnuradio/trunk/usrp/host/lib/legacy/usrp_prims.cc +=================================================================== +--- gnuradio/trunk/usrp/host/lib/legacy/usrp_prims.cc (revision 6044) ++++ gnuradio/trunk/usrp/host/lib/legacy/usrp_prims.cc (revision 8292) +@@ -63,4 +63,5 @@ + + #include "std_paths.h" ++#include + + static char * +Index: gnuradio/trunk/usrp/host/misc/getopt.c +=================================================================== +--- gnuradio/trunk/usrp/host/misc/getopt.c (revision 6044) ++++ gnuradio/trunk/usrp/host/misc/getopt.c (revision 8292) +@@ -53,4 +53,5 @@ + + #include ++#include + + /* Comment out all this code if we are using the GNU C Library, and are not diff --git a/packages/gnuradio/gnuradio_3.1.2.bb b/packages/gnuradio/gnuradio_3.1.2.bb index 0f339c30c1..f5ced2324c 100644 --- a/packages/gnuradio/gnuradio_3.1.2.bb +++ b/packages/gnuradio/gnuradio_3.1.2.bb @@ -1,8 +1,9 @@ require gnuradio.inc -PR = "r2" +PR = "r3" SRC_URI = "ftp://ftp.gnu.org/gnu/gnuradio/gnuradio-${PV}.tar.gz \ file://no-trellis-doc.patch;patch=1 \ + file://gcc43.patch;patch=1;pnum=2 \ " -- cgit v1.2.3 From 226038aa8f33be3c42eb56f5622f335a12b795b7 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 12:30:38 +0000 Subject: gnash-minimal: packaging fixes --- packages/gnash/gnash-minimal.inc | 6 ++++-- packages/gnash/gnash-minimal_0.8.3.bb | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/gnash/gnash-minimal.inc b/packages/gnash/gnash-minimal.inc index 1d62a56a05..1cd3bc9991 100644 --- a/packages/gnash/gnash-minimal.inc +++ b/packages/gnash/gnash-minimal.inc @@ -42,11 +42,13 @@ EXTRA_OECONF="--enable-gui=gtk \ # detection because uclibc does not have argz.h which enables error_t CFLAGS += " -D_GNU_SOURCE " -PACKAGES =+ " libgnashamf libgnashbase libgnashserver libgnashmedia libltdl" +PACKAGES =+ "libgnashnet libgnashamf libgnashbase libgnashserver libgnashmedia libltdl" +FILES_${PN}-dbg += "${libdir}/gnash/.debug" +FILES_${PN}-dev += "${libdir}/gnash/*a" FILES_libltdl = "${libdir}/gnash/libltdl*.so*" FILES_libgnashamf = "${libdir}/gnash/libgnashamf-${PV}.so" FILES_libgnashbase = "${libdir}/gnash/libgnashbase-${PV}.so" FILES_libgnashmedia = "${libdir}/gnash/libgnashmedia-${PV}.so" FILES_libgnashserver = "${libdir}/gnash/libgnashserver-${PV}.so" - +FILES_libgnashnet = "${libdir}/gnash/libgnashnet.so.*" diff --git a/packages/gnash/gnash-minimal_0.8.3.bb b/packages/gnash/gnash-minimal_0.8.3.bb index e161ae2c7a..b5bcf29683 100644 --- a/packages/gnash/gnash-minimal_0.8.3.bb +++ b/packages/gnash/gnash-minimal_0.8.3.bb @@ -1,5 +1,7 @@ require gnash-minimal.inc +PR = "r6" + EXTRA_OECONF += " --without-included-ltdl \ --with-ltdl-include=${STAGING_INCDIR} \ --with-ltdl-lib=${STAGING_LIBDIR} \ -- cgit v1.2.3 From e50212d73e4e4d8fedbbac8b2a970c7854bbfab4 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 17:13:30 +0000 Subject: oprofile: def_pref -1 the cvs version --- packages/oprofile/oprofile_cvs.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/oprofile/oprofile_cvs.bb b/packages/oprofile/oprofile_cvs.bb index 2096a27b40..786e7046de 100644 --- a/packages/oprofile/oprofile_cvs.bb +++ b/packages/oprofile/oprofile_cvs.bb @@ -7,6 +7,8 @@ LICENSE = "GPL" DEPENDS = "popt binutils" RDEPENDS = "binutils-symlinks" +DEFAULT_PREFERENCE = "-1" + SRC_URI = "cvs://anonymous@oprofile.cvs.sourceforge.net/cvsroot/oprofile;module=oprofile \ file://opstart.patch;patch=1 \ file://acinclude.m4" -- cgit v1.2.3 From 2feb4c6f5b6ac703967e741999fcae7c66ca44bf Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Sat, 5 Jul 2008 20:10:34 +0000 Subject: u-boot git: beagleboard: initialize CM_CLKSEL_DSS register --- packages/u-boot/u-boot-git/beagleboard/base.patch | 6 ++++-- packages/u-boot/u-boot_git.bb | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/u-boot/u-boot-git/beagleboard/base.patch b/packages/u-boot/u-boot-git/beagleboard/base.patch index 1d3a9e5154..dedc34398f 100644 --- a/packages/u-boot/u-boot-git/beagleboard/base.patch +++ b/packages/u-boot/u-boot-git/beagleboard/base.patch @@ -1467,10 +1467,10 @@ index 0000000..2f94684 +#endif /* (CONFIG_COMMANDS & CFG_CMD_NAND) */ diff --git a/board/omap3530beagle/omap3530beagle.c b/board/omap3530beagle/omap3530beagle.c new file mode 100644 -index 0000000..7d9a566 +index 0000000..0bdfb72 --- /dev/null +++ b/board/omap3530beagle/omap3530beagle.c -@@ -0,0 +1,388 @@ +@@ -0,0 +1,390 @@ +/* + * (C) Copyright 2004-2008 + * Texas Instruments, @@ -1740,6 +1740,8 @@ index 0000000..7d9a566 + *((uint *) 0x49058094) = 0x00000506; + *((uint *) 0x49056094) = 0xF060F000; + ++ /* set clksel_tv and clksel_dss1 */ ++ *((uint *) 0x48004E40) = 0x00001002; + return (0); +} + diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index 545438e9f7..c201eced37 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,5 +1,5 @@ require u-boot.inc -PR="r4" +PR="r6" SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" SRCREV_beagleboard = "a94f22f08f280905926219e568568964cb9eeb9d" -- cgit v1.2.3 From 2de47cd809e59c6c94a32fa00611156eec52990b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 5 Jul 2008 23:34:26 +0000 Subject: ipkg-utils*: fix PR values. OE doesn't use split PRs, so stop commiting them! --- packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb | 2 +- packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb index 60361f5862..0adb5da265 100644 --- a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb +++ b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb @@ -1,7 +1,7 @@ require ipkg-utils_${PV}.bb RDEPENDS = "" -PR = "r18" +PR = "r19" inherit native diff --git a/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb index 707a005c5c..40bef907c8 100644 --- a/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb +++ b/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb @@ -5,7 +5,7 @@ LICENSE = "GPL" CONFLICTS = "ipkg-link" RDEPENDS = "python" SRCDATE = "20050404" -PR = "r20.1" +PR = "r21" SRC_URI = "${HANDHELDS_CVS};module=ipkg-utils \ file://ipkg-utils-fix.patch;patch=1 \ -- cgit v1.2.3 From 9c8c89f95bf7acc36ca98fd4c51d59cf60c841c4 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 08:10:28 +0000 Subject: emaotion: add missing depends spotted by packaged-staging --- packages/efl1/emotion_cvs.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/efl1/emotion_cvs.bb b/packages/efl1/emotion_cvs.bb index 826f201779..960d10ad31 100644 --- a/packages/efl1/emotion_cvs.bb +++ b/packages/efl1/emotion_cvs.bb @@ -1,7 +1,7 @@ DESCRIPTION = "The Enlightenment multimedia library" LICENSE = "MIT BSD" # we no longer build the libxine backend, since the gstreamer backend seems more promising -DEPENDS = "eet evas ecore edje gstreamer gst-plugins-base" +DEPENDS = "libxcursor libxinerama eet evas ecore edje gstreamer gst-plugins-base" PV = "0.1.0+cvs${SRCDATE}" PR = "r1" -- cgit v1.2.3 From d042f33acff4d766368720e0a0434b37eb77fc4c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 08:51:47 +0000 Subject: sane-srcrevs: bump opkg-native --- conf/distro/include/sane-srcrevs.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index aecdd18bd9..6e5ca31d8b 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -159,7 +159,7 @@ SRCREV_pn-openmoko-worldclock2 ?= "3365" SRCREV_pn-openocd ?= "517" SRCREV_pn-openocd-native ?= "517" SRCREV_pn-opkg ?= "4488" -SRCREV_pn-opkg-native ?= "4452" +SRCREV_pn-opkg-native ?= "4491" SRCREV_pn-opkg-sdk ?= "4488" SRCREV_pn-oprofileui ?= "173" SRCREV_pn-packagekit ?= "813fa8cfb139246cf180d52895b52b28616ae2f5" -- cgit v1.2.3 From 080090f6ec0d510c7f7380f9ae6eba732b1a449b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 09:02:32 +0000 Subject: angstrom feed configs: bump PR --- packages/angstrom/angstrom-feed-configs.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angstrom/angstrom-feed-configs.bb b/packages/angstrom/angstrom-feed-configs.bb index 0b17aa6cb8..fc6c9c59ce 100644 --- a/packages/angstrom/angstrom-feed-configs.bb +++ b/packages/angstrom/angstrom-feed-configs.bb @@ -1,7 +1,7 @@ DESCRIPTION = "Configuration files for online package repositories aka feeds" #PV = "${DISTRO_VERSION}" -PR = "r5" +PR = "r6" PACKAGE_ARCH = "${MACHINE_ARCH}" FEED_BASEPATH ?= "unstable/feed/" -- cgit v1.2.3 From 27ad067e1147eada1e98bd691ff641120a8077e2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 09:19:24 +0000 Subject: glibc 2.6.1: change optimizations flags for armv7a * If the rebuild fails in do_configure, build glibc-initial to get limits.h in a place where glibc can find it. Builds from scratch works great, though --- conf/distro/include/angstrom-glibc.inc | 2 ++ packages/glibc/glibc_2.6.1.bb | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/distro/include/angstrom-glibc.inc b/conf/distro/include/angstrom-glibc.inc index 8c76de6f1a..a143fe9e65 100644 --- a/conf/distro/include/angstrom-glibc.inc +++ b/conf/distro/include/angstrom-glibc.inc @@ -29,6 +29,8 @@ FULL_OPTIMIZATION_pn-glibc-intermediate = "-O2" FULL_OPTIMIZATION_pn-glibc = "-fexpensive-optimizations -fomit-frame-pointer -O2" FULL_OPTIMIZATION_sparc = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2" +FULL_OPTIMIZATION_pn-glibc_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -ftree-vectorize -O3" + BUILD_OPTIMIZATION = "-Os" BUILD_OPTIMIZATION_pn-perl = "-O1" BUILD_OPTIMIZATION_pn-glibc-intermediate = "-O2" diff --git a/packages/glibc/glibc_2.6.1.bb b/packages/glibc/glibc_2.6.1.bb index 5069ea19e2..8ee658c286 100644 --- a/packages/glibc/glibc_2.6.1.bb +++ b/packages/glibc/glibc_2.6.1.bb @@ -1,5 +1,5 @@ require glibc.inc -PR = "r6" +PR = "r7" ARM_INSTRUCTION_SET = "arm" -- cgit v1.2.3 From e0241d95b58de6c11be24f2aa0d90db3a5e44b50 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 10:39:01 +0000 Subject: initscripts: do not poke at /proc/cpu/alignment on armv7, it slows libavcodec down with 50% --- packages/initscripts/initscripts-1.0/arm/alignment.sh | 2 +- packages/initscripts/initscripts_1.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/initscripts/initscripts-1.0/arm/alignment.sh b/packages/initscripts/initscripts-1.0/arm/alignment.sh index 4a66dc6bc8..256f30cb8d 100644 --- a/packages/initscripts/initscripts-1.0/arm/alignment.sh +++ b/packages/initscripts/initscripts-1.0/arm/alignment.sh @@ -1,6 +1,6 @@ #!/bin/sh -if [ -e /proc/cpu/alignment ]; then +if [ -e /proc/cpu/alignment ] && ! [ $(uname -m) = "armv7l: ]; then echo "3" > /proc/cpu/alignment fi diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb index 55998c0a4a..242e85086e 100644 --- a/packages/initscripts/initscripts_1.0.bb +++ b/packages/initscripts/initscripts_1.0.bb @@ -4,7 +4,7 @@ PRIORITY = "required" DEPENDS = "makedevs" RDEPENDS = "makedevs" LICENSE = "GPL" -PR = "r105" +PR = "r106" SRC_URI = "file://functions \ file://halt \ -- cgit v1.2.3 From ae8ead4c8dc5faa6ca85f92fc0d919d3280757e6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 10:42:35 +0000 Subject: initscripts: fix typo in previous commit --- packages/initscripts/initscripts-1.0/arm/alignment.sh | 2 +- packages/initscripts/initscripts_1.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/initscripts/initscripts-1.0/arm/alignment.sh b/packages/initscripts/initscripts-1.0/arm/alignment.sh index 256f30cb8d..32a9eaace2 100644 --- a/packages/initscripts/initscripts-1.0/arm/alignment.sh +++ b/packages/initscripts/initscripts-1.0/arm/alignment.sh @@ -1,6 +1,6 @@ #!/bin/sh -if [ -e /proc/cpu/alignment ] && ! [ $(uname -m) = "armv7l: ]; then +if [ -e /proc/cpu/alignment ] && ! [ $(uname -m) = "armv7l" ]; then echo "3" > /proc/cpu/alignment fi diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb index 242e85086e..6d4b7e6ea5 100644 --- a/packages/initscripts/initscripts_1.0.bb +++ b/packages/initscripts/initscripts_1.0.bb @@ -4,7 +4,7 @@ PRIORITY = "required" DEPENDS = "makedevs" RDEPENDS = "makedevs" LICENSE = "GPL" -PR = "r106" +PR = "r107" SRC_URI = "file://functions \ file://halt \ -- cgit v1.2.3 From c20341c603fd6ce74bd2de252e6da5f63a3c0e03 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 12:08:54 +0000 Subject: gnash-minimal: fix depends --- packages/gnash/gnash-minimal.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gnash/gnash-minimal.inc b/packages/gnash/gnash-minimal.inc index 1cd3bc9991..f77ef6ae02 100644 --- a/packages/gnash/gnash-minimal.inc +++ b/packages/gnash/gnash-minimal.inc @@ -1,7 +1,7 @@ DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features" HOMEPAGE = "http://www.gnu.org/software/gnash" LICENSE = "GPL-2" -DEPENDS = "libtool agg libxml2 libmad zlib boost jpeg pango curl freetype" +DEPENDS = "virtual/libiconv virtual/libintl libtool agg libxml2 libmad zlib boost jpeg pango curl freetype" SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gnash/${PV}/gnash-${PV}.tar.bz2" S = ${WORKDIR}/gnash-${PV} -- cgit v1.2.3 From 841650097842ae88fcd78f94c33fb709abe2ec3e Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Sun, 6 Jul 2008 13:24:11 +0000 Subject: linux-omap2 git: make beagle resolution a kconfig option --- .../linux/linux-omap2-git/beagleboard/16bpp.patch | 134 ++++++++++++++++++++- .../linux/linux-omap2-git/beagleboard/defconfig | 6 +- packages/linux/linux-omap2_git.bb | 2 +- 3 files changed, 135 insertions(+), 7 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/16bpp.patch b/packages/linux/linux-omap2-git/beagleboard/16bpp.patch index f1e2181c82..d2bff4b018 100644 --- a/packages/linux/linux-omap2-git/beagleboard/16bpp.patch +++ b/packages/linux/linux-omap2-git/beagleboard/16bpp.patch @@ -1,13 +1,137 @@ +diff --git a/drivers/video/omap/Kconfig b/drivers/video/omap/Kconfig +index bdeb8fb..bf256f3 100644 +--- a/drivers/video/omap/Kconfig ++++ b/drivers/video/omap/Kconfig +@@ -7,6 +7,27 @@ config FB_OMAP + help + Frame buffer driver for OMAP based boards. + ++choice ++ depends on FB_OMAP && MACH_OMAP3_BEAGLE ++ prompt "Screen resolution" ++ default FB_OMAP_079M3R ++ help ++ Selected desired screen resolution ++ ++config FB_OMAP_031M3R ++ boolean "640 x 480 @ 60 Hz Reduced blanking" ++ ++config FB_OMAP_048M3R ++ boolean "800 x 600 @ 60 Hz Reduced blanking" ++ ++config FB_OMAP_079M3R ++ boolean "1024 x 768 @ 60 Hz Reduced blanking" ++ ++config FB_OMAP_092M9R ++ boolean "1280 x 720 @ 60 Hz Reduced blanking" ++ ++endchoice ++ + config FB_OMAP_LCDC_EXTERNAL + bool "External LCD controller support" + depends on FB_OMAP diff --git a/drivers/video/omap/lcd_omap3beagle.c b/drivers/video/omap/lcd_omap3beagle.c -index 69d4e06..c1c4f4c 100644 +index 69d4e06..5e098c2 100644 --- a/drivers/video/omap/lcd_omap3beagle.c +++ b/drivers/video/omap/lcd_omap3beagle.c -@@ -66,7 +66,7 @@ struct lcd_panel omap3beagle_panel = { +@@ -31,10 +31,6 @@ + + #define LCD_PANEL_ENABLE_GPIO 170 + +-#define LCD_XRES 1024 +-#define LCD_YRES 768 +-#define LCD_PIXCLOCK 64000 /* in kHz */ +- + static int omap3beagle_panel_init(struct lcd_panel *panel, + struct omapfb_device *fbdev) + { +@@ -65,19 +61,76 @@ static unsigned long omap3beagle_panel_get_caps(struct lcd_panel *panel) + struct lcd_panel omap3beagle_panel = { .name = "omap3beagle", .config = OMAP_LCDC_PANEL_TFT, - +- - .bpp = 24, + .bpp = 16, .data_lines = 24, - .x_res = LCD_XRES, - .y_res = LCD_YRES, +- .x_res = LCD_XRES, +- .y_res = LCD_YRES, +- .hsw = 3, /* hsync_len (4) - 1 */ +- .hfp = 3, /* right_margin (4) - 1 */ +- .hbp = 39, /* left_margin (40) - 1 */ +- .vsw = 1, /* vsync_len (2) - 1 */ +- .vfp = 2, /* lower_margin */ +- .vbp = 7, /* upper_margin (8) - 1 */ +- +- .pixel_clock = LCD_PIXCLOCK, ++ ++#if defined CONFIG_FB_OMAP_031M3R ++ ++ /* 640 x 480 @ 60 Hz Reduced blanking VESA CVT 0.31M3-R */ ++ .x_res = 640, ++ .y_res = 480, ++ .hfp = 48, ++ .hsw = 32, ++ .hbp = 80, ++ .vfp = 3, ++ .vsw = 4, ++ .vbp = 7, ++ .pixel_clock = 23500, ++ ++#elif defined CONFIG_FB_OMAP_048M3R ++ ++ /* 800 x 600 @ 60 Hz Reduced blanking VESA CVT 0.48M3-R */ ++ .x_res = 800, ++ .y_res = 600, ++ .hfp = 48, ++ .hsw = 32, ++ .hbp = 80, ++ .vfp = 3, ++ .vsw = 4, ++ .vbp = 11, ++ .pixel_clock = 35500, ++ ++#elif defined CONFIG_FB_OMAP_079M3R ++ ++ /* 1024 x 768 @ 60 Hz Reduced blanking VESA CVT 0.79M3-R */ ++ .x_res = 1024, ++ .y_res = 768, ++ .hfp = 48, ++ .hsw = 32, ++ .hbp = 80, ++ .vfp = 3, ++ .vsw = 4, ++ .vbp = 15, ++ .pixel_clock = 56000, ++ ++#elif defined CONFIG_FB_OMAP_092M9R ++ ++ /* 1280 x 720 @ 60 Hz Reduced blanking VESA CVT 0.92M9-R */ ++ .x_res = 1280, ++ .y_res = 720, ++ .hfp = 48, ++ .hsw = 32, ++ .hbp = 80, ++ .vfp = 3, ++ .vsw = 5, ++ .vbp = 13, ++ .pixel_clock = 64000, ++ ++#else ++ ++ /* use 640 x 480 if no config option */ ++ /* 640 x 480 @ 60 Hz Reduced blanking VESA CVT 0.31M3-R */ ++ .x_res = 640, ++ .y_res = 480, ++ .hfp = 48, ++ .hsw = 32, ++ .hbp = 80, ++ .vfp = 3, ++ .vsw = 4, ++ .vbp = 7, ++ .pixel_clock = 23500, ++ ++#endif + + .init = omap3beagle_panel_init, + .cleanup = omap3beagle_panel_cleanup, + diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 87fadae1ec..fa11eefc3c 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.26-rc8-omap1 -# Fri Jul 4 09:57:18 2008 +# Sun Jul 6 15:22:47 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1225,6 +1225,10 @@ CONFIG_FB_CFB_IMAGEBLIT=y # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_VIRTUAL is not set CONFIG_FB_OMAP=y +# CONFIG_FB_OMAP_031M3R is not set +# CONFIG_FB_OMAP_048M3R is not set +CONFIG_FB_OMAP_079M3R=y +# CONFIG_FB_OMAP_092M9R is not set # CONFIG_FB_OMAP_LCDC_EXTERNAL is not set # CONFIG_FB_OMAP_BOOTLOADER_INIT is not set CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=4 diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 5307629282..0fcda6d6ad 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "c32c81d59d2d8a66e63f82c9732db256d302068e" PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" -PR = "r38" +PR = "r39" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" -- cgit v1.2.3 From 489818982112b33b8dc16d090a038d29d4676d73 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 15:47:20 +0000 Subject: bitbake.conf: fix PARALLEL_MAKE, it hasn't been working lately. Patch by Richard Purdie --- conf/bitbake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index c3263390d3..b5b25407c3 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -380,7 +380,7 @@ export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}${layout_libdir} \ ALLOWED_FLAGS = "-O -mcpu -march -pipe" # Pass parallel make options to the compile task only -EXTRA_OEMAKE_prepend_task_do_compile = "${PARALLEL_MAKE} " +EXTRA_OEMAKE_prepend_task-compile = "${PARALLEL_MAKE} " ################################################################## # Optimization flags. -- cgit v1.2.3 From 0cae9a73a640976cef67acae14d1b167219b0fbe Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 18:57:09 +0000 Subject: sl: fix parse error --- packages/sl/sl_3.03.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sl/sl_3.03.bb b/packages/sl/sl_3.03.bb index 883a48f67e..4b9061dd2e 100644 --- a/packages/sl/sl_3.03.bb +++ b/packages/sl/sl_3.03.bb @@ -1,4 +1,4 @@ -DESCRIPTION = "Corrects you if you type `sl' by mistake" +DESCRIPTION = "Corrects you if you type sl by mistake" SECTION = "console/games" LICENSE = "unknown" DEPENDS = "ncurses" @@ -8,7 +8,7 @@ SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/universe/s/sl/sl_3.03.orig.tar. S = "${WORKDIR}/${P}.orig" -LDFLAGS += "-lcurses" +LDFLAGS += "-lncurses" do_install() { install -d ${D}${bindir} -- cgit v1.2.3 From c4bb19566b06e30834f1615dda6fc1e4a9be1364 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 6 Jul 2008 18:59:16 +0000 Subject: beagleboard demo image: add swfdec-mozilla --- packages/images/beagleboard-demo-image.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/images/beagleboard-demo-image.bb b/packages/images/beagleboard-demo-image.bb index fa211a0a97..67632ff0a9 100644 --- a/packages/images/beagleboard-demo-image.bb +++ b/packages/images/beagleboard-demo-image.bb @@ -19,7 +19,8 @@ IMAGE_INSTALL = "\ psplash \ e-wm exhibit \ xterm xmms epiphany-firefox-replacement \ - hicolor-icon-theme gnome-icon-theme \ + swfdec-mozilla \ + hicolor-icon-theme gnome-icon-theme \ jaaa nmap iperf gnuplot \ abiword \ # gnumeric \ -- cgit v1.2.3 From 472b375a618202fc4a91b1885f349eb7d10ea361 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 12:42:00 +0000 Subject: dsplink: fix dependencies --- packages/dsplink/dsplink.inc | 3 ++- packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 2fa4aae8e0..5fdbd1de90 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -1,7 +1,8 @@ DESCRIPTION = "DSP Link for TI ARM/DSP processors" DEPENDS = "virtual/kernel perl-native" -RDEPENDS = "update-modules" +RDEPENDS_${PN}-module = "update-modules" +RRECOMMENDS_${PN} = "${PN}-module" inherit module diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index c1b6f15694..80088d1ddf 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r4" +PR = "r5" PE = "1" PV = "1.50" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 02c04aa054..922e311256 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r1" +PR = "r2" PE = "1" PV = "1.51" -- cgit v1.2.3 From 9eb0e6caf772b1fbe9739dd938cddb3f4b56860f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 12:42:30 +0000 Subject: dsplink test image: add image for testing TI dsplink --- packages/images/dsplink-test-image.bb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/images/dsplink-test-image.bb diff --git a/packages/images/dsplink-test-image.bb b/packages/images/dsplink-test-image.bb new file mode 100644 index 0000000000..10c3401e1f --- /dev/null +++ b/packages/images/dsplink-test-image.bb @@ -0,0 +1,7 @@ +# This image is a bare-bones image to test the TI dsplink modules + +require minimal-image.bb +IMAGE_INSTALL += "dsplink" + +export IMAGE_BASENAME = "dsplink-testing-image" + -- cgit v1.2.3 From f83a39a86796a5d84a489131efb8c244697d4a8d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 14:20:09 +0000 Subject: neuros-osd2: add (disabled) framework for creating ready-to-flash upk images --- conf/machine/neuros-osd2.conf | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf index 4a540270f4..a34be81b2e 100644 --- a/conf/machine/neuros-osd2.conf +++ b/conf/machine/neuros-osd2.conf @@ -20,9 +20,34 @@ PREFERRED_VERSION_u-boot = "git" SERIAL_CONSOLE ?= "115200 ttyS0" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" +IMAGE_FSTYPES += "jffs2 yaffs2" + ROOT_FLASH_SIZE = "29" MACHINE_FEATURES = "kernel26 pcmcia usbhost screen" require conf/machine/include/tune-arm926ejs.inc +#MACHINE_POSTPROCESS_COMMAND = "neuros_make_installkit" + +neuros_make_installkit () { + cd ${DEPLOY_DIR_IMAGE} + rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ + mkdir -p ${IMAGE_NAME}-installkit/temp + + # Get the latest kernel and u-boot using the foo-.bin symlinks + cp uImage-${MACHINE}.bin ${IMAGE_NAME}-installkit/temp/uImage + cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin + cp default_env.img ${IMAGE_NAME}-installkit/ + + cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/initrd.bin + + cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ + mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n + packet_osd2 osd20.pkg '${DISTRO} Developer UPK' default_env.img u-boot.bin uImage.jffs2 rootfs.yaffs2 ) + cd ${DEPLOY_DIR_IMAGE} + + cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/osd20.pkg ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-osd20.pkg + rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ +} + -- cgit v1.2.3 From aa5f46f3e76276ae2e5589a0bfd78568c9321b56 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 18:54:02 +0000 Subject: neuros-osd2: set uboot machine --- conf/machine/neuros-osd2.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf index a34be81b2e..c101b75782 100644 --- a/conf/machine/neuros-osd2.conf +++ b/conf/machine/neuros-osd2.conf @@ -15,7 +15,7 @@ UBOOT_ENTRYPOINT = "0x80008000" UBOOT_LOADADDRESS = "0x80008000" PREFERRED_VERSION_u-boot = "git" -#UBOOT_MACHINE = "davinci_dvevm_config" +UBOOT_MACHINE = "davinci_ntosd-644x" SERIAL_CONSOLE ?= "115200 ttyS0" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" -- cgit v1.2.3 From 9309b934b99abff81ceefc6015185cf41f75a833 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 7 Jul 2008 19:05:40 +0000 Subject: add mdbus, a convenient dbus introspection/interaction console utility --- conf/distro/include/fso-autorev.inc | 1 + conf/distro/include/sane-srcrevs.inc | 1 + packages/freesmartphone/mickeydbus_git.bb | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 packages/freesmartphone/mickeydbus_git.bb diff --git a/conf/distro/include/fso-autorev.inc b/conf/distro/include/fso-autorev.inc index da6dafd6bc..33380b6dd4 100644 --- a/conf/distro/include/fso-autorev.inc +++ b/conf/distro/include/fso-autorev.inc @@ -2,6 +2,7 @@ SRCREV_pn-frameworkd = "${AUTOREV}" SRCREV_pn-gsm0710muxd = "${AUTOREV}" SRCREV_pn-gsmd2 = "${AUTOREV}" SRCREV_pn-pygsm = "${AUTOREV}" +SRCREV_pn-mickeydbus = "${AUTOREV}" SRCREV_pn-mickeyterm = "${AUTOREV}" SRCREV_pn-pyneod = "${AUTOREV}" SRCREV_pn-pynoeg = "${AUTOREV}" diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 6e5ca31d8b..fcae48f974 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -81,6 +81,7 @@ SRCREV_pn-matchbox-keyboard ?= "1910" SRCREV_pn-matchbox-keyboard-inputmethod ?= "1910" SRCREV_pn-matchbox-panel-2 ?= "1626" SRCREV_pn-matchbox-stroke ?= "1820" +SRCREV_pn-mickeydbus ?= "5cf2a90d86601b2666b4634784853fb51d0d5896" SRCREV_pn-mickeyterm ?= "af7c48d424f9c03f7aa8979f1c06e3b2c70acdff" SRCREV_pn-moko-gtk-engine ?= "3612" SRCREV_pn-mpd-alsa ?= "6952" diff --git a/packages/freesmartphone/mickeydbus_git.bb b/packages/freesmartphone/mickeydbus_git.bb new file mode 100644 index 0000000000..cbd90e5030 --- /dev/null +++ b/packages/freesmartphone/mickeydbus_git.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Mickey's DBus introspection and calling Program" +AUTHOR = "Michael 'Mickey' Lauer " +SECTION = "console/network" +LICENSE = "GPLv2" +PV = "0.9.0+gitr${SRCREV}" +PR = "r0" + +SRC_URI = "${FREESMARTPHONE_GIT}/python-helpers.git;protocol=git;branch=master" +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${bindir} + install -m 0755 mickeydbus/mdbus ${D}${bindir} +} + +RDEPENDS_${PN} = "\ + python-dbus \ +" -- cgit v1.2.3 From eb2c55d18aec83945069c47dd205bcb857318964 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 19:41:19 +0000 Subject: neuros-osd2: fix typo --- conf/machine/neuros-osd2.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf index c101b75782..a1d8c9bebd 100644 --- a/conf/machine/neuros-osd2.conf +++ b/conf/machine/neuros-osd2.conf @@ -44,7 +44,7 @@ neuros_make_installkit () { cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n - packet_osd2 osd20.pkg '${DISTRO} Developer UPK' default_env.img u-boot.bin uImage.jffs2 rootfs.yaffs2 ) + packet_osd2 osd20.pkg '${DISTRO} Developer UPK' default_env.img u-boot.bin uImage.jffs2 rootfs.yaffs2 cd ${DEPLOY_DIR_IMAGE} cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/osd20.pkg ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-osd20.pkg -- cgit v1.2.3 From f20b74ae9176a7c3afe0c204ce03e8a22dbb8999 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 19:55:29 +0000 Subject: neuros osd2: move upk to .inc so osd1 can use it as well --- conf/machine/include/neuros.inc | 23 +++++++++++++++++++++++ conf/machine/neuros-osd2.conf | 26 ++------------------------ 2 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 conf/machine/include/neuros.inc diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc new file mode 100644 index 0000000000..ae3cd4ba32 --- /dev/null +++ b/conf/machine/include/neuros.inc @@ -0,0 +1,23 @@ +MACHINE_POSTPROCESS_COMMAND = "neuros_make_installkit" + +neuros_make_installkit () { + cd ${DEPLOY_DIR_IMAGE} + rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ + mkdir -p ${IMAGE_NAME}-installkit/temp + + # Get the latest kernel and u-boot using the foo-.bin symlinks + cp uImage-${MACHINE}.bin ${IMAGE_NAME}-installkit/temp/uImage + cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin + cp default_env.img ${IMAGE_NAME}-installkit/ + + cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/initrd.bin + + cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ + mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n + packet_osd2 osd20.pkg '${DISTRO} Developer UPK' default_env.img u-boot.bin uImage.jffs2 rootfs.yaffs2 + cd ${DEPLOY_DIR_IMAGE} + + cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/osd20.pkg ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-osd20.pkg + rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ +} + diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf index a1d8c9bebd..4ac165b9a4 100644 --- a/conf/machine/neuros-osd2.conf +++ b/conf/machine/neuros-osd2.conf @@ -15,7 +15,7 @@ UBOOT_ENTRYPOINT = "0x80008000" UBOOT_LOADADDRESS = "0x80008000" PREFERRED_VERSION_u-boot = "git" -UBOOT_MACHINE = "davinci_ntosd-644x" +UBOOT_MACHINE = "davinci_ntosd-644x_config" SERIAL_CONSOLE ?= "115200 ttyS0" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" @@ -27,27 +27,5 @@ ROOT_FLASH_SIZE = "29" MACHINE_FEATURES = "kernel26 pcmcia usbhost screen" require conf/machine/include/tune-arm926ejs.inc - -#MACHINE_POSTPROCESS_COMMAND = "neuros_make_installkit" - -neuros_make_installkit () { - cd ${DEPLOY_DIR_IMAGE} - rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ - mkdir -p ${IMAGE_NAME}-installkit/temp - - # Get the latest kernel and u-boot using the foo-.bin symlinks - cp uImage-${MACHINE}.bin ${IMAGE_NAME}-installkit/temp/uImage - cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin - cp default_env.img ${IMAGE_NAME}-installkit/ - - cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/initrd.bin - - cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ - mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n - packet_osd2 osd20.pkg '${DISTRO} Developer UPK' default_env.img u-boot.bin uImage.jffs2 rootfs.yaffs2 - cd ${DEPLOY_DIR_IMAGE} - - cp ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/osd20.pkg ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-osd20.pkg - rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ -} +require conf/machine/include/neuros.inc -- cgit v1.2.3 From 6ecdb20988f586bf477b0a91ea7c082df66d9b9a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 20:01:28 +0000 Subject: neuros osd2: really set uboot machine correctly... --- conf/machine/neuros-osd2.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf index 4ac165b9a4..89e14ce363 100644 --- a/conf/machine/neuros-osd2.conf +++ b/conf/machine/neuros-osd2.conf @@ -15,7 +15,7 @@ UBOOT_ENTRYPOINT = "0x80008000" UBOOT_LOADADDRESS = "0x80008000" PREFERRED_VERSION_u-boot = "git" -UBOOT_MACHINE = "davinci_ntosd-644x_config" +UBOOT_MACHINE = "davinci_ntosd_644xA_config" SERIAL_CONSOLE ?= "115200 ttyS0" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n" -- cgit v1.2.3 From 580c975709ae44f21ae44c99058068dce5b29ffb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 20:15:21 +0000 Subject: u-boot git: add support for neuros-osd2 --- packages/u-boot/files/Makefile-fix.patch | 25 +++++++++++++++++++++++++ packages/u-boot/u-boot_git.bb | 7 +++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 packages/u-boot/files/Makefile-fix.patch diff --git a/packages/u-boot/files/Makefile-fix.patch b/packages/u-boot/files/Makefile-fix.patch new file mode 100644 index 0000000000..fccf19c63d --- /dev/null +++ b/packages/u-boot/files/Makefile-fix.patch @@ -0,0 +1,25 @@ +--- /tmp/Makefile 2008-07-07 20:48:41.000000000 +0200 ++++ git/Makefile 2008-07-07 20:49:22.000000000 +0200 +@@ -21,10 +21,6 @@ + # MA 02111-1307 USA + # + +-ifndef PRJROOT +-$(error You must first source the BSP environment: "source neuros-env") +-endif +- + VERSION = 1 + PATCHLEVEL = 3 + SUBLEVEL = 2 +@@ -417,11 +413,6 @@ + grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ + sort > $(obj)System.map + +-install: u-boot.bin u-boot +- @install -p u-boot.bin $(PRJROOT)/images/ > /dev/null +- @install -p u-boot $(PRJROOT)/images/ > /dev/null +- @install uboot_desc $(PRJROOT)/images/ > /dev/null +- + # + # Auto-generate the autoconf.mk file (which is included by all makefiles) + # diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index c201eced37..32634dfa00 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,12 +1,13 @@ require u-boot.inc -PR="r6" +PR="r7" SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" SRCREV_beagleboard = "a94f22f08f280905926219e568568964cb9eeb9d" +SRCREV_neuros-osd2 = "482dfe48845192c7f810bccfc93db93d0f1654f7" SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git " SRC_URI_sequoia = "git://www.denx.de/git/u-boot.git;protocol=git;tag=cf3b41e0c1111dbb865b6e34e9f3c3d3145a6093 " - +SRC_URI_neuros-osd2 = "git://git.neurostechnology.com/git/u-boot;protocol=git;branch=neuros" SRC_URI_append_davinci-sffsdr = " file://sffsdr-u-boot.patch;patch=1 " SRC_URI_append_beagleboard = "file://base.patch;patch=1 \ @@ -14,6 +15,8 @@ SRC_URI_append_beagleboard = "file://base.patch;patch=1 \ file://armv7-a.patch;patch=1 \ " +SRC_URI_neuros-osd2 += "file://Makefile-fix.patch;patch=1" + S = "${WORKDIR}/git" PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From de146d9244042609a485b4906ffdcf57864c0f07 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 20:32:26 +0000 Subject: u-boot-env: dummy package to generate a script for setting up the default environment in u-boot --- packages/u-boot/files/neuros-osd2/.mtn2git_empty | 0 packages/u-boot/files/neuros-osd2/default-env.ascr | 55 ++++++++++++++++++++++ packages/u-boot/u-boot-env.bb | 21 +++++++++ 3 files changed, 76 insertions(+) create mode 100644 packages/u-boot/files/neuros-osd2/.mtn2git_empty create mode 100644 packages/u-boot/files/neuros-osd2/default-env.ascr create mode 100644 packages/u-boot/u-boot-env.bb diff --git a/packages/u-boot/files/neuros-osd2/.mtn2git_empty b/packages/u-boot/files/neuros-osd2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/u-boot/files/neuros-osd2/default-env.ascr b/packages/u-boot/files/neuros-osd2/default-env.ascr new file mode 100644 index 0000000000..965f778b44 --- /dev/null +++ b/packages/u-boot/files/neuros-osd2/default-env.ascr @@ -0,0 +1,55 @@ +setenv loadaddr 0x82000000 +setenv ubootaddr 0x82000800 +setenv tftp_root /images +setenv nfs_root /home/user/rootfs/fs +setenv bootfile uImage + +setenv defenv_fname default_env.img +setenv defenv_loc /images/default_env.img +setenv defenv_loc_cmd setenv defenv_loc \$(tftp_root)/\$(defenv_fname) + +setenv uboot_fname u-boot.bin +setenv uboot_loc /images/u-boot.bin +setenv uboot_loc_cmd setenv uboot_loc \$(tftp_root)/\$(uboot_fname)\;setenv uboot_desc \$(tftp_root)/uboot_desc + +setenv kernel_fname uImage +setenv kernel_loc /images/uImage +setenv kernel_loc_cmd setenv kernel_loc \$(tftp_root)/\$(kernel_fname) + +setenv jffs2_fname uImage.jffs2 +setenv jffs2_loc /images/uImage.jffs2 +setenv jffs2_loc_cmd setenv jffs2_loc \$(tftp_root)/\$(jffs2_fname) + +setenv rootfs_fname rootfs.yaffs2 +setenv rootfs_loc /images/rootfs.yaffs2 +setenv rootfs_loc_cmd setenv rootfs_loc \$(tftp_root)/\$(rootfs_fname) + +setenv rootfs_nfs_loc /rootfs/fs +setenv rootfs_nfs_loc_cmd setenv rootfs_nfs_loc \$(nfs_root) + +setenv console console=ttyS0,115200n8 + +setenv mem_reserve mem=200M + +setenv video_params video=davincifb:output=ntsc:format=composite + +setenv ip ip=\192.168.1.100:\192.168.1.1:\192.168.1.1:\255.255.255.0:\neuros::off + +setenv nfs_mount_params udp,v3,rsize=4096,wsize=4096 +setenv nfs_cmd setenv bootargs \$(console) root=/dev/nfs rw nfsroot=\$(serverip):\$(rootfs_nfs_loc),\$(nfs_mount_params) \$(ip) \$(mem_reserve) \$(video_params) +setenv yaffs_cmd setenv bootargs \$(console) root=/dev/mtdblock4 rw \$(ip) \$(mem_reserve) \$(video_params) + +setenv update-locs run uboot_loc_cmd\;run kernel_loc_cmd\;run jffs2_loc_cmd\;run defenv_loc_cmd\;run rootfs_nfs_loc_cmd\;saveenv +setenv update-defenv run defenv_loc_cmd\;tftp \$(loadaddr) \$(defenv_loc)\;setenv filesize\;autoscr \$(loadaddr)\;run update-locs +setenv update-uboot run uboot_loc_cmd\;tftp \$(loadaddr) \$(uboot_desc)\;tftp \$(ubootaddr) \$(uboot_loc)\;setenv filesize\;nand erase c0000 c0000\;nand write \$(loadaddr) c0000 c0000 +setenv update-kernel run jffs2_loc_cmd\;tftp \$(loadaddr) \$(jffs2_loc)\;setenv filesize\;nand erase 1c0000 500000\;nand write.jffs2 \$(loadaddr) 1c0000 500000 +setenv update-rootfs run rootfs_loc_cmd\;tftp \$(loadaddr) \$(rootfs_loc)\;nand erase 6c0000\;nand write.yaffs \$(loadaddr) 6c0000 \$(filesize)\;setenv filesize + +setenv update-ipdhcp setenv ip ip=::::\$(hostname)::dhcp\;saveenv +setenv update-ipstatic setenv ip ip=\$(ipaddr):\$(serverip):\$(gatewayip):\$(netmask):\$(hostname)::off\;saveenv + +setenv devboot tftp \$(loadaddr) \$(uboot_loc)\;setenv filesize\;go \$(loadaddr) +setenv devkernel run nfs_cmd\;tftp \$(loadaddr) \$(kernel_loc)\;setenv filesize\;bootm \$(loadaddr) +setenv yaffs_boot run yaffs_cmd\;fsload \$(loadaddr) \$(bootfile)\;bootm \$(loadaddr) + +setenv bootcmd run yaffs_boot diff --git a/packages/u-boot/u-boot-env.bb b/packages/u-boot/u-boot-env.bb new file mode 100644 index 0000000000..fc4d64ad78 --- /dev/null +++ b/packages/u-boot/u-boot-env.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "Dummy package to get uboot env image into deploy" + +inherit kernel-arch + +SRC_URI = "file://default-env.ascr" + + +do_compile() { + cp ${WORKDIR}/default-env.ascr ${S} + uboot-mkimage -A ${UBOOT_ARCH} -O linux -T script -C none -a 0 -e 0 -n "${DISTRO_NAME}/${MACHINE} env script" -d default-env.ascr default_env.img +} + +do_stage() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 ${S}/default_env.img ${DEPLOY_DIR_IMAGE}/ + package_stagefile_shell ${DEPLOY_DIR_IMAGE}/default_env.img + +} + + +PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3 From f556eb47ca170da06fc44bc6ea96e41d1e2f496d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 20:45:00 +0000 Subject: neuros-pkggen native: add tool to generate ready to flash upk images --- packages/neuros-pkggen/.mtn2git_empty | 0 packages/neuros-pkggen/files/.mtn2git_empty | 0 packages/neuros-pkggen/files/Makefile | 68 ++++ packages/neuros-pkggen/files/Makefile.rules | 18 + packages/neuros-pkggen/files/config | 40 +++ packages/neuros-pkggen/files/crc32.c | 198 +++++++++++ packages/neuros-pkggen/files/package.c | 410 +++++++++++++++++++++++ packages/neuros-pkggen/files/package.h | 145 +++++++++ packages/neuros-pkggen/files/readme | 20 ++ packages/neuros-pkggen/files/zlib.h | 434 +++++++++++++++++++++++++ packages/neuros-pkggen/neuros-pkggen-native.bb | 24 ++ 11 files changed, 1357 insertions(+) create mode 100644 packages/neuros-pkggen/.mtn2git_empty create mode 100644 packages/neuros-pkggen/files/.mtn2git_empty create mode 100644 packages/neuros-pkggen/files/Makefile create mode 100644 packages/neuros-pkggen/files/Makefile.rules create mode 100644 packages/neuros-pkggen/files/config create mode 100644 packages/neuros-pkggen/files/crc32.c create mode 100644 packages/neuros-pkggen/files/package.c create mode 100644 packages/neuros-pkggen/files/package.h create mode 100644 packages/neuros-pkggen/files/readme create mode 100644 packages/neuros-pkggen/files/zlib.h create mode 100644 packages/neuros-pkggen/neuros-pkggen-native.bb diff --git a/packages/neuros-pkggen/.mtn2git_empty b/packages/neuros-pkggen/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/neuros-pkggen/files/.mtn2git_empty b/packages/neuros-pkggen/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/neuros-pkggen/files/Makefile b/packages/neuros-pkggen/files/Makefile new file mode 100644 index 0000000000..fed6835d06 --- /dev/null +++ b/packages/neuros-pkggen/files/Makefile @@ -0,0 +1,68 @@ +# * Copyright(C) 2007 Neuros Technology International LLC. +# * +# * +# * ubootcmd application make file..............TQ 2007-02-05 + + +# include system config +include config + + +# executable name +NT_PACKET := packet_osd2 + + +# project directories +PACKET_DIR_ROOT := . + +# compiler flags +CFLAGS += $(DEFINES) -Wall -Werror + +# object files +OBJS := package.o crc32.o + +# build all +.PHONY: all +all: $(NT_PACKET) + +$(NT_PACKET): $(OBJS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) + +# install +install: $(NT_PACKET) + @echo + @echo "Installing $(NT_PACKET) ... " + @cp $(NT_PACKET) $(BSP_ROOT)/images/ + @echo + +# clean up project +.PHONY: clean + +clean: + @echo + @rm -f $(NT_PACKET) + @for dir in $(PACKET_DIR_ROOT); do \ + echo "Entering $$dir ..."; \ + for file in $$dir/*~ $$dir/*.o $$dir/*.d; do \ + if [ -f $$file ]; then \ + echo "removing $$file"; \ + rm $$file; \ + fi; \ + done; \ + done + @echo + +# include the C include dependencies +-include $(OBJS:.o=.d) + + +# calculate C inlcude dependencies +%.d: %.c + @set -e; rm -f $@; \ + $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ + + +# include make rules. +include Makefile.rules diff --git a/packages/neuros-pkggen/files/Makefile.rules b/packages/neuros-pkggen/files/Makefile.rules new file mode 100644 index 0000000000..17550c5e39 --- /dev/null +++ b/packages/neuros-pkggen/files/Makefile.rules @@ -0,0 +1,18 @@ +# * Copyright(C) 2007 Neuros Technology International LLC. +# * +# * +# * Terminal application make rules..........TQ 2007-02-05 + +## build target config. +ifeq ($(BUILD_TARGET), ARM) +DEFINES += -DBUILD_TARGET_ARM=1 +else +DEFINES += -DBUILD_TARGET_ARM=0 +endif + +## global test code switch. +ifeq ($(INCLUDE_TEST_CODE), YES) +DEFINES += -DTERMINAL_TEST_CODE=1 +else +DEFINES += -DTERMINAL_TEST_CODE=0 +endif diff --git a/packages/neuros-pkggen/files/config b/packages/neuros-pkggen/files/config new file mode 100644 index 0000000000..d323978b6d --- /dev/null +++ b/packages/neuros-pkggen/files/config @@ -0,0 +1,40 @@ +# * Copyright(C) 2007 Neuros Technology International LLC. +# * +# * +# * Terminal application config file.........TQ 2007-02-05 + +# build target +# ARM -- Neuros hardware. +# HOST -- Host PC +BUILD_TARGET := HOST + +# global test code switch +# YES -- include test code +# NO -- exclude all test code +INCLUDE_TEST_CODE:= NO + +# BSP root directory +BSP_ROOT := $(PRJROOT) + + +# setting up tools etc. +ifeq ($(BUILD_TARGET), ARM) + TOOLS_PREFIX :=arm-linux- + PROJ_TERMINAL_ENV :="--ARM--" + TOOLS_PATH :=${PATH}:${BSP_ROOT}/toolchain/bin +endif +ifeq ($(BUILD_TARGET), HOST) + TOOLS_PREFIX:= + PROJ_TERMINAL_ENV="--HOST--" + TOOLS_PATH :=${PATH} +endif +PATH:=${TOOLS_PATH} + + +# tools definition +CC := $(TOOLS_PREFIX)gcc +CXX := $(TOOLS_PREFIX)g++ +AR := $(TOOLS_PREFIX)ar +LD := $(TOOLS_PREFIX)ld +NM := $(TOOLS_PREFIX)nm +STRIP := $(TOOLS_PREFIX)strip diff --git a/packages/neuros-pkggen/files/crc32.c b/packages/neuros-pkggen/files/crc32.c new file mode 100644 index 0000000000..995a11413d --- /dev/null +++ b/packages/neuros-pkggen/files/crc32.c @@ -0,0 +1,198 @@ +/* + * This file is derived from crc32.c from the zlib-1.1.3 distribution + * by Jean-loup Gailly and Mark Adler. + */ + +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-1998 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ +#if 0 +#ifndef USE_HOSTCC /* Shut down "ANSI does not permit..." warnings */ +#include /* to get command definitions like CFG_CMD_JFFS2 */ +#endif +#endif + +#include "zlib.h" + +#define local static +#define ZEXPORT /* empty */ +unsigned long crc32 (unsigned long, const unsigned char *, unsigned int); + +#ifdef DYNAMIC_CRC_TABLE + +local int crc_table_empty = 1; +local uLongf crc_table[256]; +local void make_crc_table OF((void)); + +/* + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. +*/ +local void make_crc_table() +{ + uLong c; + int n, k; + uLong poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* make exclusive-or pattern from polynomial (0xedb88320L) */ + poly = 0L; + for (n = 0; n < sizeof(p)/sizeof(Byte); n++) + poly |= 1L << (31 - p[n]); + + for (n = 0; n < 256; n++) + { + c = (uLong)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[n] = c; + } + crc_table_empty = 0; +} +#else +/* ======================================================================== + * Table of CRC-32's of all single-byte values (made by make_crc_table) + */ +local const uLongf crc_table[256] = { + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL +}; +#endif + +#if 0 +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const uLongf * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) make_crc_table(); +#endif + return (const uLongf *)crc_table; +} +#endif + +/* ========================================================================= */ +#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8); +#define DO2(buf) DO1(buf); DO1(buf); +#define DO4(buf) DO2(buf); DO2(buf); +#define DO8(buf) DO4(buf); DO4(buf); + +/* ========================================================================= */ +uLong ZEXPORT crc32(crc, buf, len) + uLong crc; + const Bytef *buf; + uInt len; +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif + crc = crc ^ 0xffffffffL; + while (len >= 8) + { + DO8(buf); + len -= 8; + } + if (len) do { + DO1(buf); + } while (--len); + return crc ^ 0xffffffffL; +} + +#if (CONFIG_COMMANDS & CFG_CMD_JFFS2) + +/* No ones complement version. JFFS2 (and other things ?) + * don't use ones compliment in their CRC calculations. + */ +uLong ZEXPORT crc32_no_comp(uLong crc, const Bytef *buf, uInt len) +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif + while (len >= 8) + { + DO8(buf); + len -= 8; + } + if (len) do { + DO1(buf); + } while (--len); + + return crc; +} + +#endif /* CFG_CMD_JFFS2 */ diff --git a/packages/neuros-pkggen/files/package.c b/packages/neuros-pkggen/files/package.c new file mode 100644 index 0000000000..853d4384db --- /dev/null +++ b/packages/neuros-pkggen/files/package.c @@ -0,0 +1,410 @@ +/* + * Copyright(C) 2005 Neuros Technology International LLC. + * + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that, in addition to its + * original purpose to support Neuros hardware, it will be useful + * otherwise, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + *****************************************************************************/ +/** package.c + * + * This file for packaging some images to one package. + * The package is named r3.upk. + * + * 02/22/2005 T.Qiu + * Initial creation. + * 11/07/2007 T.Qiu + * change follow the new UPK structure + * 05/15/2008 JWU + * change for osd2.0 + */ + +#include +#include +#include +#include "package.h" + +#define RETRYTIMES 15 +#define VER_LIMIT_LEN 14 +#define VER_HW2_LEN 4 +#define SAFE_SIZE (250*1024*1024) //250MB + +static package_header_t p_head; +static image_info_t i_info[10]; + +static void print_image_info(image_info_t *iif) +{ + printf("iif->i_type: %x\n", iif->i_type); + printf("iif->i_imagesize: %d\n", iif->i_imagesize); + printf("iif->i_startaddr_p: %d\n", iif->i_startaddr_p); + printf("iif->i_startaddr_f: %x\n", iif->i_startaddr_f); + printf("iif->i_endaddr_f: %x\n", iif->i_endaddr_f); + printf("iif->i_name: %s\n", iif->i_name); + printf("iif->i_version: %s\n", iif->i_version); +} + +static void print_head_info(void) +{ + package_header_t *phd = &p_head; + + printf("phd->p_headsize: %x\n", phd->p_headsize); + printf("phd->p_reserve: %x\n", phd->p_reserve); + printf("phd->p_headcrc: %x\n", phd->p_headcrc); + printf("phd->p_datasize: %d\n", phd->p_datasize); + printf("phd->p_datacrc: %x\n", phd->p_datacrc); + printf("phd->p_name: %s\n", phd->p_name); + printf("phd->p_vuboot: %s\n", phd->p_vuboot); + printf("phd->p_vkernel: %s\n", phd->p_vkernel); + printf("phd->p_vrootfs: %s\n", phd->p_vrootfs); + printf("phd->p_imagenum: %x\n", phd->p_imagenum); +} + +static void print_version_info(version_info *ver_t) +{ + printf("ver_t->upk_desc: %s\n", ver_t->upk_desc); + printf("ver_t->pack_id: %s\n", ver_t->pack_id); + printf("ver_t->os_ver : %s\n", ver_t->os_ver); + printf("ver_t->app_ver: %s\n", ver_t->app_ver); +} + +static int pack_firmware(FILE *fp_w, uint32 offst, int num, char *name[]) +{ + FILE *fp_r; + int i, j; + uint32 curptr, extcrc; + char ch; + package_header_t *phd = &p_head; + image_info_t *iif; + + /* read version file */ + if ((fp_r = fopen(UBOOT_VER_FILE, "rb")) == NULL) + { + printf("Can't open uboot version file: %s\n", UBOOT_VER_FILE); + return(-1); + } + j=0; + while (1) + { + if (feof(fp_r)) break; + if (j > VER_LIMIT_LEN+1) + { + printf("uboot version can't be longer than 14\n"); + goto bail; + } + phd->p_vuboot[j] = fgetc(fp_r); + if ((phd->p_vuboot[j]==0x0d) || (phd->p_vuboot[j]==0x0a)) + phd->p_vuboot[j] = '\0'; + j++; + } + fclose(fp_r); + + if ((fp_r = fopen(KERNEL_VER_FILE, "rb")) == NULL) + { + printf("Can't open kernel version file: %s\n", KERNEL_VER_FILE); + return(-1); + } + j=0; + while (1) + { + if (feof(fp_r)) break; + if (j > VER_LIMIT_LEN+1) + { + printf("kernel version can't be longer than 14\n"); + goto bail; + } + phd->p_vkernel[j]=fgetc(fp_r); + if ((phd->p_vkernel[j]==0x0d) || (phd->p_vkernel[j]==0x0a)) + phd->p_vkernel[j] = '\0'; + j++; + } + fclose(fp_r); + + if ((fp_r = fopen(ROOTFS_VER_FILE, "rb")) == NULL) + { + printf("Can't open rootfs version file: %s\n", ROOTFS_VER_FILE); + return(-1); + } + j=0; + while (1) + { + if (feof(fp_r)) break; + if (j > VER_LIMIT_LEN+1) + { + printf("rootfs version can't be longer than 14\n"); + goto bail; + } + phd->p_vrootfs[j] = fgetc(fp_r); + if ((phd->p_vrootfs[j]==0x0d) ||(phd->p_vrootfs[j]==0x0a)) + phd->p_vrootfs[j] = '\0'; + j++; + } + fclose(fp_r); + + phd->p_imagenum = (uint8)num; + phd->p_headsize = sizeof(package_header_t) + phd->p_imagenum * sizeof(image_info_t); + + /* Bit[3] use to indicate osd2.0 package */ + phd->p_reserve = 0x08; + + phd->p_datasize = 0; + phd->p_datacrc = 0; + phd->p_headcrc = 0; + + curptr = phd->p_headsize + sizeof(version_info); + + for (i=0; i < phd->p_imagenum; i++) + { + /* image info */ + iif = &i_info[i]; + if (strncmp(name[i], ROOTFS_FILE_NAME, strlen(ROOTFS_FILE_NAME)) == 0) + { + iif->i_type = IH_TYPE_ROOTFS; + strncpy((char *)iif->i_name, ROOTFS_FILE_NAME, NAMELEN-1); + + if ((fp_r = fopen(ROOTFS_VER_FILE, "rb")) == NULL) + { + printf("Can't open kernel version file: %s\n", ROOTFS_VER_FILE); + break; + } + for (j = 0; j < sizeof(iif->i_version); j++) + { + if (feof(fp_r)) break; + iif->i_version[j] = fgetc(fp_r); + if ((iif->i_version[j]==0x0d) || (iif->i_version[j]==0x0a)) + iif->i_version[j] = '\0'; + } + fclose(fp_r); + } + else if (strncmp(name[i], KERNEL_FILE_NAME, strlen(KERNEL_FILE_NAME)) == 0) + { + iif->i_type = IH_TYPE_KERNEL; + strncpy((char *)iif->i_name, KERNEL_FILE_NAME, NAMELEN-1); + + if ((fp_r = fopen(KERNEL_VER_FILE, "rb")) == NULL) + { + printf("Can't open kernel version file: %s\n", KERNEL_VER_FILE); + break; + } + for (j = 0; j < sizeof(iif->i_version); j++) + { + if (feof(fp_r)) break; + iif->i_version[j] = fgetc(fp_r); + if ((iif->i_version[j]==0x0d) ||(iif->i_version[j]==0x0a)) + iif->i_version[j] = '\0'; + } + fclose(fp_r); + } + else if (strncmp(name[i], UBOOT_FILE_NAME, strlen(UBOOT_FILE_NAME)) == 0) + { + iif->i_type = IH_TYPE_UBOOT; + strncpy((char *)iif->i_name, UBOOT_FILE_NAME, NAMELEN-1); + + if ((fp_r = fopen(UBOOT_VER_FILE, "rb")) == NULL) + { + printf("Can't open uboot version file: %s\n", UBOOT_VER_FILE); + break; + } + for (j = 0; j < sizeof(iif->i_version); j++) + { + if (feof(fp_r)) break; + iif->i_version[j] = fgetc(fp_r); + if ((iif->i_version[j]==0x0d)|| (iif->i_version[j]==0x0a)) + iif->i_version[j] = '\0'; + } + fclose(fp_r); + } + else if (strncmp(name[i], SCRIPT_FILE_NAME, strlen(SCRIPT_FILE_NAME)) == 0) + { + iif->i_type = IH_TYPE_SCRIPT; + strncpy((char *)iif->i_name, SCRIPT_FILE_NAME, NAMELEN-1); + } + + /* address in flash*/ + switch (iif->i_type) + { + case IH_TYPE_ROOTFS: + iif->i_startaddr_f = ROOTFS_ADDR_START; + iif->i_endaddr_f = ROOTFS_ADDR_END; + break; + case IH_TYPE_KERNEL: + iif->i_startaddr_f = KERNEL_ADDR_START; + iif->i_endaddr_f = KERNEL_ADDR_END; + break; + case IH_TYPE_UBOOT: + iif->i_startaddr_f = UBOOT_ADDR_START; + iif->i_endaddr_f = UBOOT_ADDR_END; + break; + case IH_TYPE_SCRIPT: + break; + default: + printf("un-handle image type\n"); + break; + } + + /* write whole image to package and calculate the imagesize*/ + iif->i_imagesize = 0; + /* images file */ + if ((fp_r = fopen(name[i], "rb")) == NULL) + { + printf("can't open file: %s\n", name[i]); + break; + } + + fseek(fp_w, offst+curptr,SEEK_SET); + extcrc = 0; + while (!feof(fp_r)) + { + ch = fgetc(fp_r); + fputc(ch, fp_w); + phd->p_datacrc = crc32(phd->p_datacrc,(uint8 *)&ch, 1); + iif->i_imagesize ++; + } + fclose(fp_r); + + iif->i_startaddr_p = curptr-sizeof(version_info); + curptr += iif->i_imagesize; + phd->p_datasize += iif->i_imagesize; + + print_image_info(iif); /* print iff*/ + + /*write image info */ + fseek(fp_w, offst+sizeof(version_info)+sizeof(package_header_t)+i*sizeof(image_info_t), SEEK_SET); + if (fwrite(iif, sizeof(image_info_t), 1, fp_w) != 1) + { + printf("can not write iif into package\n"); + break; + } + } + + /* write package head*/ + phd->p_headcrc = crc32(phd->p_headcrc, (uint8 *)phd, sizeof(package_header_t)); + phd->p_headcrc = crc32(phd->p_headcrc, (uint8 *)i_info, phd->p_imagenum*sizeof(image_info_t)); + + print_head_info(); /* print phd */ + + fseek(fp_w, offst+sizeof(version_info), SEEK_SET); + if (fwrite((uint8 *)phd, sizeof(package_header_t), 1, fp_w) != 1) + { + printf("can not write head into package"); + return(-1); + } + return 0; + + bail: + fclose(fp_r); + + return -1; +} + +static int pack_ver_info(FILE *fp_w, uint32 offset, char *desc) +{ + version_info ver_t; + FILE *fp_r; + int i; + + memset((char *)&ver_t, 0, sizeof(version_info)); + + if (strlen(desc) >= DESCLEN) + { + printf("The upk_desc is too long\n"); + return(-1); + } + strncpy((char *)ver_t.upk_desc, desc, DESCLEN-1); + strncpy((char *)ver_t.pack_id, (char *)PACKAGE_ID, NAMELEN-1); + strncpy((char *)ver_t.os_ver, "0.00", VERLEN-1); + strncpy((char *)ver_t.app_ver, "0.00", VERLEN-1); + + if ((fp_r = fopen(KERNEL_VER_FILE, "rb")) == NULL) + { + printf("Can't open OS version file: %s\n", KERNEL_VER_FILE); + return(-1); + } + for (i = 0; i < sizeof(ver_t.os_ver); i++) + { + if (feof(fp_r)) break; + ver_t.os_ver[i] = fgetc(fp_r); + if ((ver_t.os_ver[i]==0x0d) || (ver_t.os_ver[i]==0x0a)) + ver_t.os_ver[i] = '\0'; + } + fclose(fp_r); + + if ((fp_r = fopen(ROOTFS_VER_FILE, "rb")) == NULL) + { + printf("Can't open App version file: %s\n", ROOTFS_VER_FILE); + return(-1); + } + for (i = 0; i < sizeof(ver_t.app_ver); i++) + { + if (feof(fp_r)) break; + ver_t.app_ver[i] = fgetc(fp_r); + if ((ver_t.app_ver[i]==0x0d) || (ver_t.app_ver[i]==0x0a)) + ver_t.app_ver[i] = '\0'; + } + fclose(fp_r); + + fseek(fp_w, 0, SEEK_SET); + if (fwrite((uint8 *)&ver_t, sizeof(version_info), 1, fp_w) != 1) + { + printf("can not write the version struct into package\n"); + return(-1); + } + + print_version_info(&ver_t); + + return(0); +} + +/* argv[1] packet name + argv[2] upk descpription + argv[3] u-env image + argv[4] u-boot image + argv[5] kernel image + argv[5] rootfs image*/ +int main(int argc, char *argv[]) +{ + FILE *fp_w; + uint32 hw_len = 0; + package_header_t *phd = &p_head; + struct stat buf; + + printf("\npackage tool version %s ", VERSION); + + strncpy((char *)phd->p_name, argv[1], NAMELEN-1); + if ((fp_w = fopen((char *)phd->p_name, "wb+")) == NULL) + { + printf("Can't open %s\n",phd->p_name); + return(-1); + } + + /* packet firmware to package */ + if (pack_firmware(fp_w, hw_len, 4, &argv[3]) != 0) + return(-1); + /* packet upk_desc and version info */ + if (pack_ver_info(fp_w, hw_len+phd->p_headsize, argv[2]) != 0) + return(-1); + + fclose(fp_w); + + stat((char *)phd->p_name, &buf); + if (buf.st_size > SAFE_SIZE) + { + printf("Warning!!!!! The upk size is larger than the safe size\n"); + } + + return 0; +} + + diff --git a/packages/neuros-pkggen/files/package.h b/packages/neuros-pkggen/files/package.h new file mode 100644 index 0000000000..225c53d129 --- /dev/null +++ b/packages/neuros-pkggen/files/package.h @@ -0,0 +1,145 @@ +/* + * Copyright(C) 2005 Neuros Technology International LLC. + * + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that, in addition to its + * original purpose to support Neuros hardware, it will be useful + * otherwise, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + *****************************************************************************/ +/** package.h + * + * Some structure for package.c + * + * 02/22/2002 T.Qiu + * Initial creation. + * 05/15/2008 JWU + * change for osd2.0 + */ + +#ifndef PACKAGE_H +#define PACKAGE_H + +#define VERSION "3.01" +#define NAMELEN 32 +#define VERLEN 20 /* should same as the uboot */ +#define DESCLEN 256 + +/* image type*/ +#define IH_TYPE_INVALID 0 /* Invalid Image */ +#define IH_TYPE_STANDALONE 1 /* Standalone Program */ +#define IH_TYPE_KERNEL 2 /* OS Kernel Image */ +#define IH_TYPE_RAMDISK 3 /* RAMDisk Image */ +#define IH_TYPE_MULTI 4 /* Multi-File Image */ +#define IH_TYPE_FIRMWARE 5 /* Firmware Image */ +#define IH_TYPE_SCRIPT 6 /* Script file */ +#define IH_TYPE_FILESYSTEM 7 /* Filesystem Image (any type) */ +#define IH_TYPE_FLATDT 8 /* Binary Flat Device Tree Blob */ +#define IH_TYPE_UBOOT 9 +#define IH_TYPE_ROOTFS 10 + +/* addr in flash */ +#define UBOOT_ADDR_START 0x00018000 +#define UBOOT_SIZE (1*1024*1024) +#define UBOOT_ADDR_END (UBOOT_ADDR_START+UBOOT_SIZE-1) +#define KERNEL_ADDR_START (UBOOT_ADDR_END+1) +#define KERNEL_SIZE (5*1024*1024) +#define KERNEL_ADDR_END (KERNEL_ADDR_START+KERNEL_SIZE-1) +#define ROOTFS_ADDR_START (KERNEL_ADDR_END+1) +#define ROOTFS_ADDR_END (256*1024*1024 - 1) + +#define UBOOT_FILE_NAME "u-boot.bin" +#define KERNEL_FILE_NAME "kernel.img" +#define ROOTFS_FILE_NAME "rootfs.img" +#define SCRIPT_FILE_NAME "env.img" + +#define UBOOT_VER_FILE "u-boot.version" +#define KERNEL_VER_FILE "uImage.version" +#define ROOTFS_VER_FILE "rootfs.version" + +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef unsigned long uint64; + +#define SWAP_LONG(x) \ + ((uint32)( \ + (((uint32)(x) & (uint32)0x000000ffUL) << 24) | \ + (((uint32)(x) & (uint32)0x0000ff00UL) << 8) | \ + (((uint32)(x) & (uint32)0x00ff0000UL) >> 8) | \ + (((uint32)(x) & (uint32)0xff000000UL) >> 24) )) + +#define SWAP_SHORT(x) \ + ((uint16)( \ + (((uint16)(x) & (uint16)0x00ff) << 8) | \ + (((uint16)(x) & (uint16)0xff00) >> 8)) + +#define ntohl(a) SWAP_LONG(a) +#define htonl(a) SWAP_LONG(a) +#define ntohs(a) SWAP_SHORT(a) +#define htons(a) SWAP_SHORT(a) + +typedef struct packet_header{ + uint32 p_headsize; /* package header size */ + uint32 p_reserve; /* Bit[3]:1 OSD2.0 upk */ + uint32 p_headcrc; /* package header crc checksum */ + uint32 p_datasize; /* package data size */ + uint32 p_datacrc; /* package data crc checksum */ + uint8 p_name[NAMELEN]; /* package name */ + uint8 p_vuboot[VERLEN]; /* version of uboot which depend on */ + uint8 p_vkernel[VERLEN];/* version of kernel which depend on*/ + uint8 p_vrootfs[VERLEN];/* version of rootfs which depend on*/ + uint32 p_imagenum; /* num of the images in package*/ + /* follow is image info */ +}package_header_t; + +typedef struct image_info{ + uint32 i_type; /* image type */ + uint32 i_imagesize; /* size of image */ + uint32 i_startaddr_p; /* start address in packeage */ + uint32 i_startaddr_f; /* start address in flash */ + uint32 i_endaddr_f; /* end address in flash */ + uint8 i_name[NAMELEN]; /* image name */ + uint8 i_version[VERLEN];/* image version */ +}image_info_t; + +typedef struct image_header { + uint32 ih_magic; /* Image Header Magic Number */ + uint32 ih_hcrc; /* Image Header CRC Checksum */ + uint32 ih_time; /* Image Creation Timestamp */ + uint32 ih_size; /* Image Data Size */ + uint32 ih_load; /* Data Load Address */ + uint32 ih_ep; /* Entry Point Address */ + uint32 ih_dcrc; /* Image Data CRC Checksum */ + uint8 ih_os; /* Operating System */ + uint8 ih_arch; /* CPU architecture */ + uint8 ih_type; /* Image Type */ + uint8 ih_comp; /* Compression Type */ + uint8 ih_name[NAMELEN]; /* Image Name */ +} image_header_t; + +#define PACKAGE_ID "neuros-osd2.0" +typedef struct version_struct{ + uint8 upk_desc[DESCLEN]; + uint8 pack_id[NAMELEN]; + uint8 os_ver [VERLEN]; + uint8 app_ver[VERLEN]; +}version_info; + + +extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned int); + +#endif + diff --git a/packages/neuros-pkggen/files/readme b/packages/neuros-pkggen/files/readme new file mode 100644 index 0000000000..fd9c31b545 --- /dev/null +++ b/packages/neuros-pkggen/files/readme @@ -0,0 +1,20 @@ +This is the tool to generate the OSD upgrading package. + +1. Compile the tool + gcc crc32.c package.c -o osdpkg + +2. Copy tool to neuros-bsp/images + +3. Create upk + ./osdpkg nh [upk_desc] [upk_name] [bins ...] + +You can choose to either generate a full package that includes each +binary or a package just for that part that has been changed. + +Example: +<1> To create a upk by including everything + ./osdpkg nh "upk by yada_yada on 2006-10-18" r3.upk env.img +u-boot.bin uImage root.cramfs + +<2> To create a upk by just including the rootfs + ./osdpkg nh "upk by blah_blah on 2006-10-18" r3.upk root.cramfs diff --git a/packages/neuros-pkggen/files/zlib.h b/packages/neuros-pkggen/files/zlib.h new file mode 100644 index 0000000000..e441494d0d --- /dev/null +++ b/packages/neuros-pkggen/files/zlib.h @@ -0,0 +1,434 @@ +/* + * This file is derived from zlib.h and zconf.h from the zlib-0.95 + * distribution by Jean-loup Gailly and Mark Adler, with some additions + * by Paul Mackerras to aid in implementing Deflate compression and + * decompression for PPP packets. + */ + +/* + * ==FILEVERSION 960122== + * + * This marker is used by the Linux installation script to determine + * whether an up-to-date version of this file is already installed. + */ + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 0.95, Aug 16th, 1995. + + Copyright (C) 1995 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + gzip@prep.ai.mit.edu madler@alumni.caltech.edu + */ + +#ifndef _ZLIB_H +#define _ZLIB_H + +/* #include "zconf.h" */ /* included directly here */ + +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* From: zconf.h,v 1.12 1995/05/03 17:27:12 jloup Exp */ + +/* + The library does not install any signal handler. It is recommended to + add at least a handler for SIGSEGV when decompressing; the library checks + the consistency of the input data whenever possible but may go nuts + for some forms of corrupted input. + */ + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + * Compile with -DUNALIGNED_OK if it is OK to access shorts or ints + * at addresses which are not a multiple of their size. + * Under DOS, -DFAR=far or -DFAR=__far may be needed. + */ + +#ifndef STDC +# if defined(MSDOS) || defined(__STDC__) || defined(__cplusplus) +# define STDC +# endif +#endif + +#ifdef __MWERKS__ /* Metrowerks CodeWarrior declares fileno() in unix.h */ +# include +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +#ifndef FAR +# define FAR +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2 */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + 1 << (windowBits+2) + 1 << (memLevel+9) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +typedef unsigned char Byte; /* 8 bits */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +typedef Byte FAR Bytef; +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +/* end of original zconf.h */ + +#define ZLIB_VERSION "0.95P" + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms may be added later and will have the same + stream interface. + + For compression the application must provide the output buffer and + may optionally provide the input buffer for optimization. For decompression, + the application must provide the input buffer and may optionally provide + the output buffer for optimization. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address, uInt nbytes)); + +typedef void (*cb_func) OF((Bytef *buf, uInt len)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidp opaque; /* private data object passed to zalloc and zfree */ + + Byte data_type; /* best guess about the data type: ascii or binary */ + + cb_func outcb; /* called regularly just before blocks of output */ + +} z_stream; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_FULL_FLUSH 2 +#define Z_SYNC_FLUSH 3 /* experimental: partial_flush + byte align */ +#define Z_FINISH 4 +#define Z_PACKET_FLUSH 5 +/* See deflate() below for the usage of these constants */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +/* error codes for the compression/decompression functions */ + +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_DEFAULT_STRATEGY 0 + +#define Z_BINARY 0 +#define Z_ASCII 1 +#define Z_UNKNOWN 2 +/* Used to set the data_type field */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +extern char *zlib_version; +/* The application can compare zlib_version and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + */ + + /* basic functions */ + +extern int inflateInit OF((z_stream *strm)); +/* + Initializes the internal stream state for decompression. The fields + zalloc and zfree must be initialized before by the caller. If zalloc and + zfree are set to Z_NULL, inflateInit updates them to use default allocation + functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory. msg is set to null if there is no error message. + inflateInit does not perform any decompression: this will be done by + inflate(). +*/ + + +extern int inflate OF((z_stream *strm, int flush)); +/* + Performs one or both of the following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() always provides as much output as possible + (until there is no more input data or no more space in the output buffer). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). + + If the parameter flush is set to Z_PARTIAL_FLUSH or Z_PACKET_FLUSH, + inflate flushes as much output as possible to the output buffer. The + flushing behavior of inflate is not specified for values of the flush + parameter other than Z_PARTIAL_FLUSH, Z_PACKET_FLUSH or Z_FINISH, but the + current implementation actually flushes as much output as possible + anyway. For Z_PACKET_FLUSH, inflate checks that once all the input data + has been consumed, it is expecting to see the length field of a stored + block; if not, it returns Z_DATA_ERROR. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster routine + may be used for the single inflate() call. + + inflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if the end of the + compressed data has been reached and all uncompressed output has been + produced, Z_DATA_ERROR if the input data was corrupted, Z_STREAM_ERROR if + the stream structure was inconsistent (for example if next_in or next_out + was NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no + progress is possible or if there was not enough room in the output buffer + when Z_FINISH is used. In the Z_DATA_ERROR case, the application may then + call inflateSync to look for a good compression block. */ + + +extern int inflateEnd OF((z_stream *strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* advanced functions */ + +extern int inflateInit2 OF((z_stream *strm, + int windowBits)); +/* + This is another version of inflateInit with more compression options. The + fields next_out, zalloc and zfree must be initialized before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library (the value 16 will be allowed soon). The + default value is 15 if inflateInit is used instead. If a compressed stream + with a larger window size is given as input, inflate() will return with + the error code Z_DATA_ERROR instead of trying to allocate a larger window. + + If next_out is not null, the library will use this buffer for the history + buffer; the buffer must either be large enough to hold the entire output + data, or have at least 1< Date: Mon, 7 Jul 2008 20:45:23 +0000 Subject: neuros.inc: add IMAGE_DEPENDS --- conf/machine/include/neuros.inc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc index ae3cd4ba32..fd74ab614e 100644 --- a/conf/machine/include/neuros.inc +++ b/conf/machine/include/neuros.inc @@ -1,5 +1,7 @@ MACHINE_POSTPROCESS_COMMAND = "neuros_make_installkit" +EXTRA_IMAGEDEPENDS += "u-boot u-boot-env virtual/kernel neuros-pkggen-native" + neuros_make_installkit () { cd ${DEPLOY_DIR_IMAGE} rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ @@ -7,8 +9,8 @@ neuros_make_installkit () { # Get the latest kernel and u-boot using the foo-.bin symlinks cp uImage-${MACHINE}.bin ${IMAGE_NAME}-installkit/temp/uImage - cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin - cp default_env.img ${IMAGE_NAME}-installkit/ + [ -f u-boot-${MACHINE}.bin ] && cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin + [ -f default_env.img ] && cp default_env.img ${IMAGE_NAME}-installkit/ cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/initrd.bin -- cgit v1.2.3 From 4f68fec7496eed7ff3f651fd90fad3934ae54021 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 21:04:41 +0000 Subject: neuros-pkggen: install to _BIN_dir --- packages/neuros-pkggen/neuros-pkggen-native.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/neuros-pkggen/neuros-pkggen-native.bb b/packages/neuros-pkggen/neuros-pkggen-native.bb index db1a9a9e15..001b3a863a 100644 --- a/packages/neuros-pkggen/neuros-pkggen-native.bb +++ b/packages/neuros-pkggen/neuros-pkggen-native.bb @@ -1,5 +1,6 @@ DESCRIPTION = "Tool to generate ready to flash .pkg files for neuros machines" LICENSE = "GPLv2" +PR = "r1" inherit native @@ -18,7 +19,7 @@ do_compile_prepend() { } do_stage() { - install -m 0755 packet_osd2 ${STAGING_DIR_NATIVE} + install -m 0755 packet_osd2 ${STAGING_BINDIR_NATIVE} } -- cgit v1.2.3 From a9f4bd1709a434544a6ab0588ced944a03ae1c6f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 21:05:12 +0000 Subject: neuros.inc: add some dummy versions to make the generator happy --- conf/machine/include/neuros.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc index fd74ab614e..c8c0b21c8e 100644 --- a/conf/machine/include/neuros.inc +++ b/conf/machine/include/neuros.inc @@ -16,6 +16,9 @@ neuros_make_installkit () { cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n + echo "${MACHINE}" > rootfs.version + echo "${MACHINE}" > u-boot.version + echo "${MACHINE}" > uImage.version packet_osd2 osd20.pkg '${DISTRO} Developer UPK' default_env.img u-boot.bin uImage.jffs2 rootfs.yaffs2 cd ${DEPLOY_DIR_IMAGE} -- cgit v1.2.3 From 63795bef80995241bfa96313231b90135ff2e12b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 21:08:50 +0000 Subject: neuros.inc: correct rootfs name --- conf/machine/include/neuros.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc index c8c0b21c8e..ddd59252e7 100644 --- a/conf/machine/include/neuros.inc +++ b/conf/machine/include/neuros.inc @@ -12,7 +12,7 @@ neuros_make_installkit () { [ -f u-boot-${MACHINE}.bin ] && cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin [ -f default_env.img ] && cp default_env.img ${IMAGE_NAME}-installkit/ - cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/initrd.bin + cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/rootfs.yaffs2 cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n -- cgit v1.2.3 From 749310c7d88354be2d4d1ff973c8b1f857b3a94b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 21:24:38 +0000 Subject: meta-toolchain neuros: add meta-toolchain for neuros task-sdk-bare: meta-toolchain defaults to this, so add it :) --- packages/meta/meta-toolchain-neuros.bb | 5 +++++ packages/tasks/task-sdk-bare.bb | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 packages/meta/meta-toolchain-neuros.bb create mode 100644 packages/tasks/task-sdk-bare.bb diff --git a/packages/meta/meta-toolchain-neuros.bb b/packages/meta/meta-toolchain-neuros.bb new file mode 100644 index 0000000000..c8ed213dc4 --- /dev/null +++ b/packages/meta/meta-toolchain-neuros.bb @@ -0,0 +1,5 @@ +TOOLCHAIN_HOST_TASK = "task-sdk-host" + +require meta-toolchain.bb + +SDK_SUFFIX = "toolchain-neuros" diff --git a/packages/tasks/task-sdk-bare.bb b/packages/tasks/task-sdk-bare.bb new file mode 100644 index 0000000000..d2d40f64b3 --- /dev/null +++ b/packages/tasks/task-sdk-bare.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "Packages for a standalone SDK or external toolchain" +LICENSE = "MIT" +ALLOW_EMPTY = "1" + + +PACKAGES = "${PN}" + +RDEPENDS_${PN} = "\ + glibc \ + glibc-dbg \ + glibc-dev \ + glibc-utils \ + libsegfault \ + glibc-thread-db \ + glibc-localedata-i18n \ + glibc-gconv-ibm850 \ + glibc-gconv-cp1252 \ + glibc-gconv-iso8859-1 \ + glibc-gconv-iso8859-15 \ + locale-base-en-gb \ + libgcc \ + libstdc++ \ +" -- cgit v1.2.3 From ae7e6cafb220b62030833b589e0a1afe768cfb34 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 7 Jul 2008 22:29:39 +0000 Subject: neuros.inc: jffs2 is not yaffs2... --- conf/machine/include/neuros.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc index ddd59252e7..2d29d557b8 100644 --- a/conf/machine/include/neuros.inc +++ b/conf/machine/include/neuros.inc @@ -12,7 +12,7 @@ neuros_make_installkit () { [ -f u-boot-${MACHINE}.bin ] && cp u-boot-${MACHINE}.bin ${IMAGE_NAME}-installkit/u-boot.bin [ -f default_env.img ] && cp default_env.img ${IMAGE_NAME}-installkit/ - cp ${IMAGE_NAME}.rootfs.jffs2 ${IMAGE_NAME}-installkit/rootfs.yaffs2 + cp ${IMAGE_NAME}.rootfs.yaffs2 ${IMAGE_NAME}-installkit/rootfs.yaffs2 cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n -- cgit v1.2.3 From 513e63785bf6b3df4c03ab273cd3f1b8accf4da2 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 08:06:24 +0000 Subject: neuros.inc: use raw oob mode for yaffs2 --- conf/machine/include/neuros.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc index 2d29d557b8..d744bf9082 100644 --- a/conf/machine/include/neuros.inc +++ b/conf/machine/include/neuros.inc @@ -1,4 +1,5 @@ MACHINE_POSTPROCESS_COMMAND = "neuros_make_installkit" +EXTRA_IMAGECMD_yaffs2 = "0" EXTRA_IMAGEDEPENDS += "u-boot u-boot-env virtual/kernel neuros-pkggen-native" -- cgit v1.2.3 From 2a95775a0433f7ef2ab6474758e1683d730d0cf6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 08:42:10 +0000 Subject: qt4: add first stab at qt-embedded 4.4.0, the *$%(*$%(#% people at trolltech renamed it *again*, so we probably need to copy all the qtopia core stuff and do s/qtopia-core/qt-embedded/g --- packages/qt4/qt-embedded-4.4.0/.mtn2git_empty | 0 .../qt4/qt-embedded-4.4.0/0001-cross-compile.patch | 32 +++++++ packages/qt4/qt-embedded-4.4.0/0004-no-qmake.patch | 25 +++++ .../qt4/qt-embedded-4.4.0/0005-fix-mkspecs.patch | 101 +++++++++++++++++++++ .../0006-freetype-host-includes.patch | 23 +++++ .../0007-openssl-host-includes.patch | 23 +++++ .../allow-configure-plugins.patch | 62 +++++++++++++ packages/qt4/qt-embedded-4.4.0/build-tools.patch | 28 ++++++ packages/qt4/qt-embedded-4.4.0/linux-oe-qmake.conf | 95 +++++++++++++++++++ packages/qt4/qt-embedded-4.4.0/qconfig-oe.h | 45 +++++++++ packages/qt4/qt-embedded_4.4.0.bb | 25 +++++ 11 files changed, 459 insertions(+) create mode 100644 packages/qt4/qt-embedded-4.4.0/.mtn2git_empty create mode 100644 packages/qt4/qt-embedded-4.4.0/0001-cross-compile.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/0004-no-qmake.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/0005-fix-mkspecs.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/0006-freetype-host-includes.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/0007-openssl-host-includes.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/allow-configure-plugins.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/build-tools.patch create mode 100644 packages/qt4/qt-embedded-4.4.0/linux-oe-qmake.conf create mode 100644 packages/qt4/qt-embedded-4.4.0/qconfig-oe.h create mode 100644 packages/qt4/qt-embedded_4.4.0.bb diff --git a/packages/qt4/qt-embedded-4.4.0/.mtn2git_empty b/packages/qt4/qt-embedded-4.4.0/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/qt4/qt-embedded-4.4.0/0001-cross-compile.patch b/packages/qt4/qt-embedded-4.4.0/0001-cross-compile.patch new file mode 100644 index 0000000000..310f1931bc --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/0001-cross-compile.patch @@ -0,0 +1,32 @@ +--- /tmp/configure 2008-07-08 10:01:36.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/configure 2008-07-08 10:23:04.000000000 +0200 +@@ -762,7 +762,7 @@ + UNKNOWN_ARG=yes + fi + ;; +- -prefix|-docdir|-headerdir|-plugindir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-demosdir|-depths|-make|-nomake|-platform|-xplatform|-buildkey|-sdk|-arch|-host-arch|-mysql_config) ++ -prefix|-docdir|-headerdir|-plugindir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-demosdir|-depths|-make|-nomake|-platform|-xplatform|-buildkey|-sdk|-arch|-host-arch|-mysql_config|-crossarch) + VAR=`echo $1 | sed "s,^-\(.*\),\1,"` + shift + VAL="$1" +@@ -1179,7 +1179,10 @@ + xplatform) + XPLATFORM="$VAL" + ;; +- debug-and-release) ++ crossarch) ++ CROSSARCH="$VAL" ++ ;; ++ debug-and-release) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DEBUG_RELEASE="$VAL" + else +@@ -2417,6 +2420,8 @@ + ARCH=$HOST_ARCH + fi + ++ARCH="$CROSSARCH" ++ + if [ -d "$relpath/src/corelib/arch/$ARCH" ]; then + if [ "$OPT_VERBOSE" = "yes" ]; then + echo " '$ARCH' is supported" diff --git a/packages/qt4/qt-embedded-4.4.0/0004-no-qmake.patch b/packages/qt4/qt-embedded-4.4.0/0004-no-qmake.patch new file mode 100644 index 0000000000..28f8d3ad9d --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/0004-no-qmake.patch @@ -0,0 +1,25 @@ +From f5a73ce944240de9013cc23288c115e8213add5e Mon Sep 17 00:00:00 2001 +From: Michael Krelin +Date: Sat, 2 Jun 2007 16:06:59 +0200 +Subject: [PATCH] no qmake + +--- + configure | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/configure b/configure +index b3c2a52..1901e57 100755 +--- a/configure ++++ b/configure +@@ -3517,7 +3517,7 @@ END { + } + + # build qmake +-if true; then ###[ '!' -f "$outpath/bin/qmake" ]; ++if false; then ###[ '!' -f "$outpath/bin/qmake" ]; + echo "Creating qmake. Please wait..." + + OLD_QCONFIG_H= +-- +1.5.0.7 + diff --git a/packages/qt4/qt-embedded-4.4.0/0005-fix-mkspecs.patch b/packages/qt4/qt-embedded-4.4.0/0005-fix-mkspecs.patch new file mode 100644 index 0000000000..c6f55906bc --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/0005-fix-mkspecs.patch @@ -0,0 +1,101 @@ +--- /tmp/g++.conf 2008-07-08 10:32:18.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/mkspecs/common/g++.conf 2008-07-08 10:34:15.000000000 +0200 +@@ -2,12 +2,12 @@ + # qmake configuration for common gcc + # + +-QMAKE_CC = gcc +-QMAKE_CFLAGS += -pipe ++QMAKE_CC = $(OE_QMAKE_CC) ++QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS) + QMAKE_CFLAGS_DEPS += -M + QMAKE_CFLAGS_WARN_ON += -Wall -W + QMAKE_CFLAGS_WARN_OFF += -w +-QMAKE_CFLAGS_RELEASE += -O2 ++QMAKE_CFLAGS_RELEASE += + QMAKE_CFLAGS_DEBUG += -g + QMAKE_CFLAGS_SHLIB += -fPIC + QMAKE_CFLAGS_STATIC_LIB += -fPIC +@@ -16,8 +16,8 @@ + QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} + QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE} + +-QMAKE_CXX = g++ +-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS ++QMAKE_CXX = $(OE_QMAKE_CXX) ++QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS) + QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS + QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON + QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +@@ -30,9 +30,9 @@ + QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} + QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE + +-QMAKE_LINK = g++ +-QMAKE_LINK_SHLIB = g++ +-QMAKE_LFLAGS += ++QMAKE_LINK = $(OE_QMAKE_LINK) ++QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK) ++QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS) + QMAKE_LFLAGS_RELEASE += + QMAKE_LFLAGS_DEBUG += + QMAKE_LFLAGS_APP += +@@ -41,7 +41,7 @@ + QMAKE_LFLAGS_SONAME += -Wl,-soname, + QMAKE_LFLAGS_THREAD += + QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +-QMAKE_RPATH = -Wl,-rpath, ++QMAKE_RPATH = -Wl,-rpath-link, + + QMAKE_PCH_OUTPUT_EXT = .gch + +--- /tmp/linux.conf 2008-07-08 10:32:18.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/mkspecs/common/linux.conf 2008-07-08 10:38:37.000000000 +0200 +@@ -7,26 +7,27 @@ + + QMAKE_INCDIR = + QMAKE_LIBDIR = +-QMAKE_INCDIR_X11 = /usr/X11R6/include +-QMAKE_LIBDIR_X11 = /usr/X11R6/lib +-QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] +-QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] +-QMAKE_INCDIR_OPENGL = /usr/X11R6/include +-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib ++QMAKE_INCDIR_X11 = ++QMAKE_LIBDIR_X11 = ++QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT) ++QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT) ++QMAKE_INCDIR_OPENGL = ++QMAKE_LIBDIR_OPENGL = ++ + + QMAKE_LIBS = + QMAKE_LIBS_DYNLOAD = -ldl +-QMAKE_LIBS_X11 = -lXext -lX11 -lm +-QMAKE_LIBS_X11SM = -lSM -lICE ++QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11) ++QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM) + QMAKE_LIBS_NIS = -lnsl + QMAKE_LIBS_OPENGL = -lGLU -lGL + QMAKE_LIBS_OPENGL_QT = -lGL + QMAKE_LIBS_THREAD = -lpthread + +-QMAKE_MOC = $$[QT_INSTALL_BINS]/moc +-QMAKE_UIC = $$[QT_INSTALL_BINS]/uic ++QMAKE_MOC = $(OE_QMAKE_MOC) ++QMAKE_UIC = $(OE_QMAKE_UIC) + +-QMAKE_AR = ar cqs ++QMAKE_AR = $(OE_QMAKE_AR) cqs + QMAKE_OBJCOPY = objcopy + QMAKE_RANLIB = + +@@ -39,7 +40,7 @@ + QMAKE_MOVE = mv -f + QMAKE_DEL_FILE = rm -f + QMAKE_DEL_DIR = rmdir +-QMAKE_STRIP = strip ++QMAKE_STRIP = $(OE_QMAKE_STRIP) + QMAKE_STRIPFLAGS_LIB += --strip-unneeded + QMAKE_CHK_DIR_EXISTS = test -d + QMAKE_MKDIR = mkdir -p diff --git a/packages/qt4/qt-embedded-4.4.0/0006-freetype-host-includes.patch b/packages/qt4/qt-embedded-4.4.0/0006-freetype-host-includes.patch new file mode 100644 index 0000000000..cc8e115fee --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/0006-freetype-host-includes.patch @@ -0,0 +1,23 @@ +From c9ab62bd9a56643574b3ae6e59e0ca776d4860d2 Mon Sep 17 00:00:00 2001 +From: Michael Krelin +Date: Mon, 4 Jun 2007 14:48:50 +0200 +Subject: [PATCH] freetype host includes + +--- + config.tests/unix/freetype/freetype.pri | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/config.tests/unix/freetype/freetype.pri b/config.tests/unix/freetype/freetype.pri +index 84974bf..ab9a6f2 100644 +--- a/config.tests/unix/freetype/freetype.pri ++++ b/config.tests/unix/freetype/freetype.pri +@@ -1,5 +1,5 @@ + !cross_compile { +- TRY_INCLUDEPATHS = /include /usr/include $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH ++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH + for(p, TRY_INCLUDEPATHS) { + p = $$join(p, "", "", "/freetype2") + exists($$p):INCLUDEPATH *= $$p +-- +1.5.0.7 + diff --git a/packages/qt4/qt-embedded-4.4.0/0007-openssl-host-includes.patch b/packages/qt4/qt-embedded-4.4.0/0007-openssl-host-includes.patch new file mode 100644 index 0000000000..35b71d9694 --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/0007-openssl-host-includes.patch @@ -0,0 +1,23 @@ +From d45943adb443ad4b85ca4504952dee743c675e1e Mon Sep 17 00:00:00 2001 +From: Michael Krelin +Date: Mon, 4 Jun 2007 14:58:34 +0200 +Subject: [PATCH] openssl host includes + +--- + config.tests/unix/openssl/openssl.pri | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/config.tests/unix/openssl/openssl.pri b/config.tests/unix/openssl/openssl.pri +index 756e5fe..19b4061 100644 +--- a/config.tests/unix/openssl/openssl.pri ++++ b/config.tests/unix/openssl/openssl.pri +@@ -1,5 +1,5 @@ + !cross_compile { +- TRY_INCLUDEPATHS = /include /usr/include /usr/local/include $$QMAKE_INCDIR $$INCLUDEPATH ++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$INCLUDEPATH + for(p, TRY_INCLUDEPATHS) { + pp = $$join(p, "", "", "/openssl") + exists($$pp):INCLUDEPATH *= $$p +-- +1.5.0.7 + diff --git a/packages/qt4/qt-embedded-4.4.0/allow-configure-plugins.patch b/packages/qt4/qt-embedded-4.4.0/allow-configure-plugins.patch new file mode 100644 index 0000000000..601f2fc369 --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/allow-configure-plugins.patch @@ -0,0 +1,62 @@ +Index: qtopia-core-opensource-src-4.3.3/configure +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/configure 2008-01-20 11:42:07.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/configure 2008-01-20 22:31:37.000000000 +0100 +@@ -639,10 +639,10 @@ + + CFG_SQL_AVAILABLE= + if [ -d "$relpath/src/plugins/sqldrivers" ]; then +- for a in "$relpath/src/plugins/sqldrivers/"*; do +- if [ -d "$a" ]; then +- base_a=`basename $a` +- CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${base_a}" ++ for a in `ls $relpath/src/plugins/sqldrivers/`; do ++ dir="$relpath/src/plugins/sqldrivers/$a" ++ if [ -d "$dir" ]; then ++ CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${a}" + eval "CFG_SQL_${base_a}=auto" + fi + done +@@ -650,30 +650,30 @@ + + CFG_DECORATION_PLUGIN_AVAILABLE= + if [ -d "$relpath/src/plugins/decorations" ]; then +- for a in "$relpath/src/plugins/decorations/"*; do +- if [ -d "$a" ]; then +- base_a=`basename $a` +- CFG_DECORATION_PLUGIN_AVAILABLE="${CFG_DECORATION_PLUGIN_AVAILABLE} ${base_a}" ++ for a in `ls $relpath/src/plugins/decorations/`; do ++ dir="$relpath/src/plugins/decorations/$a" ++ if [ -d "$dir" ]; then ++ CFG_DECORATION_PLUGIN_AVAILABLE="${CFG_DECORATION_PLUGIN_AVAILABLE} ${a}" + fi + done + fi + + CFG_MOUSE_PLUGIN_AVAILABLE= + if [ -d "$relpath/src/plugins/mousedrivers" ]; then +- for a in "$relpath/src/plugins/mousedrivers/"*; do +- if [ -d "$a" ]; then +- base_a=`basename $a` +- CFG_MOUSE_PLUGIN_AVAILABLE="${CFG_MOUSE_PLUGIN_AVAILABLE} ${base_a}" ++ for a in `ls $relpath/src/plugins/mousedrivers/`; do ++ dir="$relpath/src/plugins/mousedrivers/$a" ++ if [ -d "$dir" ]; then ++ CFG_MOUSE_PLUGIN_AVAILABLE="${CFG_MOUSE_PLUGIN_AVAILABLE} ${a}" + fi + done + fi + + CFG_GFX_PLUGIN_AVAILABLE= + if [ -d "$relpath/src/plugins/gfxdrivers" ]; then +- for a in "$relpath/src/plugins/gfxdrivers/"*; do +- if [ -d "$a" ]; then +- base_a=`basename $a` +- CFG_GFX_PLUGIN_AVAILABLE="${CFG_GFX_PLUGIN_AVAILABLE} ${base_a}" ++ for a in `ls $relpath/src/plugins/gfxdrivers/`; do ++ dir="$relpath/src/plugins/gfxdrivers/$a" ++ if [ -d "$dir" ]; then ++ CFG_GFX_PLUGIN_AVAILABLE="${CFG_GFX_PLUGIN_AVAILABLE} ${a}" + fi + done + CFG_GFX_OFF="$CFG_GFX_AVAILABLE" # assume all off diff --git a/packages/qt4/qt-embedded-4.4.0/build-tools.patch b/packages/qt4/qt-embedded-4.4.0/build-tools.patch new file mode 100644 index 0000000000..54ad666374 --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/build-tools.patch @@ -0,0 +1,28 @@ +Do not disable tools, examples and demos for the QWS build. Use brute-force +to do this. + +Index: qtopia-core-opensource-src-4.3.3/configure +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/configure 2007-12-27 16:30:36.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/configure 2007-12-27 16:30:52.000000000 +0100 +@@ -2265,13 +2265,13 @@ + CFG_BUILD_PARTS="$QT_DEFAULT_BUILD_PARTS" + + # don't build tools by default when cross-compiling +- if [ "$PLATFORM" != "$XPLATFORM" ]; then +- CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, tools,,g"` +- fi +-fi +-for nobuild in $CFG_NOBUILD_PARTS; do +- CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, $nobuild,,g"` +-done ++ #if [ "$PLATFORM" != "$XPLATFORM" ]; then ++ # CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, tools,,g"` ++ #fi ++fi ++#for nobuild in $CFG_NOBUILD_PARTS; do ++# CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, $nobuild,,g"` ++#done + if echo $CFG_BUILD_PARTS | grep -v libs >/dev/null 2>&1; then + # echo + # echo "WARNING: libs is a required part of the build." diff --git a/packages/qt4/qt-embedded-4.4.0/linux-oe-qmake.conf b/packages/qt4/qt-embedded-4.4.0/linux-oe-qmake.conf new file mode 100644 index 0000000000..fc5ac6dc5c --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/linux-oe-qmake.conf @@ -0,0 +1,95 @@ +# +# qmake configuration for linux-oe-g++ / OpenEmbedded Build System / http://openembedded.org +# + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release link_prl +QT += core gui network +QMAKE_INCREMENTAL_STYLE = sublib + +QMAKE_CC = $(OE_QMAKE_CC) +QMAKE_LEX = flex +QMAKE_LEXFLAGS = +QMAKE_YACC = yacc +QMAKE_YACCFLAGS = -d +QMAKE_YACCFLAGS_MANGLE = -p $base -b $base +QMAKE_YACC_HEADER = $base.tab.h +QMAKE_YACC_SOURCE = $base.tab.c +QMAKE_CFLAGS = -pipe $(OE_QMAKE_CFLAGS) $(CFLAGS_EXTRA) +QMAKE_CFLAGS_DEPS = -M +QMAKE_CFLAGS_WARN_ON = -Wall -W +QMAKE_CFLAGS_WARN_OFF = +QMAKE_CFLAGS_RELEASE = $(if $(CFLAGS_RELEASE),$(CFLAGS_RELEASE), -O2) +QMAKE_CFLAGS_DEBUG = -g +QMAKE_CFLAGS_SHLIB = -fPIC +QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses +QMAKE_CFLAGS_THREAD = -D_REENTRANT +QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden + +QMAKE_CXX = $(OE_QMAKE_CXX) +QMAKE_CXXFLAGS = $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS) $(CXXFLAGS_EXTRA) +QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON +QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG +QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB +QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC +QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD +QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden + +QMAKE_INCDIR = +QMAKE_LIBDIR = +QMAKE_INCDIR_X11 = +QMAKE_LIBDIR_X11 = +QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT) +QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT) +QMAKE_INCDIR_OPENGL = +QMAKE_LIBDIR_OPENGL = +QMAKE_INCDIR_QTOPIA = $(OE_QMAKE_INCDIR_QTOPIA) +QMAKE_LIBDIR_QTOPIA = $(OE_QMAKE_LIBDIR_QTOPIA) + + +QMAKE_LINK = $(OE_QMAKE_LINK) +QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK) +QMAKE_LFLAGS = $(OE_QMAKE_LDFLAGS) $(LFLAGS_EXTRA) +QMAKE_LFLAGS_RELEASE = +QMAKE_LFLAGS_DEBUG = +QMAKE_LFLAGS_SHLIB = -shared +QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB +QMAKE_LFLAGS_SONAME = -Wl,-soname, +QMAKE_LFLAGS_THREAD = +QMAKE_RPATH = -Wl,-rpath-link, + +QMAKE_LIBS = $(LIBS_EXTRA) +QMAKE_LIBS_DYNLOAD = -ldl +QMAKE_LIBS_X11 = +QMAKE_LIBS_X11SM = +QMAKE_LIBS_QT = -lqte +QMAKE_LIBS_QT_THREAD = -lqte-mt +QMAKE_LIBS_QT_OPENGL = -lqgl +QMAKE_LIBS_THREAD = -lpthread +QMAKE_LIBS_QTOPIA = -lqpe -lqtopia +QMAKE_LIBS_THREAD = -lpthread + +QMAKE_MOC = $$[QT_INSTALL_BINS]/moc +QMAKE_UIC = $$[QT_INSTALL_BINS]/uic + +QMAKE_AR = $(OE_QMAKE_AR) cqs +QMAKE_RANLIB = $(OE_QMAKE_RANLIB) + +QMAKE_TAR = tar -cf +QMAKE_GZIP = gzip -9f + +QMAKE_COPY = cp -f +QMAKE_COPY_FILE = $(COPY) +QMAKE_COPY_DIR = $(COPY) -r +QMAKE_MOVE = mv -f +QMAKE_DEL_FILE = rm -f +QMAKE_DEL_DIR = rmdir +QMAKE_STRIP = $(OE_QMAKE_STRIP) +QMAKE_STRIPFLAGS_LIB += --strip-unneeded +QMAKE_CHK_DIR_EXISTS = test -d +QMAKE_MKDIR = mkdir -p +load(qt_config) diff --git a/packages/qt4/qt-embedded-4.4.0/qconfig-oe.h b/packages/qt4/qt-embedded-4.4.0/qconfig-oe.h new file mode 100644 index 0000000000..f820c01da8 --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/qconfig-oe.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/ +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** In addition, as a special exception, Trolltech gives you certain +** additional rights. These rights are described in the Trolltech GPL +** Exception version 1.0, which can be found at +** http://www.trolltech.com/products/qt/gplexception/ and in the file +** GPL_EXCEPTION.txt in this package. +** +** In addition, as a special exception, Trolltech, as the sole copyright +** holder for Qt Designer, grants users of the Qt/Eclipse Integration +** plug-in the right for the Qt/Eclipse Integration to link to +** functionality provided by Qt Designer and its related libraries. +** +** Trolltech reserves all rights not expressly granted herein. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + + +/* + Empty leaves all features enabled. See doc/html/emb-features.html for choices. + + Note that disabling some features will produce a libqt that is not + compatible with other libqt builds. Such modifications are only + supported on Qtopia Core where reducing the library size is important + and where the application-suite is often a fixed set. +*/ diff --git a/packages/qt4/qt-embedded_4.4.0.bb b/packages/qt4/qt-embedded_4.4.0.bb new file mode 100644 index 0000000000..f04453bea9 --- /dev/null +++ b/packages/qt4/qt-embedded_4.4.0.bb @@ -0,0 +1,25 @@ +require qtopia-core.inc + +SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ + file://qconfig-oe.h \ + file://0001-cross-compile.patch;patch=1 \ +# file://0003-no-tools.patch;patch=1 \ + file://0004-no-qmake.patch;patch=1 \ + file://0005-fix-mkspecs.patch;patch=1 \ + file://build-tools.patch;patch=1" +S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}" + +SRC_URI += " \ + file://0006-freetype-host-includes.patch;patch=1 \ + file://0007-openssl-host-includes.patch;patch=1 \ +# file://0008-backport-qt-lib-infix.patch;patch=1 \ +# file://allow-configure-plugins.patch;patch=1 \ +" + +QT_CONFIG_FLAGS += " \ + -no-phonon -webkit \ + -DQT_KEYPAD_NAVIGATION \ + " + + + -- cgit v1.2.3 From e7023c0251b23f1dd4941f5e0e0374881ac2b646 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 08:45:13 +0000 Subject: qte 4.4.0: don't build tools, use the ones in staging --- packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch | 11 +++++++++++ packages/qt4/qt-embedded_4.4.0.bb | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch diff --git a/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch b/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch new file mode 100644 index 0000000000..21e9fffe5e --- /dev/null +++ b/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch @@ -0,0 +1,11 @@ +--- /tmp/src.pro 2008-07-08 10:43:30.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/src/src.pro 2008-07-08 10:44:04.000000000 +0200 +@@ -6,7 +6,7 @@ + wince*:{ + SRC_SUBDIRS += src_corelib src_xml src_gui src_sql src_network src_script src_testlib + } else { +- SRC_SUBDIRS += src_tools_moc src_tools_rcc src_tools_uic src_corelib src_xml src_network src_gui src_sql src_script src_testlib ++ SRC_SUBDIRS += src_corelib src_xml src_network src_gui src_sql src_script src_testlib + contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support + contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus + !cross_compile { diff --git a/packages/qt4/qt-embedded_4.4.0.bb b/packages/qt4/qt-embedded_4.4.0.bb index f04453bea9..027c049f46 100644 --- a/packages/qt4/qt-embedded_4.4.0.bb +++ b/packages/qt4/qt-embedded_4.4.0.bb @@ -3,7 +3,7 @@ require qtopia-core.inc SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ file://qconfig-oe.h \ file://0001-cross-compile.patch;patch=1 \ -# file://0003-no-tools.patch;patch=1 \ + file://0003-no-tools.patch;patch=1 \ file://0004-no-qmake.patch;patch=1 \ file://0005-fix-mkspecs.patch;patch=1 \ file://build-tools.patch;patch=1" -- cgit v1.2.3 From 5c066f62c4f545d17a597c98bdd47381a28b0614 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 09:01:47 +0000 Subject: uicmoc-native: add 4.4.0 --- packages/uicmoc/uicmoc4-native_4.4.0.bb | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 packages/uicmoc/uicmoc4-native_4.4.0.bb diff --git a/packages/uicmoc/uicmoc4-native_4.4.0.bb b/packages/uicmoc/uicmoc4-native_4.4.0.bb new file mode 100644 index 0000000000..6d9c83eb75 --- /dev/null +++ b/packages/uicmoc/uicmoc4-native_4.4.0.bb @@ -0,0 +1,7 @@ +require uicmoc4-native.inc + +SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ + file://configure-fix.patch;patch=1" +S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}" + + -- cgit v1.2.3 From 3eeff5ac9faefa1b57c0a697fab3e58209de1af5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 09:16:06 +0000 Subject: linux-omap2: bump to rc9 --- packages/linux/linux-omap2_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 0fcda6d6ad..a3bdfc9818 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -2,9 +2,9 @@ require linux-omap.inc FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MACHINE}" -SRCREV = "c32c81d59d2d8a66e63f82c9732db256d302068e" +SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" -PV = "2.6.25+2.6.26-rc8+${PR}+git${SRCREV}" +PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" PR = "r39" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ -- cgit v1.2.3 From ec5f95f1eeeab7fa77450d7e9fc8b2629a0f99ea Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 8 Jul 2008 09:18:11 +0000 Subject: add python-opendir, an extension module using POSIX opendir semantics --- packages/python/python-opendir/.mtn2git_empty | 0 packages/python/python-opendir/opendir.pyx | 149 ++++++++++++++++++++++++++ packages/python/python-opendir/setup.py | 25 +++++ packages/python/python-opendir_1.0.bb | 15 +++ packages/tasks/task-python-everything.bb | 3 +- 5 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 packages/python/python-opendir/.mtn2git_empty create mode 100644 packages/python/python-opendir/opendir.pyx create mode 100644 packages/python/python-opendir/setup.py create mode 100644 packages/python/python-opendir_1.0.bb diff --git a/packages/python/python-opendir/.mtn2git_empty b/packages/python/python-opendir/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/python/python-opendir/opendir.pyx b/packages/python/python-opendir/opendir.pyx new file mode 100644 index 0000000000..1ee81f7382 --- /dev/null +++ b/packages/python/python-opendir/opendir.pyx @@ -0,0 +1,149 @@ +############################################################## +# +# opendir.pyx - A class exposing the functionality of +# =========== the opendir() family of C libary functions. +# +# By Gregory Ewing +# greg.ewing@canterbury.ac.nz +# +# This software and derivative works created from it +# may be used and redistributed without restriction. +# +############################################################## + +cdef extern from "sys/errno.h": + int errno + +cdef extern from "stdio.h": + char *strerror(int) + +cdef extern from "dirent.h": + ctypedef struct DIR + struct dirent: + int d_namlen + char d_name[1] + DIR *c_opendir "opendir" (char *) + int readdir_r(DIR *, dirent *, dirent **) + long telldir(DIR *) + void seekdir(DIR *, long) + void rewinddir(DIR *) + int closedir(DIR *) + int dirfd(DIR *) + +#------------------------------------------------------------------ + +cdef class opendir: + """opendir(pathname) --> an open directory object + + Opens a directory and provides incremental access to + the filenames it contains. May be used as a file-like + object or as an iterator. + + When used as a file-like object, each call to read() + returns one filename, or an empty string when the end + of the directory is reached. The close() method should + be called when finished with the directory. + + The close() method should also be called when used as + an iterator and iteration is stopped prematurely. If + iteration proceeds to completion, the directory is + closed automatically.""" + + cdef DIR *dir + + def __cinit__(self, char *path): + self.dir = c_opendir(path) + if not self.dir: + raise IOError(errno, "%s: '%s'" % (strerror(errno), path)) + + def __dealloc__(self): + if self.dir: + closedir(self.dir) + + def read(self): + """read() --> filename or empty string + + Returns the next filename from the directory, or an empty + string if the end of the directory has been reached.""" + + cdef dirent entry, *result + check_open(self) + if readdir_r(self.dir, &entry, &result) < 0: + raise IOError(errno) + if result: + return entry.d_name + else: + return "" + + def tell(self): + """tell() --> position + + Returns a value representing the current position in the + directory, suitable for passing to tell(). Only valid for + this directory object as long as it remains open.""" + + check_open(self) + return telldir(self.dir) + + def seek(self, long pos): + """seek(position) + + Returns the directory to the specified position, which + should be a value previously returned by tell().""" + + check_open(self) + seekdir(self.dir, pos) + + def rewind(self): + """rewind() + + Resets the position to the beginning of the directory.""" + + check_open(self) + rewinddir(self.dir) + + def close(self): + """close() + + Closes the directory and frees the underlying file descriptor.""" + + if self.dir: + if closedir(self.dir) < 0: + raise IOError(errno) + self.dir = NULL + +# MaxOSX doesn't seem to have dirfd, despite what the +# man page says. :-( +# +# def fileno(self): +# """fileno() --> file descriptor +# +# Returns the file descriptor associated with the open directory.""" +# +# check_open(self) +# return dirfd(self.dir) + + def __iter__(self): + return self + + def __next__(self): + """next() --> filename + + Returns the next filename from the directory. If the end of the + directory has been reached, closes the directory and raises + StopIteration.""" + + if self.dir: + result = self.read() + if result: + return result + self.close() + raise StopIteration + +#------------------------------------------------------------------ + +cdef int check_open(opendir d) except -1: + if not d.dir: + raise ValueError("Directory is closed") + return 0 + diff --git a/packages/python/python-opendir/setup.py b/packages/python/python-opendir/setup.py new file mode 100644 index 0000000000..d76b22c95a --- /dev/null +++ b/packages/python/python-opendir/setup.py @@ -0,0 +1,25 @@ +from distutils.core import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext + +setup( + name = 'opendir', + version = '0.0.1', + author = 'Gregory Ewing', + author_email = 'greg ewing at canterbury ac nz', + maintainer = 'Johannes "josch" Schauer', + maintainer_email = 'j schauer at email de', + description = 'Implements POSIX opendir', + classifiers = [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Operating System :: POSIX', + 'Programming Language :: Pyrex', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: System :: Filesystems' + ], + ext_modules=[ + Extension("opendir", ["opendir.pyx"]), + ], + cmdclass = {'build_ext': build_ext} +) diff --git a/packages/python/python-opendir_1.0.bb b/packages/python/python-opendir_1.0.bb new file mode 100644 index 0000000000..88f22a1d9a --- /dev/null +++ b/packages/python/python-opendir_1.0.bb @@ -0,0 +1,15 @@ +DESCRIPTION = "POSIX opendir support for Python" +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "PD" +HOMEPAGE = "http://rabenfrost.net/mokopedia/opendir/" +DEPENDS = "python-pyrex-native python-cython-native" +PR = "ml0" + +SRC_URI = "\ + file://opendir.pyx \ + file://setup.py \ +" +S = "${WORKDIR}" + +inherit distutils diff --git a/packages/tasks/task-python-everything.bb b/packages/tasks/task-python-everything.bb index 669c94159b..623337455c 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 = "ml30" +PR = "ml31" RDEPENDS = "\ python-ao \ @@ -36,6 +36,7 @@ RDEPENDS = "\ python-numarray \ python-numeric \ python-ogg \ + python-opendir \ python-pexpect \ python-pyalsa \ python-pyalsaaudio \ -- cgit v1.2.3 From b77cd2b93d4e546197001db5c8fed21dd827f416 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 09:30:48 +0000 Subject: qte 4.4.0: disable some more tools --- packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch b/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch index 21e9fffe5e..bb36444f80 100644 --- a/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch +++ b/packages/qt4/qt-embedded-4.4.0/0003-no-tools.patch @@ -1,6 +1,6 @@ --- /tmp/src.pro 2008-07-08 10:43:30.000000000 +0200 -+++ qt-embedded-linux-opensource-src-4.4.0/src/src.pro 2008-07-08 10:44:04.000000000 +0200 -@@ -6,7 +6,7 @@ ++++ qt-embedded-linux-opensource-src-4.4.0/src/src.pro 2008-07-08 11:28:24.000000000 +0200 +@@ -6,12 +6,9 @@ wince*:{ SRC_SUBDIRS += src_corelib src_xml src_gui src_sql src_network src_script src_testlib } else { @@ -8,4 +8,9 @@ + SRC_SUBDIRS += src_corelib src_xml src_network src_gui src_sql src_script src_testlib contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus - !cross_compile { +- !cross_compile { +- contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_tools_uic3 +- } + } + win32:!contains(QT_EDITION, OpenSource|Console): { + SRC_SUBDIRS += src_activeqt -- cgit v1.2.3 From f308f9500d80374cf504a66be8ef02a1699a26d4 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 09:34:17 +0000 Subject: linux-neuros: bump SRCREV and update defconfig --- packages/linux/linux-neuros/neuros-osd2/defconfig | 4 +++- packages/linux/linux-neuros_git.bb | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/linux/linux-neuros/neuros-osd2/defconfig b/packages/linux/linux-neuros/neuros-osd2/defconfig index b729767e3e..d68f2d069f 100644 --- a/packages/linux/linux-neuros/neuros-osd2/defconfig +++ b/packages/linux/linux-neuros/neuros-osd2/defconfig @@ -848,6 +848,8 @@ CONFIG_VIDEO_V4L2=y CONFIG_VIDEO_CAPTURE_DRIVERS=y # CONFIG_VIDEO_ADV_DEBUG is not set CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_DAVINCI=y +CONFIG_VIDEO_TVP5150=y # CONFIG_VIDEO_TVP5146 is not set # CONFIG_VIDEO_CPIA is not set # CONFIG_VIDEO_CPIA2 is not set @@ -1167,7 +1169,7 @@ CONFIG_INOTIFY_USER=y CONFIG_DNOTIFY=y # CONFIG_AUTOFS_FS is not set CONFIG_AUTOFS4_FS=m -# CONFIG_FUSE_FS is not set +CONFIG_FUSE_FS=y # # CD-ROM/DVD Filesystems diff --git a/packages/linux/linux-neuros_git.bb b/packages/linux/linux-neuros_git.bb index db04361de6..5450fe75f8 100644 --- a/packages/linux/linux-neuros_git.bb +++ b/packages/linux/linux-neuros_git.bb @@ -2,10 +2,10 @@ require linux.inc DESCRIPTION = "Linux kernel for Neuros OSD devices" -SRCREV = "730beeee197cef4ff1e92ee322481380996a0390" +SRCREV = "723849a80153f079a653d06a660f63fec67f6d1e" PV = "2.6.23-${PR}+git${SRCREV}" -PR = "r3" +PR = "r4" COMPATIBLE_MACHINE = "(neuros-osd|neuros-osd2)" -- cgit v1.2.3 From e9c9435a45f231f034b779dd8299cc4df2311577 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 10:22:35 +0000 Subject: qt4: add webkit, help and clucene packaging --- packages/qt4/qt-embedded_4.4.0.bb | 2 ++ packages/qt4/qt_packaging.inc | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/qt4/qt-embedded_4.4.0.bb b/packages/qt4/qt-embedded_4.4.0.bb index 027c049f46..902b7bf28b 100644 --- a/packages/qt4/qt-embedded_4.4.0.bb +++ b/packages/qt4/qt-embedded_4.4.0.bb @@ -21,5 +21,7 @@ QT_CONFIG_FLAGS += " \ -DQT_KEYPAD_NAVIGATION \ " +QT_BASE_NAME = "qt-embedded" +QT_BASE_LIB = "libqt-embedded" diff --git a/packages/qt4/qt_packaging.inc b/packages/qt4/qt_packaging.inc index 1b4faf97d2..8b4a259321 100644 --- a/packages/qt4/qt_packaging.inc +++ b/packages/qt4/qt_packaging.inc @@ -3,6 +3,7 @@ NONDEV_PACKAGES += "${QT_BASE_LIB}core4 ${QT_BASE_LIB}gui4 ${QT_BASE_LIB}network ${QT_BASE_LIB}designer4 ${QT_BASE_LIB}designercomponents4 \ ${QT_BASE_LIB}3support4 ${QT_BASE_LIB}assistantclient4 ${QT_BASE_LIB}script4 \ ${QT_BASE_LIB}dbus4 ${QT_BASE_LIB}opengl4 \ + ${QT_BASE_LIB}help ${QT_BASE_LIB}clucene ${QT_BASE_LIB}webkit \ ${QT_BASE_NAME}-assistant ${QT_BASE_NAME}-common \ ${QT_BASE_NAME}-designer \ ${QT_BASE_NAME}-demos ${QT_BASE_NAME}-examples \ @@ -24,7 +25,11 @@ DEV_PACKAGES += "${QT_BASE_LIB}core4-dev \ ${QT_BASE_LIB}script4-dev \ ${QT_BASE_LIB}dbus4-dev \ ${QT_BASE_LIB}opengl4-dev \ - ${QT_BASE_LIB}uitools4-dev" + ${QT_BASE_LIB}uitools4-dev \ + ${QT_BASE_LIB}help-dev \ + ${QT_BASE_LIB}clucene-dev \ + ${QT_BASE_LIB}webkit-dev \ + " DBG_PACKAGES += "${QT_BASE_LIB}core4-dbg \ ${QT_BASE_LIB}gui4-dbg \ @@ -39,7 +44,11 @@ DBG_PACKAGES += "${QT_BASE_LIB}core4-dbg \ ${QT_BASE_LIB}assistantclient4-dbg \ ${QT_BASE_LIB}script4-dbg \ ${QT_BASE_LIB}dbus4-dbg \ - ${QT_BASE_LIB}opengl4-dbg" + ${QT_BASE_LIB}opengl4-dbg \ + ${QT_BASE_LIB}help-dbg \ + ${QT_BASE_LIB}clucene-dbg \ + ${QT_BASE_LIB}webkit-dbg \ + " PACKAGES += "${DEV_PACKAGES} ${NONDEV_PACKAGES} ${DBG_PACKAGES}" @@ -103,7 +112,15 @@ FILES_${QT_BASE_LIB}opengl4 = "${libdir}/libQtOpenGL${QT_LIBINFI FILES_${QT_BASE_LIB}opengl4-dev = "${@qt_default_dev('OpenGL')}" FILES_${QT_BASE_LIB}opengl4-dbg = "${libdir}/.debug/libQtOpenGL*" FILES_${QT_BASE_LIB}uitools4-dev = "${libdir}/libQtUiTools* ${includedir}/${QT_DIR_NAME}/QtUiTools* ${libdir}/pkgconfig/QtUiTools${QT_LIBINFIX}.pc" - +FILES_${QT_BASE_LIB}Hhlp = "${libdir}/libQtHelp${QT_LIBINFIX}.so.*" +FILES_${QT_BASE_LIB}help-dev = "${@qt_default_dev('Help')}" +FILES_${QT_BASE_LIB}help-dbg = "${libdir}/.debug/libQtHelp*" +FILES_${QT_BASE_LIB}clucene = "${libdir}/libQtClucene${QT_LIBINFIX}.so.*" +FILES_${QT_BASE_LIB}clucene-dev = "${@qt_default_dev('Clucene')}" +FILES_${QT_BASE_LIB}clucene-dbg = "${libdir}/.debug/libQtClucene*" +FILES_${QT_BASE_LIB}webkit = "${libdir}/libQtWebKit${QT_LIBINFIX}.so.*" +FILES_${QT_BASE_LIB}webkit-dev = "${@qt_default_dev('Webkit')}" +FILES_${QT_BASE_LIB}webkit-dbg = "${libdir}/.debug/libQtWebkit*" FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant*" FILES_${QT_BASE_NAME}-designer = "${bindir}/*designer*" -- cgit v1.2.3 From 1a81f70358e2cd67b91ea2f1ec332cd76c7215d9 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 10:35:10 +0000 Subject: qt4: fix help and clucene packaging --- packages/qt4/qt_packaging.inc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/qt4/qt_packaging.inc b/packages/qt4/qt_packaging.inc index 8b4a259321..ec82707892 100644 --- a/packages/qt4/qt_packaging.inc +++ b/packages/qt4/qt_packaging.inc @@ -112,15 +112,15 @@ FILES_${QT_BASE_LIB}opengl4 = "${libdir}/libQtOpenGL${QT_LIBINFI FILES_${QT_BASE_LIB}opengl4-dev = "${@qt_default_dev('OpenGL')}" FILES_${QT_BASE_LIB}opengl4-dbg = "${libdir}/.debug/libQtOpenGL*" FILES_${QT_BASE_LIB}uitools4-dev = "${libdir}/libQtUiTools* ${includedir}/${QT_DIR_NAME}/QtUiTools* ${libdir}/pkgconfig/QtUiTools${QT_LIBINFIX}.pc" -FILES_${QT_BASE_LIB}Hhlp = "${libdir}/libQtHelp${QT_LIBINFIX}.so.*" +FILES_${QT_BASE_LIB}help = "${libdir}/libQtHelp${QT_LIBINFIX}.so.*" FILES_${QT_BASE_LIB}help-dev = "${@qt_default_dev('Help')}" FILES_${QT_BASE_LIB}help-dbg = "${libdir}/.debug/libQtHelp*" -FILES_${QT_BASE_LIB}clucene = "${libdir}/libQtClucene${QT_LIBINFIX}.so.*" -FILES_${QT_BASE_LIB}clucene-dev = "${@qt_default_dev('Clucene')}" -FILES_${QT_BASE_LIB}clucene-dbg = "${libdir}/.debug/libQtClucene*" +FILES_${QT_BASE_LIB}clucene = "${libdir}/libQtCLucene${QT_LIBINFIX}.so.*" +FILES_${QT_BASE_LIB}clucene-dev = "${@qt_default_dev('CLucene')}" +FILES_${QT_BASE_LIB}clucene-dbg = "${libdir}/.debug/libQtCLucene*" FILES_${QT_BASE_LIB}webkit = "${libdir}/libQtWebKit${QT_LIBINFIX}.so.*" -FILES_${QT_BASE_LIB}webkit-dev = "${@qt_default_dev('Webkit')}" -FILES_${QT_BASE_LIB}webkit-dbg = "${libdir}/.debug/libQtWebkit*" +FILES_${QT_BASE_LIB}webkit-dev = "${@qt_default_dev('WebKit')}" +FILES_${QT_BASE_LIB}webkit-dbg = "${libdir}/.debug/libQtWebKit*" FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant*" FILES_${QT_BASE_NAME}-designer = "${bindir}/*designer*" -- cgit v1.2.3 From 3cd09697f7a3e2eda512cafb1da54849bf104b5d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 10:45:51 +0000 Subject: gtk-doc: generate packages for sdk and native toolchains --- packages/gtk-doc/gtk-doc.bb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/gtk-doc/gtk-doc.bb b/packages/gtk-doc/gtk-doc.bb index 8609138bac..f0dbdd0bae 100644 --- a/packages/gtk-doc/gtk-doc.bb +++ b/packages/gtk-doc/gtk-doc.bb @@ -1,7 +1,14 @@ SECTION = "x11/base" SRC_URI = "file://gtk-doc.m4" LICENSE = "LGPL" -PR="r1" +PR = "r2" + +ALLOW_EMPTY_${PN} = "1" + +do_install() { + install -d ${D}/${datadir}/aclocal + install -m 0644 ${WORKDIR}/gtk-doc.m4 ${D}/${datadir}/aclocal +} do_stage() { install -d ${STAGING_DATADIR}/aclocal -- cgit v1.2.3 From f3af2129654b5939ed24f4ae0548a13695927ba7 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 10:48:04 +0000 Subject: qt4 packaging: since not all packages exist recommend them instead of depending on them --- packages/qt4/qt-embedded_4.4.0.bb | 2 ++ packages/qt4/qt_packaging.inc | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/qt4/qt-embedded_4.4.0.bb b/packages/qt4/qt-embedded_4.4.0.bb index 902b7bf28b..f7b8ab0267 100644 --- a/packages/qt4/qt-embedded_4.4.0.bb +++ b/packages/qt4/qt-embedded_4.4.0.bb @@ -1,5 +1,7 @@ require qtopia-core.inc +PR = "r2" + SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ file://qconfig-oe.h \ file://0001-cross-compile.patch;patch=1 \ diff --git a/packages/qt4/qt_packaging.inc b/packages/qt4/qt_packaging.inc index ec82707892..a0d4bf8bbc 100644 --- a/packages/qt4/qt_packaging.inc +++ b/packages/qt4/qt_packaging.inc @@ -57,9 +57,9 @@ ALLOW_EMPTY_${PN} = "1" FILES_${PN} = "" FILES_${PN}-dev = " ${includedir}/${QT_DIR_NAME}/Qt/*" FILES_${PN}-dbg = "${bindir}/*/.debug " -RDEPENDS_${PN} = "${NONDEV_PACKAGES}" -RDEPENDS_${PN}-dev = "${DEV_PACKAGES}" -RDEPENDS_${PN}-dbg = "${DBG_PACKAGES}" +RRECOMMENDS_${PN} = "${NONDEV_PACKAGES}" +RRECOMMENDS_${PN}-dev = "${DEV_PACKAGES}" +RRECOMMENDS_${PN}-dbg = "${DBG_PACKAGES}" def qt_default_dev(name): return """${libdir}/libQt%(name)s${QT_LIBINFIX}.la -- cgit v1.2.3 From ae21fb9bdd713f47af61bcfd973f02880bf9417d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 11:08:14 +0000 Subject: qt staging: fix up more .pc files --- packages/qt4/qt_staging.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/qt4/qt_staging.inc b/packages/qt4/qt_staging.inc index a49be4757e..705ae14f8d 100644 --- a/packages/qt4/qt_staging.inc +++ b/packages/qt4/qt_staging.inc @@ -6,6 +6,11 @@ do_stage_append() { sed -i s#"uic_location=${STAGING_BINDIR}/uic4$"## Qt*.pc sed -i s#"-L${STAGING_LIBDIR}"##g Qt*.pc sed -i s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g Qt*.pc + sed -i s#"-L${S}/lib"##g phonon*.pc + sed -i s#"moc_location=${STAGING_BINDIR}/moc4$"## phonon*.pc + sed -i s#"uic_location=${STAGING_BINDIR}/uic4$"## phonon*.pc + sed -i s#"-L${STAGING_LIBDIR}"##g phonon*.pc + sed -i s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g phonon*.pc cd ${STAGING_LIBDIR} sed -i s#"-L${S}/lib"##g libQt*.la -- cgit v1.2.3 From f74c56ff61c252a581d0363acd910b71338586eb Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 11:12:05 +0000 Subject: meta-toolchain-neuros: add qte and dbus --- packages/meta/meta-toolchain-neuros.bb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/meta/meta-toolchain-neuros.bb b/packages/meta/meta-toolchain-neuros.bb index c8ed213dc4..5905eceec1 100644 --- a/packages/meta/meta-toolchain-neuros.bb +++ b/packages/meta/meta-toolchain-neuros.bb @@ -1,5 +1,14 @@ +# Toolchain for neuros-osd devices + +PR = "r1" + TOOLCHAIN_HOST_TASK = "task-sdk-host" require meta-toolchain.bb +TOOLCHAIN_TARGET_TASK += " \ + dbus dbus-dev \ + qt-embedded qt-embedded-dev \ + " + SDK_SUFFIX = "toolchain-neuros" -- cgit v1.2.3 From 9788af13b2fdb7d03aa53c429eddccfa92ca5e75 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 8 Jul 2008 12:45:13 +0000 Subject: fso-image: ship mickeydbus --- packages/images/fso-image.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/images/fso-image.bb b/packages/images/fso-image.bb index 7333b32131..c257158a12 100644 --- a/packages/images/fso-image.bb +++ b/packages/images/fso-image.bb @@ -39,6 +39,7 @@ X_INSTALL = "\ TOOLS_INSTALL = "\ # bash \ htop \ + mickeydbus \ mickeyterm \ nano \ powertop \ -- cgit v1.2.3 From dff796f98e6148f6fac9cb5b8f7aa0e5a4caac8e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 13:39:37 +0000 Subject: linux-omap2 git: enable uvc for beagleboard --- .../linux/linux-omap2-git/beagleboard/defconfig | 47 ++++++++++++++-------- packages/linux/linux-omap2_git.bb | 2 +- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index fa11eefc3c..0b4af695d8 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.26-rc8-omap1 -# Sun Jul 6 15:22:47 2008 +# Linux kernel version: 2.6.26-rc9-omap1 +# Tue Jul 8 15:36:02 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -1037,6 +1037,7 @@ CONFIG_MEDIA_TUNER=m # CONFIG_MEDIA_TUNER_CUSTOMIZE is not set CONFIG_MEDIA_TUNER_SIMPLE=m CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA18271=m CONFIG_MEDIA_TUNER_TDA9887=m CONFIG_MEDIA_TUNER_TEA5761=m CONFIG_MEDIA_TUNER_TEA5767=m @@ -1048,9 +1049,17 @@ CONFIG_MEDIA_TUNER_XC2028=m CONFIG_MEDIA_TUNER_XC5000=m CONFIG_VIDEO_V4L2=m CONFIG_VIDEO_V4L1=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_VIDEO_TUNER=m CONFIG_VIDEO_CAPTURE_DRIVERS=y # CONFIG_VIDEO_ADV_DEBUG is not set CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_CX25840=m +CONFIG_VIDEO_CX2341X=m # CONFIG_VIDEO_VIVI is not set # CONFIG_VIDEO_CPIA is not set # CONFIG_VIDEO_CPIA2 is not set @@ -1059,23 +1068,29 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y # CONFIG_TUNER_3036 is not set # CONFIG_VIDEO_AU0828 is not set CONFIG_V4L_USB_DRIVERS=y -# CONFIG_VIDEO_PVRUSB2 is not set +CONFIG_USB_VIDEO_CLASS=m +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_PVRUSB2_DVB=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set # CONFIG_VIDEO_EM28XX is not set -# CONFIG_VIDEO_USBVISION is not set -# CONFIG_USB_VICAM is not set -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_KONICAWC is not set -# CONFIG_USB_QUICKCAM_MESSENGER is not set +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +CONFIG_USB_QUICKCAM_MESSENGER=m # CONFIG_USB_ET61X251 is not set -# CONFIG_VIDEO_OVCAMCHIP is not set -# CONFIG_USB_W9968CF is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_SN9C102 is not set -# CONFIG_USB_STV680 is not set +CONFIG_VIDEO_OVCAMCHIP=m +CONFIG_USB_W9968CF=m +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m # CONFIG_USB_ZC0301 is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_ZR364XX is not set +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_ZR364XX=m # CONFIG_USB_STKWEBCAM is not set # CONFIG_SOC_CAMERA is not set CONFIG_RADIO_ADAPTERS=y diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index a3bdfc9818..8392ff7308 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" -PR = "r39" +PR = "r40" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" -- cgit v1.2.3 From 04e7918253b3529f6a27eca15bab01b2cd01c998 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Tue, 8 Jul 2008 13:39:54 +0000 Subject: python-{pyrex|cython}[-native] 0.9.x update to 0.9.8 --- packages/python/python-cython-native_0.9.6.9.bb | 9 --------- packages/python/python-cython-native_0.9.8.bb | 9 +++++++++ packages/python/python-cython_0.9.6.9.bb | 13 ------------- packages/python/python-cython_0.9.8.bb | 13 +++++++++++++ packages/python/python-pyrex-native_0.9.5.1a.bb | 9 --------- packages/python/python-pyrex-native_0.9.8.4.bb | 9 +++++++++ packages/python/python-pyrex_0.9.5.1a.bb | 14 -------------- packages/python/python-pyrex_0.9.8.4.bb | 14 ++++++++++++++ 8 files changed, 45 insertions(+), 45 deletions(-) delete mode 100644 packages/python/python-cython-native_0.9.6.9.bb create mode 100644 packages/python/python-cython-native_0.9.8.bb delete mode 100644 packages/python/python-cython_0.9.6.9.bb create mode 100644 packages/python/python-cython_0.9.8.bb delete mode 100644 packages/python/python-pyrex-native_0.9.5.1a.bb create mode 100644 packages/python/python-pyrex-native_0.9.8.4.bb delete mode 100644 packages/python/python-pyrex_0.9.5.1a.bb create mode 100644 packages/python/python-pyrex_0.9.8.4.bb diff --git a/packages/python/python-cython-native_0.9.6.9.bb b/packages/python/python-cython-native_0.9.6.9.bb deleted file mode 100644 index cb7743e1bf..0000000000 --- a/packages/python/python-cython-native_0.9.6.9.bb +++ /dev/null @@ -1,9 +0,0 @@ -require python-cython_${PV}.bb -inherit native -DEPENDS = "python-native" -RDEPENDS = "" - -do_stage() { - BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ - ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR} -} diff --git a/packages/python/python-cython-native_0.9.8.bb b/packages/python/python-cython-native_0.9.8.bb new file mode 100644 index 0000000000..cb7743e1bf --- /dev/null +++ b/packages/python/python-cython-native_0.9.8.bb @@ -0,0 +1,9 @@ +require python-cython_${PV}.bb +inherit native +DEPENDS = "python-native" +RDEPENDS = "" + +do_stage() { + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR} +} diff --git a/packages/python/python-cython_0.9.6.9.bb b/packages/python/python-cython_0.9.6.9.bb deleted file mode 100644 index a513104108..0000000000 --- a/packages/python/python-cython_0.9.6.9.bb +++ /dev/null @@ -1,13 +0,0 @@ -DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \ -It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \ -and the messy, low-level world of C." -SECTION = "devel/python" -PRIORITY = "optional" -LICENSE = "GPL" -SRCNAME = "cython" -PR = "ml0" - -SRC_URI = "http://www.cython.org/${SRCNAME}-${PV}.zip" -S = "${WORKDIR}/${SRCNAME}-${PV}" - -inherit distutils diff --git a/packages/python/python-cython_0.9.8.bb b/packages/python/python-cython_0.9.8.bb new file mode 100644 index 0000000000..f78ba38e87 --- /dev/null +++ b/packages/python/python-cython_0.9.8.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \ +It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \ +and the messy, low-level world of C." +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "GPL" +SRCNAME = "Cython" +PR = "ml0" + +SRC_URI = "http://www.cython.org/${SRCNAME}-${PV}.tar.gz" +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit distutils diff --git a/packages/python/python-pyrex-native_0.9.5.1a.bb b/packages/python/python-pyrex-native_0.9.5.1a.bb deleted file mode 100644 index d7ec81fd8e..0000000000 --- a/packages/python/python-pyrex-native_0.9.5.1a.bb +++ /dev/null @@ -1,9 +0,0 @@ -require python-pyrex_${PV}.bb -inherit native -DEPENDS = "python-native" -RDEPENDS = "" - -do_stage() { - BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ - ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR} -} diff --git a/packages/python/python-pyrex-native_0.9.8.4.bb b/packages/python/python-pyrex-native_0.9.8.4.bb new file mode 100644 index 0000000000..d7ec81fd8e --- /dev/null +++ b/packages/python/python-pyrex-native_0.9.8.4.bb @@ -0,0 +1,9 @@ +require python-pyrex_${PV}.bb +inherit native +DEPENDS = "python-native" +RDEPENDS = "" + +do_stage() { + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR} +} diff --git a/packages/python/python-pyrex_0.9.5.1a.bb b/packages/python/python-pyrex_0.9.5.1a.bb deleted file mode 100644 index d0a5f826e0..0000000000 --- a/packages/python/python-pyrex_0.9.5.1a.bb +++ /dev/null @@ -1,14 +0,0 @@ -DESCRIPTION = "Pyrex is a language specially designed for writing Python extension modules. \ -It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \ -and the messy, low-level world of C." -SECTION = "devel/python" -PRIORITY = "optional" -LICENSE = "GPL" -SRCNAME = "Pyrex" -PR = "ml0" - -SRC_URI = "http://nz.cosc.canterbury.ac.nz/~greg/python/${SRCNAME}/${SRCNAME}-${PV}.tar.gz" - -S = "${WORKDIR}/${SRCNAME}-${PV}" - -inherit distutils diff --git a/packages/python/python-pyrex_0.9.8.4.bb b/packages/python/python-pyrex_0.9.8.4.bb new file mode 100644 index 0000000000..d0a5f826e0 --- /dev/null +++ b/packages/python/python-pyrex_0.9.8.4.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Pyrex is a language specially designed for writing Python extension modules. \ +It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \ +and the messy, low-level world of C." +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "GPL" +SRCNAME = "Pyrex" +PR = "ml0" + +SRC_URI = "http://nz.cosc.canterbury.ac.nz/~greg/python/${SRCNAME}/${SRCNAME}-${PV}.tar.gz" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit distutils -- cgit v1.2.3 From 62a49a5d718a7939d144bc10e4fd970b5f913c1d Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 17:21:03 +0000 Subject: tar: add 1.20 --- packages/tar/tar_1.20.bb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 packages/tar/tar_1.20.bb diff --git a/packages/tar/tar_1.20.bb b/packages/tar/tar_1.20.bb new file mode 100644 index 0000000000..701c0b77bf --- /dev/null +++ b/packages/tar/tar_1.20.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "GNU tar saves many files together into a single tape \ +or disk archive, and can restore individual files from the archive." +SECTION = "base" +LICENSE = "GPLv3" + +SRC_URI = "${GNU_MIRROR}/tar/tar-${PV}.tar.bz2" + +inherit autotools + +do_install () { + autotools_do_install + install -d ${D}${base_bindir} + mv ${D}${bindir}/tar ${D}${base_bindir}/tar.${PN} + mv ${D}${libexecdir}/rmt ${D}${libexecdir}/rmt.${PN} +} + +pkg_postinst_${PN} () { + update-alternatives --install ${base_bindir}/tar tar tar.${PN} 100 + update-alternatives --install ${libexecdir}/rmt rmt rmt.${PN} 100 +} + +pkg_prerm_${PN} () { + update-alternatives --remove tar tar.${PN} + update-alternatives --remove rmt rmt.${PN} +} -- cgit v1.2.3 From 1537b02b0ee6c7220a4b51b605e07caf513a3e2f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 8 Jul 2008 17:34:14 +0000 Subject: webkit-gtk: bump SRCREV --- conf/distro/include/sane-srcrevs.inc | 2 +- packages/webkit/files/update-webkit.sh | 8 -- packages/webkit/webkit-gtk/GNUmakefile.am | 125 +++++++++++++++++---- packages/webkit/webkit-gtk/Makefile | 4 + packages/webkit/webkit-gtk/configure.ac | 163 +++++++++++++++------------- packages/webkit/webkit-gtk/update-webkit.sh | 8 ++ packages/webkit/webkit-gtk_svn.bb | 2 +- 7 files changed, 207 insertions(+), 105 deletions(-) delete mode 100644 packages/webkit/files/update-webkit.sh create mode 100644 packages/webkit/webkit-gtk/update-webkit.sh diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index fcae48f974..05538c244f 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -188,7 +188,7 @@ SRCREV_pn-tmut ?= "60" SRCREV_pn-u-boot-openmoko ?= "4297" SRCREV_pn-usbpath ?= "3172" SRCREV_pn-usbpath-native ?= "3172" -SRCREV_pn-webkit-gtk ?= "32839" +SRCREV_pn-webkit-gtk ?= "35062" SRCREV_pn-webkit-qt ?= "28656" SRCREV_pn-webkit-qtopia ?= "28656" SRCREV_pn-wesnoth ?= "22021" diff --git a/packages/webkit/files/update-webkit.sh b/packages/webkit/files/update-webkit.sh deleted file mode 100644 index e4cc3ebefa..0000000000 --- a/packages/webkit/files/update-webkit.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# usage: sh update-webkit.sh - -export rev=$1 - -for i in acinclude.m4 autogen.sh configure.ac GNUmakefile.am Makefile Makefile.shared ; do - wget "http://trac.webkit.org/browser/trunk/$i?rev=$rev&format=raw" -O $i -done diff --git a/packages/webkit/webkit-gtk/GNUmakefile.am b/packages/webkit/webkit-gtk/GNUmakefile.am index 725c79d3c6..a6ae299039 100644 --- a/packages/webkit/webkit-gtk/GNUmakefile.am +++ b/packages/webkit/webkit-gtk/GNUmakefile.am @@ -14,8 +14,9 @@ # # Sources, headers, flags, etc... should be added to the respective variables # with the above suffix, e.g, webcore-specific sources should go to -# webcore_sources, gtk port-specific flags should go to webkitgtk_cppflags, -# etc... The only exceptions are the global variables. See Global Variables below. +# webcore_sources, gtk port API and WebCoreSupport parts to webkitgtk_sources, +# etc... The only exceptions are the global variables. See Global Variables +# below. # # Global Variables # @@ -37,6 +38,8 @@ GENPROGRAMS := $(top_builddir)/Programs CREATE_HASH_TABLE = $(srcdir)/JavaScriptCore/kjs/create_hash_table # Libraries and support components +bin_PROGRAMS := + noinst_PROGRAMS := lib_LIBRARIES := @@ -71,6 +74,12 @@ global_cxxflags += \ -fno-rtti endif +# -no-undefined required for building DLLs on Windows +# It breaks the build on other platforms, so we use it conditionally +if OS_WIN32 +no_undefined = -no-undefined +endif + # Shared libraries lib_LTLIBRARIES = \ libwebkit-1.0.la @@ -115,17 +124,19 @@ libJavaScriptCore_la_LIBADD = \ -lpthread libJavaScriptCore_la_CXXFLAGS = \ + -fstrict-aliasing \ + -O3 \ $(global_cxxflags) \ $(global_cflags) \ $(GLOBALDEPS_CFLAGS) \ - $(UNICODE_CFLAGS) \ - -fno-strict-aliasing + $(UNICODE_CFLAGS) libJavaScriptCore_la_CFLAGS = \ + -fstrict-aliasing \ + -O3 \ $(global_cflags) \ $(GLOBALDEPS_CFLAGS) \ - $(UNICODE_CFLAGS) \ - -fno-strict-aliasing + $(UNICODE_CFLAGS) libJavaScriptCore_la_CPPFLAGS = \ $(global_cppflags) \ @@ -139,16 +150,22 @@ webcore_headers := webcore_libadd := webcore_built_sources := webcore_built_nosources := +webcoregtk_cppflags := +webcoregtk_sources := +webcoregtk_headers := nodist_libWebCore_la_SOURCES = \ $(webcore_built_sources) libWebCore_la_SOURCES = \ $(webcore_headers) \ - $(webcore_sources) + $(webcore_sources) \ + $(webcoregtk_headers) \ + $(webcoregtk_sources) libWebCore_la_CXXFLAGS = \ -fno-strict-aliasing \ + -O2 \ $(global_cxxflags) \ $(global_cflags) \ $(GLOBALDEPS_CFLAGS) \ @@ -156,6 +173,7 @@ libWebCore_la_CXXFLAGS = \ $(WEBKITDEPS_CFLAGS) \ $(LIBCURL_CFLAGS) \ $(LIBSOUP_CFLAGS) \ + $(FREETYPE_CFLAGS) \ $(SQLITE3_CFLAGS) \ $(GSTREAMER_CFLAGS) \ $(LIBXSLT_CFLAGS) \ @@ -164,12 +182,14 @@ libWebCore_la_CXXFLAGS = \ libWebCore_la_CFLAGS = \ -fno-strict-aliasing \ + -O2 \ $(global_cflags) \ $(GLOBALDEPS_CFLAGS) \ $(UNICODE_CFLAGS) \ $(WEBKITDEPS_CFLAGS) \ $(LIBCURL_CFLAGS) \ $(LIBSOUP_CFLAGS) \ + $(FREETYPE_CFLAGS) \ $(SQLITE3_CFLAGS) \ $(GSTREAMER_CFLAGS) \ $(LIBXSLT_CFLAGS) \ @@ -180,7 +200,7 @@ libWebCore_la_CPPFLAGS = \ $(global_cppflags) \ $(webcore_cppflags) \ $(javascriptcore_cppflags) \ - $(webkitgtk_cppflags) \ + $(webcoregtk_cppflags) \ $(HILDON_CPPFLAGS) libWebCore_la_LIBADD = \ @@ -190,6 +210,7 @@ libWebCore_la_LIBADD = \ $(WEBKITDEPS_LIBS) \ $(LIBCURL_LIBS) \ $(LIBSOUP_LIBS) \ + $(FREETYPE_LIBS) \ $(UNICODE_LIBS) \ $(SQLITE3_LIBS) \ $(GSTREAMER_LIBS) \ @@ -211,7 +232,9 @@ nodist_libwebkit_1_0_la_SOURCES = \ $(webkitgtk_built_sources) libwebkit_1_0_ladir = $(prefix)/include/webkit-1.0/webkit -libwebkit_1_0_la_HEADERS = $(webkitgtk_h_api) +libwebkit_1_0_la_HEADERS = \ + $(webkitgtk_h_api) \ + WebKit/gtk/webkit/webkitenumtypes.h libwebkit_1_0_la_SOURCES = \ $(webkitgtk_headers) \ @@ -224,11 +247,13 @@ libwebkit_1_0_la_CFLAGS = \ $(libWebCore_la_CFLAGS) libwebkit_1_0_la_CPPFLAGS = \ - $(libWebCore_la_CPPFLAGS) + $(libWebCore_la_CPPFLAGS) \ + $(webkitgtk_cppflags) libwebkit_1_0_la_LDFLAGS = \ $(COVERAGE_LDFLAGS) \ - -version-info @LIBWEBKITGTK_VERSION@ + -version-info @LIBWEBKITGTK_VERSION@ \ + $(no_undefined) libwebkit_1_0_la_LIBADD = \ libWebCore.la @@ -236,6 +261,7 @@ libwebkit_1_0_la_LIBADD = \ # # Extra checks and flags global_cppflags += \ + -DBUILDING_CAIRO__=1 \ -DBUILDING_GTK__=1 \ -DWTF_CHANGES @@ -252,7 +278,7 @@ endif if !ENABLE_DEBUG global_cppflags += -DNDEBUG else -webkitgtk_cppflags += \ +webcoregtk_cppflags += \ -DG_DISABLE_DEPRECATED \ -DGDK_PIXBUF_DISABLE_DEPRECATED \ -DGDK_DISABLE_DEPRECATED \ @@ -282,15 +308,11 @@ if ENABLE_VIDEO webcore_libadd += -lgstinterfaces-0.10 -lgstvideo-0.10 endif -webkitgtk_cppflags += \ --I$(top_builddir)/WebKit/gtk/webkit \ --DBUILDING_CAIRO__=1 \ --DBUILD_WEBKIT - webkitgtk_h_api += \ WebKit/gtk/webkit/webkit.h \ WebKit/gtk/webkit/webkitdefines.h \ WebKit/gtk/webkit/webkitnetworkrequest.h \ + WebKit/gtk/webkit/webkitversion.h \ WebKit/gtk/webkit/webkitwebbackforwardlist.h \ WebKit/gtk/webkit/webkitwebframe.h \ WebKit/gtk/webkit/webkitwebhistoryitem.h \ @@ -299,7 +321,9 @@ webkitgtk_h_api += \ webkitgtk_built_sources += \ DerivedSources/webkit-marshal.h \ - DerivedSources/webkit-marshal.cpp + DerivedSources/webkit-marshal.cpp \ + DerivedSources/webkitenumtypes.cpp \ + WebKit/gtk/webkit/webkitenumtypes.h webkitgtk_headers += \ WebKit/gtk/webkit/webkitprivate.h \ @@ -314,6 +338,7 @@ webkitgtk_headers += \ webkitgtk_sources += \ WebKit/gtk/webkit/webkitnetworkrequest.cpp \ WebKit/gtk/webkit/webkitprivate.cpp \ + WebKit/gtk/webkit/webkitversion.cpp \ WebKit/gtk/webkit/webkitwebbackforwardlist.cpp \ WebKit/gtk/webkit/webkitwebframe.cpp \ WebKit/gtk/webkit/webkitwebhistoryitem.cpp \ @@ -327,6 +352,13 @@ webkitgtk_sources += \ WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp \ WebKit/gtk/WebCoreSupport/PasteboardHelperGtk.cpp +webkitgtk_cppflags += \ + -DBUILDING_WEBKIT \ + -I$(srcdir)/WebKit/gtk \ + -I$(srcdir)/WebKit/gtk/WebCoreSupport \ + -I$(srcdir)/WebKit/gtk/webkit \ + -I$(top_builddir)/WebKit/gtk/webkit + webkitgtk_cleanfiles += \ $(top_builddir)/Programs/GtkLauncher \ $(top_builddir)/WebKit/gtk/webkit-1.0.pc @@ -334,12 +366,14 @@ webkitgtk_cleanfiles += \ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = WebKit/gtk/webkit-1.0.pc -WEBKIT_MARSHAL = $(GENSOURCES)/webkit-marshal -WEBKIT_MARSHAL_LIST = $(srcdir)/WebKit/gtk/webkit/webkit-marshal.list - stamp_files := \ stamp-webkit-marshal.cpp \ - stamp-webkit-marshal.h + stamp-webkit-marshal.h \ + stamp-webkitenumtypes.cpp \ + stamp-webkitenumtypes.h + +WEBKIT_MARSHAL = $(GENSOURCES)/webkit-marshal +WEBKIT_MARSHAL_LIST = $(srcdir)/WebKit/gtk/webkit/webkit-marshal.list DerivedSources/webkit-marshal.cpp: stamp-webkit-marshal.cpp @true @@ -356,6 +390,53 @@ stamp-webkit-marshal.h: $(WEBKIT_MARSHAL_LIST) $(GLIB_GENMARSHAL) --prefix=webkit_marshal $(WEBKIT_MARSHAL_LIST) --header > $(WEBKIT_MARSHAL).h && \ echo timestamp > $(@F) +WebKit/gtk/webkit/webkitenumtypes.h: stamp-webkitenumtypes.h + @true +stamp-webkitenumtypes.h: $(webkitgtk_h_api) Makefile + (cd $(srcdir) \ + && glib-mkenums \ + --fhead "#ifndef WEBKIT_ENUM_TYPES_H\n" \ + --fhead "#define WEBKIT_ENUM_TYPES_H\n\n" \ + --fhead "#include \n\n" \ + --fhead "#include \n\n" \ + --fhead "G_BEGIN_DECLS\n\n" \ + --ftail "G_END_DECLS\n\n" \ + --ftail "#endif\n" \ + --fprod "#include <@filename@>\n\n" \ + --eprod "#define WEBKIT_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n\n" \ + --eprod "WEBKIT_API GType\n@enum_name@_get_type(void);\n\n" \ + $(webkitgtk_h_api) | \ + sed 's,WebKit/gtk/,,' | \ + sed 's,web_kit,webkit,' | \ + sed 's,WEBKIT_TYPE_KIT,WEBKIT_TYPE,' \ + ) > xgen-gth \ + && (cmp -s xgen-gth WebKit/gtk/webkit/webkitenumtypes.h || cp xgen-gth WebKit/gtk/webkit/webkitenumtypes.h) \ + && rm -f xgen-gth \ + && echo timestamp > $(@F) + +DerivedSources/webkitenumtypes.cpp: $(webkitgtk_h_api) Makefile + (cd $(srcdir) \ + && glib-mkenums \ + --fhead "#include \n" \ + --fhead "#include \n" \ + --fhead "#include \"$(top_builddir)/WebKit/gtk/webkit/webkitenumtypes.h\"\n\n" \ + --fhead "extern \"C\" {\n\n" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --vhead "static const G@Type@Value _@enum_name@_values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n};\n\n" \ + --vtail "GType @enum_name@_get_type(void)\n{\n" \ + --vtail " static GType type = 0;\n\n" \ + --vtail " if (!type)\n" \ + --vtail " type = g_@type@_register_static(\"@EnumName@\", _@enum_name@_values);\n\n" \ + --vtail " return type;\n}\n\n" \ + --ftail "}\n" \ + $(webkitgtk_h_api) | \ + sed 's,web_kit,webkit,' \ + ) > xgen-gtc \ + && cp xgen-gtc $@ \ + && rm -f xgen-gtc + # END WEBKIT GTK+ # Files that will be cleaned diff --git a/packages/webkit/webkit-gtk/Makefile b/packages/webkit/webkit-gtk/Makefile index fa7ea02426..217a035483 100644 --- a/packages/webkit/webkit-gtk/Makefile +++ b/packages/webkit/webkit-gtk/Makefile @@ -16,6 +16,10 @@ universal u: @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done +x86_64: + @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \ + if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done + 64: @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done diff --git a/packages/webkit/webkit-gtk/configure.ac b/packages/webkit/webkit-gtk/configure.ac index 24488ef6c4..d0aa7c84d1 100644 --- a/packages/webkit/webkit-gtk/configure.ac +++ b/packages/webkit/webkit-gtk/configure.ac @@ -1,11 +1,24 @@ -AC_INIT([WebKit],[0.1],[http://bugs.webkit.org/]) - AC_PREREQ(2.59) +m4_define([webkit_major_version], [1]) +m4_define([webkit_minor_version], [0]) +m4_define([webkit_micro_version], [2]) + +AC_INIT([WebKit],[webkit_major_version.webkit_minor_version.webkit_micro_version],[http://bugs.webkit.org/]) + AC_CONFIG_HEADERS([aconfig.h]) + +WEBKIT_MAJOR_VERSION=webkit_major_version +WEBKIT_MINOR_VERSION=webkit_minor_version +WEBKIT_MICRO_VERSION=webkit_micro_version +AC_SUBST(WEBKIT_MAJOR_VERSION) +AC_SUBST(WEBKIT_MINOR_VERSION) +AC_SUBST(WEBKIT_MICRO_VERSION) + AC_CONFIG_SRCDIR([WebCore/config.h]) -# see http://www.gnu.org/software/libtool/manual.html#Versioning +dnl # Libtool library version, not to confuse with API version +dnl # see http://www.gnu.org/software/libtool/manual.html#Versioning LIBWEBKITGTK_VERSION=1:0:0 AC_SUBST([LIBWEBKITGTK_VERSION]) @@ -38,23 +51,24 @@ case "$host" in ;; esac -# If CXXFLAGS and CFLAGS are unset, default to -O2 +# If CXXFLAGS and CFLAGS are unset, default to empty. # This is to tell automake not to include '-g' if CXXFLAGS is not set # For more info - http://www.gnu.org/software/automake/manual/autoconf.html#C_002b_002b-Compiler if test -z "$CXXFLAGS"; then - CXXFLAGS="-O2" + CXXFLAGS="" fi if test -z "$CFLAGS"; then - CFLAGS="-O2" + CFLAGS="" fi -# programs -AC_DISABLE_STATIC -AM_PROG_LIBTOOL -AC_PROG_INSTALL AM_PROG_CC_STDC -AC_PROG_CXX AM_PROG_CC_C_O +AC_PROG_CXX +AC_PROG_INSTALL +AC_DISABLE_STATIC +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL +DOLT # check for -fvisibility=hidden compiler support (GCC >= 4) saved_CFLAGS="$CFLAGS" @@ -147,10 +161,12 @@ esac AC_MSG_RESULT([$unicode_backend]) if test "$unicode_backend" = "icu"; then - # check for icu-config if test "$os_darwin" = "yes"; then UNICODE_CFLAGS="-I\$(srcdir)/JavaScriptCore/icu -I\$(srcdir)/WebCore/icu" UNICODE_LIBS="-licucore" + elif test "$os_win32" = "yes"; then + UNICODE_CFLAGS="" + UNICODE_LIBS="-licuin -licuuc" else AC_PATH_PROG(icu_config, icu-config, no) if test "$icu_config" = "no"; then @@ -243,9 +259,6 @@ PKG_CHECK_MODULES([WEBKITDEPS], [gtk+-2.0 >= $GTK_REQUIRED_VERSION pango >= $PANGO_REQUIRED_VERSION cairo >= $CAIRO_REQUIRED_VERSION - cairo-ft, - fontconfig >= $FONTCONFIG_REQUIRED_VERSION - freetype2 >= $FREETYPE2_REQUIRED_VERSION libxml-2.0 >= $LIBXML_REQUIRED_VERSION]) AC_SUBST([WEBKITDEPS_CFLAGS]) AC_SUBST([WEBKITDEPS_LIBS]) @@ -266,14 +279,6 @@ AC_ARG_ENABLE(dashboard_support, [],[enable_dashboard_support="yes"]) AC_MSG_RESULT([$enable_dashboard_support]) -# check whether to build with cross-document messaging support -AC_MSG_CHECKING([whether to enable HTML5 cross-document messaging support]) -AC_ARG_ENABLE(cross_document_messaging, - AC_HELP_STRING([--enable-cross-document-messaging], - [enable HTML5 cross-document messaging support [default=yes]]), - [],[enable_cross_document_messaging="yes"]) -AC_MSG_RESULT([$enable_cross_document_messaging]) - # check whether to enable HTML5 Offline Web Applications support AC_MSG_CHECKING([whether to enable HTML5 offline web applications support]) AC_ARG_ENABLE(offline_web_applications, @@ -286,8 +291,8 @@ AC_MSG_RESULT([$enable_offline_web_applications]) AC_MSG_CHECKING([whether to enable HTML5 client-side session and persistent storage support]) AC_ARG_ENABLE(dom_storage, AC_HELP_STRING([--enable-dom-storage], - [enable HTML5 client-side session and persistent storage support [default=no]]), - [],[enable_dom_storage="no"]) + [enable HTML5 client-side session and persistent storage support [default=yes]]), + [],[enable_dom_storage="yes"]) AC_MSG_RESULT([$enable_dom_storage]) # check whether to build with database support @@ -302,8 +307,8 @@ AC_MSG_RESULT([$enable_database]) AC_MSG_CHECKING([whether to enable icon database support]) AC_ARG_ENABLE(icon_database, AC_HELP_STRING([--enable-icon-database], - [enable icon database [default=no]]), - [],[enable_icon_database="no"]) + [enable icon database [default=yes]]), + [],[enable_icon_database="yes"]) AC_MSG_RESULT([$enable_icon_database]) # check whether to enable HTML5 audio/video support @@ -330,39 +335,30 @@ AC_ARG_ENABLE(xslt, [],[enable_xslt="yes"]) AC_MSG_RESULT([$enable_xslt]) -# check whether to enable SVG experimental features -# Enable all SVG if it is -AC_MSG_CHECKING([whether to enable SVG experimental features]) -AC_ARG_ENABLE(svg_experimental, - AC_HELP_STRING([--enable-svg-experimental], - [enable support for SVG experimental features [default=no]]), - [],[enable_svg_experimental="no"]) -AC_MSG_RESULT([$enable_svg_experimental]) - -if test "$enable_svg_experimental" = "yes"; then - enable_svg=yes - enable_svg_animation=yes -# enable_svg_filters=yes - enable_svg_fonts=yes - enable_svg_foreign_object=yes - enable_svg_as_image=yes - enable_svg_use_element=yes -fi - # check whether to enable SVG support AC_MSG_CHECKING([whether to enable SVG support]) AC_ARG_ENABLE(svg, AC_HELP_STRING([--enable-svg], - [enable support for SVG [default=no]]), - [],[enable_svg="no"]) + [enable support for SVG [default=yes]]), + [],[enable_svg="yes"]) AC_MSG_RESULT([$enable_svg]) +# turn off svg features if --disable-svg is requested +if test "$enable_svg" = "no"; then + enable_svg_animation=no + enable_svg_filters=no + enable_svg_fonts=no + enable_svg_foreign_object=no + enable_svg_as_image=no + enable_svg_use_element=no +fi + # check whether to enable support for SVG animation AC_MSG_CHECKING([whether to enable support for SVG animation]) AC_ARG_ENABLE(svg_animation, AC_HELP_STRING([--enable-svg-animation], - [enable support for SVG animation (experimental) [default=no]]), - [],[enable_svg_animation="no"]) + [enable support for SVG animation (experimental) [default=yes]]), + [],[enable_svg_animation="yes"]) AC_MSG_RESULT([$enable_svg_animation]) # check whether to enable support for SVG filters @@ -377,34 +373,48 @@ AC_MSG_RESULT([$enable_svg_filters]) AC_MSG_CHECKING([whether to enable support for SVG fonts]) AC_ARG_ENABLE(svg_fonts, AC_HELP_STRING([--enable-svg-fonts], - [enable support for SVG fonts (experimental) [default=no]]), - [],[enable_svg_fonts="no"]) + [enable support for SVG fonts (experimental) [default=yes]]), + [],[enable_svg_fonts="yes"]) AC_MSG_RESULT([$enable_svg_fonts]) # check whether to enable foreign objects support for SVG AC_MSG_CHECKING([whether to enable support for SVG foreign objects]) AC_ARG_ENABLE(svg_foreign_object, AC_HELP_STRING([--enable-svg-foreign-object], - [enable support for SVG foreign objects (experimental) [default=no]]), - [],[enable_svg_foreign_object="no"]) + [enable support for SVG foreign objects (experimental) [default=yes]]), + [],[enable_svg_foreign_object="yes"]) AC_MSG_RESULT([$enable_svg_foreign_object]) # check whether to enable SVG As Image support AC_MSG_CHECKING([whether to enable SVG as Image support]) AC_ARG_ENABLE(svg_as_image, AC_HELP_STRING([--enable-svg-as-image], - [enable SVG as Image support (experimental) [default=no]]), - [],[enable_svg_as_image="no"]) + [enable SVG as Image support (experimental) [default=yes]]), + [],[enable_svg_as_image="yes"]) AC_MSG_RESULT([$enable_svg_as_image]) # check whether to enable SVG USE element support AC_MSG_CHECKING([whether to enable support for SVG use element]) AC_ARG_ENABLE(svg_use_element, AC_HELP_STRING([--enable-svg-use-element], - [enable SVG use element support (experimental) [default=no]]), - [],[enable_svg_use_element="no"]) + [enable SVG use element support (experimental) [default=yes]]), + [],[enable_svg_use_element="yes"]) AC_MSG_RESULT([$enable_svg_use_element]) +# check for SVG features, enabling SVG if necessary +if test "$enable_svg_animation" = "yes" || \ + test "$enable_svg_filters" = "yes" || \ + test "$enable_svg_fonts" = "yes" || \ + test "$enable_svg_foreign_object" = "yes" || \ + test "$enable_svg_as_image" = "yes" || \ + test "$enable_svg_use_element" = "yes"; then + svg_flags=yes + if test "$enable_svg" = "no"; then + AC_MSG_WARN([SVG feature(s) requested but SVG is disabled.. Enabling SVG support]) + enable_svg=yes + fi +fi + # check whether to enable code coverage AC_MSG_CHECKING([whether to enable code coverage support]) AC_ARG_ENABLE(coverage, @@ -444,6 +454,9 @@ fi if test "$with_http_backend" = "curl"; then PKG_CHECK_MODULES([LIBCURL], [libcurl >= $LIBCURL_REQUIRED_VERSION]) + if test "$os_win32" = "yes"; then + LIBCURL_LIBS="$LIBCURL_LIBS -lWs2_32" + fi AC_SUBST([LIBCURL_CFLAGS]) AC_SUBST([LIBCURL_LIBS]) fi @@ -455,8 +468,21 @@ if test "$with_http_backend" = "soup"; then AC_SUBST([LIBSOUP_LIBS]) fi +# check if FreeType/FontConfig are available +if test "$with_font_backend" = "freetype"; then + PKG_CHECK_MODULES([FREETYPE], + [cairo-ft + fontconfig >= $FONTCONFIG_REQUIRED_VERSION + freetype2 >= $FREETYPE2_REQUIRED_VERSION]) + AC_SUBST([FREETYPE_CFLAGS]) + AC_SUBST([FREETYPE_LIBS]) +fi + # check if sqlite 3 is available -if test "$enable_icon_database" = "yes" || test "$enable_database" = "yes"; then +if test "$enable_icon_database" = "yes" || \ + test "$enable_database" = "yes" || \ + test "$enable_offline_web_applications" = "yes" || \ + test "$enable_dom_storage" = "yes"; then PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= $SQLITE_REQUIRED_VERSION]) AC_SUBST([SQLITE3_CFLAGS]) AC_SUBST([SQLITE3_LIBS]) @@ -488,18 +514,9 @@ if test "$enable_coverage" = "yes"; then AC_SUBST([COVERAGE_LDFLAGS]) fi -# check for SVG features, enabling SVG if necessary -if test "$enable_svg_animation" = "yes" || \ - test "$enable_svg_filters" = "yes" || \ - test "$enable_svg_fonts" = "yes" || \ - test "$enable_svg_foreign_object" = "yes" || \ - test "$enable_svg_as_image" = "yes" || \ - test "$enable_svg_use_element" = "yes"; then - svg_flags=yes - if test "$enable_svg" = "no"; then - AC_MSG_WARN([SVG feature(s) requested but SVG is disabled.. Enabling SVG support]) - enable_svg=yes - fi +# check for HTML features +if test "$enable_video" = "yes"; then + html_flags=yes fi # OS conditionals @@ -525,7 +542,6 @@ AM_CONDITIONAL([USE_PANGO], [test "$with_font_backend" = "pango"]) # WebKit feature conditionals AM_CONDITIONAL([ENABLE_DEBUG],[test "$enable_debug" = "yes"]) AM_CONDITIONAL([ENABLE_DASHBOARD_SUPPORT],[test "$enable_dashboard_support" = "yes"]) -AM_CONDITIONAL([ENABLE_CROSS_DOCUMENT_MESSAGING],[test "$enable_cross_document_messaging" = "yes"]) AM_CONDITIONAL([ENABLE_OFFLINE_WEB_APPLICATIONS],[test "$enable_offline_web_applications" = "yes"]) AM_CONDITIONAL([ENABLE_DOM_STORAGE],[test "$enable_dom_storage" = "yes"]) AM_CONDITIONAL([ENABLE_DATABASE],[test "$enable_database" = "yes"]) @@ -543,10 +559,12 @@ AM_CONDITIONAL([ENABLE_SVG_USE],[test "$enable_svg_use_element" = "yes"]) AM_CONDITIONAL([ENABLE_COVERAGE],[test "$enable_coverage" = "yes"]) AM_CONDITIONAL([ENABLE_FAST_MALLOC],[test "$enable_fast_malloc" = "yes"]) AM_CONDITIONAL([SVG_FLAGS],[test "$svg_flags" = "yes"]) +AM_CONDITIONAL([HTML_FLAGS],[test "$html_flags" = "yes"]) AC_CONFIG_FILES([ GNUmakefile WebKit/gtk/webkit-1.0.pc:WebKit/gtk/webkit.pc.in +WebKit/gtk/webkit/webkitversion.h ] ) @@ -564,7 +582,6 @@ Build configuration: Optimized memory allocator : $enable_fast_malloc Features: Dashboard support : $enable_dashboard_support - HTML5 cross-document messaging : $enable_cross_document_messaging HTML5 offline web applications support : $enable_offline_web_applications HTML5 client-side session and persistent storage support : $enable_dom_storage HTML5 client-side database storage support : $enable_database diff --git a/packages/webkit/webkit-gtk/update-webkit.sh b/packages/webkit/webkit-gtk/update-webkit.sh new file mode 100644 index 0000000000..e4cc3ebefa --- /dev/null +++ b/packages/webkit/webkit-gtk/update-webkit.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# usage: sh update-webkit.sh + +export rev=$1 + +for i in acinclude.m4 autogen.sh configure.ac GNUmakefile.am Makefile Makefile.shared ; do + wget "http://trac.webkit.org/browser/trunk/$i?rev=$rev&format=raw" -O $i +done diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb index 11e08ac6ac..06f869ef48 100644 --- a/packages/webkit/webkit-gtk_svn.bb +++ b/packages/webkit/webkit-gtk_svn.bb @@ -24,7 +24,7 @@ SRC_URI = "\ S = "${WORKDIR}/" -inherit autotools pkgconfig +inherit autotools pkgconfig lib_package EXTRA_OECONF = "\ --enable-debug=no \ -- cgit v1.2.3 From 8b809e198d84cc9862f195ba35d22479a2dbe0b5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 09:20:32 +0000 Subject: qt4: fix typos in do_split_packages --- packages/qt4/qt_packaging.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/qt4/qt_packaging.inc b/packages/qt4/qt_packaging.inc index a0d4bf8bbc..b291925982 100644 --- a/packages/qt4/qt_packaging.inc +++ b/packages/qt4/qt_packaging.inc @@ -137,11 +137,11 @@ FILES_${QT_BASE_NAME}-fonts = "${libdir}/fonts" python populate_packages_prepend() { translation_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/translations/', d) translation_name = bb.data.expand('${QT_BASE_NAME}-translation-%s', d) - do_split_packages(d, translation_dir, '^qt_(.*)\.qm$', translation_name, '{PN} translation for %s', extra_depends='' ) + do_split_packages(d, translation_dir, '^qt_(.*)\.qm$', translation_name, '${PN} translation for %s', extra_depends='' ) phrasebook_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/phrasebooks/', d) phrasebook_name = bb.data.expand('${QT_BASE_NAME}-phrasebook-%s', d) - do_split_packages(d, phrasebook_dir, '^(.*)\.qph$', phrasebook_name, '{PN} phrasebook for %s', extra_depends='' ) + do_split_packages(d, phrasebook_dir, '^(.*)\.qph$', phrasebook_name, '${PN} phrasebook for %s', extra_depends='' ) # Package all the plugins and their -dbg version and create a meta package import os @@ -158,7 +158,7 @@ python populate_packages_prepend() { plugin_name = bb.data.expand('${QT_BASE_NAME}-plugin-%s-%%s' % name, d) dev_packages = [] dev_hook = lambda file,pkg,b,c,d:dev_packages.append((file,pkg)) - do_split_packages(d, plugin_dir, glob, plugin_name, '{PN} %s for %%s' % name, extra_depends='', hook=dev_hook) + do_split_packages(d, plugin_dir, glob, plugin_name, '${PN} %s for %%s' % name, extra_depends='', hook=dev_hook) # Create a -dbg package as well plugin_dir_dbg = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/.debug' % path, d) packages = bb.data.getVar('PACKAGES',d) @@ -166,7 +166,7 @@ python populate_packages_prepend() { packages = "%s %s-dbg" % (packages, package) file_name = os.path.join(plugin_dir_dbg, os.path.basename(file)) bb.data.setVar("FILES_%s-dbg" % package, file_name, d) - bb.data.setVar("DESCRIPTION_%s-dbg" % package, "{PN} %s for %s" % (name, package), d) + bb.data.setVar("DESCRIPTION_%s-dbg" % package, "${PN} %s for %s" % (name, package), d) bb.data.setVar('PACKAGES', packages, d) -- cgit v1.2.3 From f95ed4952bc7884a30e8a33e1a7066f36be257d1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 10:07:17 +0000 Subject: linux-omap2 git: sync with Sakomans tree --- packages/linux/linux-omap2-git/omap3evm/defconfig | 177 ++- packages/linux/linux-omap2-git/omap3evm/soc.patch | 1173 ++++++++++++++++++++ .../omap3evm/timer-suppression.patch | 43 + .../linux-omap2-git/omap3evm/touchscreen.patch | 22 + 4 files changed, 1354 insertions(+), 61 deletions(-) create mode 100644 packages/linux/linux-omap2-git/omap3evm/soc.patch create mode 100644 packages/linux/linux-omap2-git/omap3evm/timer-suppression.patch create mode 100644 packages/linux/linux-omap2-git/omap3evm/touchscreen.patch diff --git a/packages/linux/linux-omap2-git/omap3evm/defconfig b/packages/linux/linux-omap2-git/omap3evm/defconfig index f74cef90ee..e61fad48d9 100644 --- a/packages/linux/linux-omap2-git/omap3evm/defconfig +++ b/packages/linux/linux-omap2-git/omap3evm/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.26-rc3-omap1 -# Wed May 21 07:38:41 2008 +# Linux kernel version: 2.6.26-rc5-omap1 +# Sun Jun 15 21:58:01 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -42,7 +42,8 @@ CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set # CONFIG_TASKSTATS is not set # CONFIG_AUDIT is not set -# CONFIG_IKCONFIG is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=14 # CONFIG_CGROUPS is not set CONFIG_GROUP_SCHED=y @@ -170,9 +171,9 @@ CONFIG_ARCH_OMAP3=y # # OMAP Feature Selections # -CONFIG_OMAP_DEBUG_SRAM_PATCH=y # CONFIG_OMAP_DEBUG_POWERDOMAIN is not set # CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set +# CONFIG_OMAP_SMARTREFLEX is not set # CONFIG_OMAP_RESET_CLOCKS is not set CONFIG_OMAP_BOOT_TAG=y CONFIG_OMAP_BOOT_REASON=y @@ -186,9 +187,9 @@ CONFIG_OMAP_MCBSP=y CONFIG_OMAP_32K_TIMER=y CONFIG_OMAP_32K_TIMER_HZ=128 CONFIG_OMAP_DM_TIMER=y -# CONFIG_OMAP_LL_DEBUG_UART1 is not set +CONFIG_OMAP_LL_DEBUG_UART1=y # CONFIG_OMAP_LL_DEBUG_UART2 is not set -CONFIG_OMAP_LL_DEBUG_UART3=y +# CONFIG_OMAP_LL_DEBUG_UART3 is not set CONFIG_ARCH_OMAP34XX=y CONFIG_ARCH_OMAP3430=y @@ -232,10 +233,6 @@ CONFIG_ARM_THUMB=y # CONFIG_ARM_THUMBEE is not set # CONFIG_CPU_ICACHE_DISABLE is not set # CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_LOCKDOWN_TO_64K_L2 is not set -# CONFIG_CPU_LOCKDOWN_TO_128K_L2 is not set -CONFIG_CPU_LOCKDOWN_TO_256K_L2=y -# CONFIG_CPU_L2CACHE_DISABLE is not set # CONFIG_CPU_BPREDICT_DISABLE is not set CONFIG_HAS_TLS_REG=y # CONFIG_OUTER_CACHE is not set @@ -257,7 +254,7 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y # CONFIG_PREEMPT is not set CONFIG_HZ=128 CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y +# CONFIG_OABI_COMPAT is not set # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y @@ -285,6 +282,15 @@ CONFIG_CMDLINE=" quiet " # CONFIG_XIP_KERNEL is not set # CONFIG_KEXEC is not set +# +# CPUIdle +# + +# +# CPU idle PM support +# +# CONFIG_CPU_IDLE is not set + # # CPU Frequency scaling # @@ -297,9 +303,6 @@ CONFIG_CMDLINE=" quiet " # # At least one emulation must be selected # -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set CONFIG_VFP=y CONFIG_VFPv3=y # CONFIG_NEON is not set @@ -593,9 +596,42 @@ CONFIG_HAVE_IDE=y # SCSI device support # # CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set # CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set # CONFIG_ATA is not set # CONFIG_MD is not set CONFIG_NETDEVICES=y @@ -697,7 +733,10 @@ CONFIG_INPUT=y # # Userland interfaces # -# CONFIG_INPUT_MOUSEDEV is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 # CONFIG_INPUT_JOYDEV is not set CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVBUG=y @@ -714,7 +753,18 @@ CONFIG_INPUT_KEYBOARD=y # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_LM8323 is not set # CONFIG_KEYBOARD_GPIO is not set -# CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y @@ -737,7 +787,10 @@ CONFIG_TOUCHSCREEN_ADS7846=y # # Hardware I/O ports # -# CONFIG_SERIO is not set +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=y +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set # CONFIG_GAMEPORT is not set # @@ -950,9 +1003,17 @@ CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set # CONFIG_LOGO is not set # @@ -966,9 +1027,11 @@ CONFIG_SOUND=y CONFIG_SND=y CONFIG_SND_TIMER=y CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=y +CONFIG_SND_RAWMIDI=y # CONFIG_SND_SEQUENCER is not set CONFIG_SND_OSSEMUL=y -# CONFIG_SND_MIXER_OSS is not set +CONFIG_SND_MIXER_OSS=y CONFIG_SND_PCM_OSS=y CONFIG_SND_PCM_OSS_PLUGINS=y # CONFIG_SND_DYNAMIC_MINORS is not set @@ -1003,7 +1066,7 @@ CONFIG_SND_PCM_XRUN_DEBUG=y # # USB devices # -# CONFIG_SND_USB_AUDIO is not set +CONFIG_SND_USB_AUDIO=y # CONFIG_SND_USB_CAIAQ is not set # @@ -1027,8 +1090,6 @@ CONFIG_SND_SOC_TWL4030=y # Open Sound System # CONFIG_SOUND_PRIME=y -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_DEBUG is not set @@ -1077,7 +1138,7 @@ CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_SL811_HCD=y CONFIG_USB_R8A66597_HCD=y -CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_MUSB_HDRC=y CONFIG_USB_MUSB_SOC=y # @@ -1086,7 +1147,6 @@ CONFIG_USB_MUSB_SOC=y CONFIG_USB_MUSB_HOST=y # CONFIG_USB_MUSB_PERIPHERAL is not set # CONFIG_USB_MUSB_OTG is not set -# CONFIG_USB_GADGET_MUSB_HDRC is not set CONFIG_USB_MUSB_HDRC_HCD=y # CONFIG_MUSB_PIO_ONLY is not set CONFIG_USB_INVENTRA_DMA=y @@ -1098,6 +1158,7 @@ CONFIG_USB_MUSB_LOGLEVEL=0 # # CONFIG_USB_ACM is not set # CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set # # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' @@ -1106,12 +1167,27 @@ CONFIG_USB_MUSB_LOGLEVEL=0 # # may also be needed; see USB_STORAGE Help for more information # -# CONFIG_USB_LIBUSUAL is not set +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +CONFIG_USB_LIBUSUAL=y # # USB Imaging devices # # CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set CONFIG_USB_MON=y # @@ -1142,34 +1218,8 @@ CONFIG_USB_MON=y # CONFIG_USB_TRANCEVIBRATOR is not set # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set -CONFIG_USB_GADGET=m -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_ATMEL_USBA is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_PXA27X is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -CONFIG_USB_GADGET_OMAP=y -CONFIG_USB_OMAP=m -# CONFIG_USB_GADGET_S3C2410 is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=m -CONFIG_USB_ETH_RNDIS=y -CONFIG_USB_GADGETFS=m -CONFIG_USB_FILE_STORAGE=m -# CONFIG_USB_FILE_STORAGE_TEST is not set -CONFIG_USB_G_SERIAL=m -# CONFIG_USB_MIDI_GADGET is not set -CONFIG_USB_G_PRINTER=m +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_GADGET is not set CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set CONFIG_MMC_UNSAFE_RESUME=y @@ -1180,6 +1230,7 @@ CONFIG_MMC_UNSAFE_RESUME=y CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK_BOUNCE=y CONFIG_SDIO_UART=m +# CONFIG_MMC_TEST is not set # # MMC/SD Host Controller Drivers @@ -1259,7 +1310,7 @@ CONFIG_EXT3_FS=y CONFIG_JBD=y # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set -# CONFIG_FS_POSIX_ACL is not set +CONFIG_FS_POSIX_ACL=y CONFIG_XFS_FS=m CONFIG_XFS_QUOTA=y # CONFIG_XFS_POSIX_ACL is not set @@ -1327,12 +1378,14 @@ 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_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y CONFIG_JFFS2_COMPRESSION_OPTIONS=y CONFIG_JFFS2_ZLIB=y -# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_LZO=y CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set +CONFIG_JFFS2_RUBIN=y # CONFIG_JFFS2_CMODE_NONE is not set CONFIG_JFFS2_CMODE_PRIORITY=y # CONFIG_JFFS2_CMODE_SIZE is not set @@ -1461,7 +1514,7 @@ CONFIG_FRAME_POINTER=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_ERRORS is not set # CONFIG_DEBUG_STACK_USAGE is not set -CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_LL is not set # CONFIG_DEBUG_ICEDCC is not set # @@ -1561,6 +1614,8 @@ CONFIG_CRC32=y CONFIG_LIBCRC32C=y CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y CONFIG_PLIST=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y diff --git a/packages/linux/linux-omap2-git/omap3evm/soc.patch b/packages/linux/linux-omap2-git/omap3evm/soc.patch new file mode 100644 index 0000000000..bb97403f29 --- /dev/null +++ b/packages/linux/linux-omap2-git/omap3evm/soc.patch @@ -0,0 +1,1173 @@ +diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig +index 3903ab7..468536d 100644 +--- a/sound/soc/codecs/Kconfig ++++ b/sound/soc/codecs/Kconfig +@@ -44,3 +44,7 @@ config SND_SOC_CS4270_VD33_ERRATA + config SND_SOC_TLV320AIC3X + tristate + depends on SND_SOC && I2C ++ ++config SND_SOC_TWL4030 ++ tristate ++ depends on SND_SOC && I2C +diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile +index 4e1314c..d2c0b12 100644 +--- a/sound/soc/codecs/Makefile ++++ b/sound/soc/codecs/Makefile +@@ -6,6 +6,7 @@ snd-soc-wm9712-objs := wm9712.o + snd-soc-wm9713-objs := wm9713.o + snd-soc-cs4270-objs := cs4270.o + snd-soc-tlv320aic3x-objs := tlv320aic3x.o ++snd-soc-twl4030-objs := twl4030.o + + obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o + obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o +@@ -15,3 +16,4 @@ obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o + obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o + obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o + obj-$(CONFIG_SND_SOC_TLV320AIC3X) += snd-soc-tlv320aic3x.o ++obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o +diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c +new file mode 100644 +index 0000000..c9eee19 +--- /dev/null ++++ b/sound/soc/codecs/twl4030.c +@@ -0,0 +1,595 @@ ++/* ++ * ALSA SoC TWL4030 codec driver ++ * ++ * Author: Steve Sakoman, ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "twl4030.h" ++ ++/* ++ * twl4030 register cache & default register settings ++ */ ++static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = { ++ 0x00, // this register not used ++ 0x93, // REG_CODEC_MODE (0x1) ++ 0xc3, // REG_OPTION (0x2) ++ 0x00, // REG_UNKNOWN (0x3) ++ 0x00, // REG_MICBIAS_CTL (0x4) ++ 0x34, // REG_ANAMICL (0x5) ++ 0x14, // REG_ANAMICR (0x6) ++ 0x0a, // REG_AVADC_CTL (0x7) ++ 0x00, // REG_ADCMICSEL (0x8) ++ 0x00, // REG_DIGMIXING (0x9) ++ 0x0c, // REG_ATXL1PGA (0xA) ++ 0x0c, // REG_ATXR1PGA (0xB) ++ 0x00, // REG_AVTXL2PGA (0xC) ++ 0x00, // REG_AVTXR2PGA (0xD) ++ 0x01, // REG_AUDIO_IF (0xE) ++ 0x00, // REG_VOICE_IF (0xF) ++ 0x00, // REG_ARXR1PGA (0x10) ++ 0x00, // REG_ARXL1PGA (0x11) ++ 0x6c, // REG_ARXR2PGA (0x12) ++ 0x6c, // REG_ARXL2PGA (0x13) ++ 0x00, // REG_VRXPGA (0x14) ++ 0x00, // REG_VSTPGA (0x15) ++ 0x00, // REG_VRX2ARXPGA (0x16) ++ 0x0c, // REG_AVDAC_CTL (0x17) ++ 0x00, // REG_ARX2VTXPGA (0x18) ++ 0x00, // REG_ARXL1_APGA_CTL (0x19) ++ 0x00, // REG_ARXR1_APGA_CTL (0x1A) ++ 0x4b, // REG_ARXL2_APGA_CTL (0x1B) ++ 0x4b, // REG_ARXR2_APGA_CTL (0x1C) ++ 0x00, // REG_ATX2ARXPGA (0x1D) ++ 0x00, // REG_BT_IF (0x1E) ++ 0x00, // REG_BTPGA (0x1F) ++ 0x00, // REG_BTSTPGA (0x20) ++ 0x00, // REG_EAR_CTL (0x21) ++ 0x24, // REG_HS_SEL (0x22) ++ 0x0a, // REG_HS_GAIN_SET (0x23) ++ 0x00, // REG_HS_POPN_SET (0x24) ++ 0x00, // REG_PREDL_CTL (0x25) ++ 0x00, // REG_PREDR_CTL (0x26) ++ 0x00, // REG_PRECKL_CTL (0x27) ++ 0x00, // REG_PRECKR_CTL (0x28) ++ 0x00, // REG_HFL_CTL (0x29) ++ 0x00, // REG_HFR_CTL (0x2A) ++ 0x00, // REG_ALC_CTL (0x2B) ++ 0x00, // REG_ALC_SET1 (0x2C) ++ 0x00, // REG_ALC_SET2 (0x2D) ++ 0x00, // REG_BOOST_CTL (0x2E) ++ 0x01, // REG_SOFTVOL_CTL (0x2F) ++ 0x00, // REG_DTMF_FREQSEL (0x30) ++ 0x00, // REG_DTMF_TONEXT1H (0x31) ++ 0x00, // REG_DTMF_TONEXT1L (0x32) ++ 0x00, // REG_DTMF_TONEXT2H (0x33) ++ 0x00, // REG_DTMF_TONEXT2L (0x34) ++ 0x00, // REG_DTMF_TONOFF (0x35) ++ 0x00, // REG_DTMF_WANONOFF (0x36) ++ 0x00, // REG_I2S_RX_SCRAMBLE_H (0x37) ++ 0x00, // REG_I2S_RX_SCRAMBLE_M (0x38) ++ 0x00, // REG_I2S_RX_SCRAMBLE_L (0x39) ++ 0x16, // REG_APLL_CTL (0x3A) ++ 0x00, // REG_DTMF_CTL (0x3B) ++ 0x00, // REG_DTMF_PGA_CTL2 (0x3C) ++ 0x00, // REG_DTMF_PGA_CTL1 (0x3D) ++ 0x00, // REG_MISC_SET_1 (0x3E) ++ 0x00, // REG_PCMBTMUX (0x3F) ++ 0x00, // REG_RX_PATH_SEL (0x43) ++ 0x00, // REG_VDL_APGA_CTL (0x44) ++ 0x00, // REG_VIBRA_CTL (0x45) ++ 0x00, // REG_VIBRA_SET (0x46) ++ 0x00, // REG_VIBRA_PWM_SET (0x47) ++ 0x00, // REG_ANAMIC_GAIN (0x48) ++ 0x00, // REG_MISC_SET_2 (0x49) ++}; ++ ++static void twl4030_dump_registers(void) ++{ ++ int i = 0; ++ u8 data; ++ ++ printk(KERN_INFO "TWL 4030 Register dump for Audio Module\n"); ++ ++ for (i = REG_CODEC_MODE; i <= REG_MISC_SET_2; i++) { ++ twl4030_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &data, i); ++ printk(KERN_INFO "Register[0x%02x]=0x%02x\n", i, data); ++ } ++} ++ ++struct twl4030_priv { ++ unsigned int dummy; ++}; ++ ++/* ++ * read twl4030 register cache ++ */ ++static inline unsigned int twl4030_read_reg_cache(struct snd_soc_codec *codec, ++ unsigned int reg) ++{ ++ u8 *cache = codec->reg_cache; ++ ++ return cache[reg]; ++} ++ ++/* ++ * write twl4030 register cache ++ */ ++static inline void twl4030_write_reg_cache(struct snd_soc_codec *codec, ++ u8 reg, u8 value) ++{ ++ u8 *cache = codec->reg_cache; ++ ++ if (reg >= TWL4030_CACHEREGNUM) ++ return; ++ cache[reg] = value; ++} ++ ++/* ++ * write to the twl4030 register space ++ */ ++static int twl4030_write(struct snd_soc_codec *codec, ++ unsigned int reg, unsigned int value) ++{ ++ twl4030_write_reg_cache(codec, reg, value); ++ return twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, value, reg); ++} ++ ++static void twl4030_init_chip(void) ++{ ++ unsigned char byte; ++ int i; ++ ++ twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, ++ twl4030_reg[REG_CODEC_MODE] & 0xfd, REG_CODEC_MODE); ++ ++ udelay(10); /* 10 ms delay for power settling */ ++ ++ for (i = REG_OPTION; i <= REG_MISC_SET_2; i++) { ++ twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, twl4030_reg[i], i); ++ } ++ ++ twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, ++ twl4030_reg[REG_CODEC_MODE], REG_CODEC_MODE); ++ ++ udelay(10); /* 10 ms delay for power settling */ ++ ++ /* initiate offset cancellation */ ++ twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, ++ twl4030_reg[REG_ANAMICL] | 0x80, REG_ANAMICL); ++ ++ /* wait for offset cancellation to complete */ ++ twl4030_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &byte, REG_ANAMICL); ++ while ((byte & 0x80) == 0x80) ++ twl4030_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &byte, REG_ANAMICL); ++ ++ twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, ++ twl4030_reg[REG_MISC_SET_1] | 0x02, REG_MISC_SET_1); ++ ++ twl4030_dump_registers(); ++} ++ ++static const struct snd_kcontrol_new twl4030_snd_controls[] = { ++ SOC_DOUBLE_R("Master Playback Volume", ++ REG_ARXL2PGA, REG_ARXR2PGA, ++ 0, 127, 0), ++ SOC_DOUBLE_R("Capture Volume", ++ REG_ATXL1PGA, REG_ATXR1PGA, ++ 0, 127, 0), ++}; ++ ++/* add non dapm controls */ ++static int twl4030_add_controls(struct snd_soc_codec *codec) ++{ ++ int err, i; ++ ++ for (i = 0; i < ARRAY_SIZE(twl4030_snd_controls); i++) { ++ err = snd_ctl_add(codec->card, ++ snd_soc_cnew(&twl4030_snd_controls[i], ++ codec, NULL)); ++ if (err < 0) ++ return err; ++ } ++ ++ return 0; ++} ++ ++#define TWL4030_PWR 0 ++ ++static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { ++ SND_SOC_DAPM_INPUT("INL"), ++ SND_SOC_DAPM_INPUT("INR"), ++ ++ SND_SOC_DAPM_OUTPUT("OUTL"), ++ SND_SOC_DAPM_OUTPUT("OUTR"), ++ ++ SND_SOC_DAPM_DAC("DACL", "Left Playback", SND_SOC_NOPM, 0, 0), ++ SND_SOC_DAPM_DAC("DACR", "Right Playback", SND_SOC_NOPM, 0, 0), ++ ++ SND_SOC_DAPM_ADC("ADCL", "Left Capture", SND_SOC_NOPM, 0, 0), ++ SND_SOC_DAPM_ADC("ADCR", "Right Capture", SND_SOC_NOPM, 0, 0), ++}; ++ ++static const char *intercon[][3] = { ++ /* outputs */ ++ {"OUTL", NULL, "DACL"}, ++ {"OUTR", NULL, "DACR"}, ++ ++ /* inputs */ ++ {"ADCL", NULL, "INL"}, ++ {"ADCR", NULL, "INR"}, ++ ++ /* terminator */ ++ {NULL, NULL, NULL}, ++}; ++ ++static int twl4030_add_widgets(struct snd_soc_codec *codec) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) ++ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); ++ ++ /* set up audio path interconnects */ ++ for (i = 0; intercon[i][0] != NULL; i++) ++ snd_soc_dapm_connect_input(codec, intercon[i][0], ++ intercon[i][1], intercon[i][2]); ++ ++ snd_soc_dapm_new_widgets(codec); ++ return 0; ++} ++ ++static int twl4030_dapm_event(struct snd_soc_codec *codec, int event) ++{ ++ ++ printk(KERN_INFO "TWL4030 Audio Codec dapm event\n"); ++ switch (event) { ++ case SNDRV_CTL_POWER_D0: /* full On */ ++ break; ++ case SNDRV_CTL_POWER_D1: /* partial On */ ++ case SNDRV_CTL_POWER_D2: /* partial On */ ++ break; ++ case SNDRV_CTL_POWER_D3hot: /* off, with power */ ++ break; ++ case SNDRV_CTL_POWER_D3cold: /* off, without power */ ++ break; ++ } ++ codec->dapm_state = event; ++ ++ return 0; ++} ++ ++static void twl4030_power_up (struct snd_soc_codec *codec, u8 mode) ++{ ++ twl4030_write(codec, REG_CODEC_MODE, mode & ~CODECPDZ); ++ twl4030_write(codec, REG_CODEC_MODE, mode | CODECPDZ); ++ udelay(10); ++ ++ u8 popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) | (0x40); ++ twl4030_write(codec, REG_HS_POPN_SET, popn); ++ ++ u8 hsgain = twl4030_read_reg_cache(codec, REG_HS_GAIN_SET) | (0x0a); ++ twl4030_write(codec, REG_HS_GAIN_SET, hsgain); ++ ++ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) | (0x02); ++ twl4030_write(codec, REG_HS_POPN_SET, popn); ++} ++ ++static void twl4030_power_down (struct snd_soc_codec *codec) ++{ ++ u8 popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) & ~(0x02); ++ twl4030_write(codec, REG_HS_POPN_SET, popn); ++ ++ u8 hsgain = twl4030_read_reg_cache(codec, REG_HS_GAIN_SET) & ~(0x0f); ++ twl4030_write(codec, REG_HS_GAIN_SET, hsgain); ++ ++ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) & ~(0x40); ++ twl4030_write(codec, REG_HS_POPN_SET, popn); ++ ++ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ udelay(10); ++} ++ ++ ++static int twl4030_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_device *socdev = rtd->socdev; ++ struct snd_soc_codec *codec = socdev->codec; ++ struct twl4030_priv *twl4030 = codec->private_data; ++ ++ twl4030_power_down(codec); ++ ++ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; ++ ++ mode &= ~APLL_RATE; ++ switch (params_rate(params)) { ++ case 44100: ++ printk(KERN_INFO "TWL4030 hw params: set rate to 44.1khz\n"); ++ mode |= APLL_RATE_44100; ++ break; ++ case 48000: ++ printk(KERN_INFO "TWL4030 hw params: set rate to 48khz\n"); ++ mode |= APLL_RATE_48000; ++ break; ++ default: ++ printk(KERN_INFO "TWL4030 hw params: unknown rate %d\n", params_rate(params)); ++ return -EINVAL; ++ } ++ ++ /* bit size */ ++ switch (params_format(params)) { ++ case SNDRV_PCM_FORMAT_S16_LE: ++ printk(KERN_INFO "TWL4030 hw params: set format to S16_LE\n"); ++ break; ++ case SNDRV_PCM_FORMAT_S24_LE: ++ printk(KERN_INFO "TWL4030 hw params: set format to S24_LE\n"); ++ break; ++ default: ++ printk(KERN_INFO "TWL4030 hw params: unknown format %d\n", params_format(params)); ++ return -EINVAL; ++ } ++ ++ /* change rate and turn codec back on */ ++ twl4030_power_up(codec, mode); ++ ++ return 0; ++} ++ ++static int twl4030_mute(struct snd_soc_codec_dai *dai, int mute) ++{ ++ struct snd_soc_codec *codec = dai->codec; ++ ++ u8 ldac_reg = twl4030_read_reg_cache(codec, REG_ARXL2PGA); ++ u8 rdac_reg = twl4030_read_reg_cache(codec, REG_ARXR2PGA); ++ ++ if (mute) { ++ printk(KERN_INFO "TWL4030 Audio Codec mute\n"); ++ twl4030_write(codec, REG_ARXL2PGA, 0x00); ++ twl4030_write(codec, REG_ARXR2PGA, 0x00); ++ twl4030_write_reg_cache(codec, REG_ARXL2PGA, ldac_reg); ++ twl4030_write_reg_cache(codec, REG_ARXR2PGA, rdac_reg); ++ } ++ else { ++ printk(KERN_INFO "TWL4030 Audio Codec unmute: %02x/%02x\n", ldac_reg, rdac_reg); ++ twl4030_write(codec, REG_ARXL2PGA, ldac_reg); ++ twl4030_write(codec, REG_ARXR2PGA, rdac_reg); ++ } ++ ++ return 0; ++} ++ ++static int twl4030_set_dai_fmt(struct snd_soc_codec_dai *codec_dai, ++ unsigned int fmt) ++{ ++ struct snd_soc_codec *codec = codec_dai->codec; ++ struct twl4030_priv *twl4030 = codec->private_data; ++ ++ /* get current format */ ++ u8 format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ ++ /* set master/slave audio interface */ ++ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { ++ case SND_SOC_DAIFMT_CBM_CFM: ++ printk(KERN_INFO "TWL4030 set dai fmt: master\n"); ++ format &= ~(AIF_SLAVE_EN); ++ format |= CLK256FS_EN; ++ break; ++ case SND_SOC_DAIFMT_CBS_CFS: ++ printk(KERN_INFO "TWL4030 set dai fmt: slave\n"); ++ format &= ~(CLK256FS_EN); ++ format |= AIF_SLAVE_EN; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* interface format */ ++ format &= ~AIF_FORMAT; ++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { ++ case SND_SOC_DAIFMT_I2S: ++ printk(KERN_INFO "TWL4030 set dai fmt: i2s\n"); ++ format |= AIF_FORMAT_CODEC; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ /* turn off codec before changing format */ ++ twl4030_power_down(codec); ++ ++ /* change format */ ++ twl4030_write(codec, REG_AUDIO_IF, format); ++ ++ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ twl4030_power_up(codec, mode); ++ ++ return 0; ++} ++ ++#define TWL4030_RATES SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 ++#define TWL4030_FORMATS SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FORMAT_S24_LE ++ ++struct snd_soc_codec_dai twl4030_dai = { ++ .name = "twl4030", ++ .playback = { ++ .stream_name = "Playback", ++ .channels_min = 2, ++ .channels_max = 2, ++ .rates = TWL4030_RATES, ++ .formats = TWL4030_FORMATS,}, ++ .capture = { ++ .stream_name = "Capture", ++ .channels_min = 2, ++ .channels_max = 2, ++ .rates = TWL4030_RATES, ++ .formats = TWL4030_FORMATS,}, ++ .ops = { ++ .hw_params = twl4030_hw_params, ++ }, ++ .dai_ops = { ++ .digital_mute = twl4030_mute, ++ .set_fmt = twl4030_set_dai_fmt, ++ } ++}; ++ ++EXPORT_SYMBOL_GPL(twl4030_dai); ++ ++static int twl4030_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec = socdev->codec; ++ ++ printk(KERN_INFO "TWL4030 Audio Codec suspend\n"); ++ twl4030_dapm_event(codec, SNDRV_CTL_POWER_D3cold); ++ ++ return 0; ++} ++ ++static int twl4030_resume(struct platform_device *pdev) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec = socdev->codec; ++ int i; ++ u16 *cache = codec->reg_cache; ++ ++ printk(KERN_INFO "TWL4030 Audio Codec resume\n"); ++ /* Sync reg_cache with the hardware */ ++ for (i = REG_CODEC_MODE; i <= REG_MISC_SET_2; i++) { ++ twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, cache[i], i); ++ } ++ twl4030_dapm_event(codec, SNDRV_CTL_POWER_D3hot); ++ twl4030_dapm_event(codec, codec->suspend_dapm_state); ++ return 0; ++} ++ ++/* ++ * initialize the driver ++ * register the mixer and dsp interfaces with the kernel ++ */ ++ ++static int twl4030_init(struct snd_soc_device *socdev) ++{ ++ struct snd_soc_codec *codec = socdev->codec; ++ int ret = 0; ++ ++ printk(KERN_INFO "TWL4030 Audio Codec init \n"); ++ ++ twl4030_init_chip(); ++ ++ codec->name = "twl4030"; ++ codec->owner = THIS_MODULE; ++ codec->read = twl4030_read_reg_cache; ++ codec->write = twl4030_write; ++ codec->dapm_event = twl4030_dapm_event; ++ codec->dai = &twl4030_dai; ++ codec->num_dai = 1; ++ codec->reg_cache_size = sizeof(twl4030_reg); ++ codec->reg_cache = kmemdup(twl4030_reg, sizeof(twl4030_reg), GFP_KERNEL); ++ if (codec->reg_cache == NULL) ++ return -ENOMEM; ++ ++ /* register pcms */ ++ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); ++ if (ret < 0) { ++ printk(KERN_ERR "twl4030: failed to create pcms\n"); ++ goto pcm_err; ++ } ++ ++ twl4030_add_controls(codec); ++ twl4030_add_widgets(codec); ++ ++ ret = snd_soc_register_card(socdev); ++ if (ret < 0) { ++ printk(KERN_ERR "twl4030: failed to register card\n"); ++ goto card_err; ++ } ++ ++ return ret; ++ ++card_err: ++ printk(KERN_INFO "TWL4030 Audio Codec init card error\n"); ++ snd_soc_free_pcms(socdev); ++ snd_soc_dapm_free(socdev); ++pcm_err: ++ printk(KERN_INFO "TWL4030 Audio Codec init pcm error\n"); ++ kfree(codec->reg_cache); ++ return ret; ++} ++ ++static struct snd_soc_device *twl4030_socdev; ++ ++static int twl4030_probe(struct platform_device *pdev) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec; ++ struct twl4030_priv *twl4030; ++ ++ printk(KERN_INFO "TWL4030 Audio Codec probe\n"); ++ ++ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); ++ if (codec == NULL) ++ return -ENOMEM; ++ ++ twl4030 = kzalloc(sizeof(struct twl4030_priv), GFP_KERNEL); ++ if (twl4030 == NULL) { ++ kfree(codec); ++ return -ENOMEM; ++ } ++ ++ codec->private_data = twl4030; ++ socdev->codec = codec; ++ mutex_init(&codec->mutex); ++ INIT_LIST_HEAD(&codec->dapm_widgets); ++ INIT_LIST_HEAD(&codec->dapm_paths); ++ ++ twl4030_socdev = socdev; ++ twl4030_init(socdev); ++ ++ printk(KERN_INFO "TWL4030 Audio Codec probe exit\n"); ++ return 0; ++} ++ ++static int twl4030_remove(struct platform_device *pdev) ++{ ++ struct snd_soc_device *socdev = platform_get_drvdata(pdev); ++ struct snd_soc_codec *codec = socdev->codec; ++ ++ printk(KERN_INFO "TWL4030 Audio Codec remove\n"); ++ kfree(codec->private_data); ++ kfree(codec); ++ ++ return 0; ++} ++ ++struct snd_soc_codec_device soc_codec_dev_twl4030 = { ++ .probe = twl4030_probe, ++ .remove = twl4030_remove, ++ .suspend = twl4030_suspend, ++ .resume = twl4030_resume, ++}; ++EXPORT_SYMBOL_GPL(soc_codec_dev_twl4030); ++ ++MODULE_DESCRIPTION("ASoC TWL4030 codec driver"); ++MODULE_AUTHOR("Steve Sakoman"); ++MODULE_LICENSE("GPL"); +diff --git a/sound/soc/codecs/twl4030.h b/sound/soc/codecs/twl4030.h +new file mode 100644 +index 0000000..af8eb43 +--- /dev/null ++++ b/sound/soc/codecs/twl4030.h +@@ -0,0 +1,125 @@ ++/* ++ * ALSA SoC TWL4030 codec driver ++ * ++ * Author: Steve Sakoman, ++ * ++ * 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 __TWL4030_AUDIO_H__ ++#define __TWL4030_AUDIO_H__ ++ ++#define REG_CODEC_MODE 0x1 ++#define REG_OPTION 0x2 ++#define REG_UNKNOWN 0x3 ++#define REG_MICBIAS_CTL 0x4 ++#define REG_ANAMICL 0x5 ++#define REG_ANAMICR 0x6 ++#define REG_AVADC_CTL 0x7 ++#define REG_ADCMICSEL 0x8 ++#define REG_DIGMIXING 0x9 ++#define REG_ATXL1PGA 0xA ++#define REG_ATXR1PGA 0xB ++#define REG_AVTXL2PGA 0xC ++#define REG_AVTXR2PGA 0xD ++#define REG_AUDIO_IF 0xE ++#define REG_VOICE_IF 0xF ++#define REG_ARXR1PGA 0x10 ++#define REG_ARXL1PGA 0x11 ++#define REG_ARXR2PGA 0x12 ++#define REG_ARXL2PGA 0x13 ++#define REG_VRXPGA 0x14 ++#define REG_VSTPGA 0x15 ++#define REG_VRX2ARXPGA 0x16 ++#define REG_AVDAC_CTL 0x17 ++#define REG_ARX2VTXPGA 0x18 ++#define REG_ARXL1_APGA_CTL 0x19 ++#define REG_ARXR1_APGA_CTL 0x1A ++#define REG_ARXL2_APGA_CTL 0x1B ++#define REG_ARXR2_APGA_CTL 0x1C ++#define REG_ATX2ARXPGA 0x1D ++#define REG_BT_IF 0x1E ++#define REG_BTPGA 0x1F ++#define REG_BTSTPGA 0x20 ++#define REG_EAR_CTL 0x21 ++#define REG_HS_SEL 0x22 ++#define REG_HS_GAIN_SET 0x23 ++#define REG_HS_POPN_SET 0x24 ++#define REG_PREDL_CTL 0x25 ++#define REG_PREDR_CTL 0x26 ++#define REG_PRECKL_CTL 0x27 ++#define REG_PRECKR_CTL 0x28 ++#define REG_HFL_CTL 0x29 ++#define REG_HFR_CTL 0x2A ++#define REG_ALC_CTL 0x2B ++#define REG_ALC_SET1 0x2C ++#define REG_ALC_SET2 0x2D ++#define REG_BOOST_CTL 0x2E ++#define REG_SOFTVOL_CTL 0x2F ++#define REG_DTMF_FREQSEL 0x30 ++#define REG_DTMF_TONEXT1H 0x31 ++#define REG_DTMF_TONEXT1L 0x32 ++#define REG_DTMF_TONEXT2H 0x33 ++#define REG_DTMF_TONEXT2L 0x34 ++#define REG_DTMF_TONOFF 0x35 ++#define REG_DTMF_WANONOFF 0x36 ++#define REG_I2S_RX_SCRAMBLE_H 0x37 ++#define REG_I2S_RX_SCRAMBLE_M 0x38 ++#define REG_I2S_RX_SCRAMBLE_L 0x39 ++#define REG_APLL_CTL 0x3A ++#define REG_DTMF_CTL 0x3B ++#define REG_DTMF_PGA_CTL2 0x3C ++#define REG_DTMF_PGA_CTL1 0x3D ++#define REG_MISC_SET_1 0x3E ++#define REG_PCMBTMUX 0x3F ++#define REG_RX_PATH_SEL 0x43 ++#define REG_VDL_APGA_CTL 0x44 ++#define REG_VIBRA_CTL 0x45 ++#define REG_VIBRA_SET 0x46 ++#define REG_VIBRA_PWM_SET 0x47 ++#define REG_ANAMIC_GAIN 0x48 ++#define REG_MISC_SET_2 0x49 ++ ++#define TWL4030_CACHEREGNUM REG_MISC_SET_2 + 1 ++ ++/* Bitfield Definitions */ ++ ++/* CODEC_MODE Fields */ ++ ++#define APLL_RATE 0xF0 ++#define APLL_RATE_8000 0x00 ++#define APLL_RATE_11025 0x10 ++#define APLL_RATE_12000 0x20 ++#define APLL_RATE_16000 0x40 ++#define APLL_RATE_22050 0x50 ++#define APLL_RATE_24000 0x60 ++#define APLL_RATE_32000 0x80 ++#define APLL_RATE_44100 0x90 ++#define APLL_RATE_48000 0xa0 ++#define SEL_16K 0x04 ++#define CODECPDZ 0x02 ++#define OPT_MODE 0x01 ++ ++/* AUDIO_IF Fields */ ++ ++#define AIF_SLAVE_EN 0x80 ++#define DATA_WIDTH 0x60 ++#define DATA_WIDTH_16S_16W 0x00 ++#define DATA_WIDTH_32S_16W 0x40 ++#define DATA_WIDTH_32S_24W 0x60 ++#define AIF_FORMAT 0x18 ++#define AIF_FORMAT_CODEC 0x00 ++#define AIF_FORMAT_LEFT 0x08 ++#define AIF_FORMAT_RIGHT 0x10 ++#define AIF_FORMAT_TDM 0x18 ++#define AIF_TRI_EN 0x04 ++#define CLK256FS_EN 0x02 ++#define AIF_EN 0x01 ++ ++ ++extern struct snd_soc_codec_dai twl4030_dai; ++extern struct snd_soc_codec_device soc_codec_dev_twl4030; ++ ++#endif /* End of __TWL4030_AUDIO_H__ */ +diff --git a/sound/soc/omap/Kconfig b/sound/soc/omap/Kconfig +index 0230d83..8703cea 100644 +--- a/sound/soc/omap/Kconfig ++++ b/sound/soc/omap/Kconfig +@@ -16,4 +16,20 @@ config SND_OMAP_SOC_N810 + help + Say Y if you want to add support for SoC audio on Nokia N810. + ++config SND_OMAP_SOC_OMAP3EVM ++ tristate "SoC Audio support for OMAP3 EVM" ++ depends on SND_OMAP_SOC && MACH_OMAP3EVM ++ select SND_OMAP_SOC_MCBSP ++ select SND_SOC_TWL4030 ++ help ++ Say Y if you want to add support for SoC audio on the OMAP3 EVM. ++ ++config SND_OMAP_SOC_OMAP3BEAGLE ++ tristate "SoC Audio support for OMAP3 Beagle" ++ depends on SND_OMAP_SOC && MACH_OMAP3_BEAGLE ++ select SND_OMAP_SOC_MCBSP ++ select SND_SOC_TWL4030 ++ help ++ Say Y if you want to add support for SoC audio on the OMAP3 Beagle. ++ + endmenu +diff --git a/sound/soc/omap/Makefile b/sound/soc/omap/Makefile +index d8d8d58..638a240 100644 +--- a/sound/soc/omap/Makefile ++++ b/sound/soc/omap/Makefile +@@ -7,5 +7,10 @@ obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o + + # OMAP Machine Support + snd-soc-n810-objs := n810.o ++snd-soc-omap3evm-objs := omap3evm.o ++snd-soc-omap3beagle-objs := omap3beagle.o + + obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o ++obj-$(CONFIG_SND_OMAP_SOC_OMAP3EVM) += snd-soc-omap3evm.o ++obj-$(CONFIG_SND_OMAP_SOC_OMAP3BEAGLE) += snd-soc-omap3beagle.o ++ +diff --git a/sound/soc/omap/omap3beagle.c b/sound/soc/omap/omap3beagle.c +new file mode 100644 +index 0000000..fb79938 +--- /dev/null ++++ b/sound/soc/omap/omap3beagle.c +@@ -0,0 +1,180 @@ ++/* ++ * omap3beagle.c -- SoC audio for OMAP3 Beagle ++ * ++ * Author: Steve Sakoman ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * version 2 as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "omap-mcbsp.h" ++#include "omap-pcm.h" ++#include "../codecs/twl4030.h" ++ ++static int omap3beagle_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int ret; ++ ++ /* Set codec DAI configuration */ ++ ret = codec_dai->dai_ops.set_fmt(codec_dai, ++ SND_SOC_DAIFMT_I2S | ++ SND_SOC_DAIFMT_NB_NF | ++ SND_SOC_DAIFMT_CBM_CFM); ++ if (ret < 0) { ++ printk(KERN_INFO "can't set codec DAI configuration\n"); ++ return ret; ++ } ++ ++ /* Set cpu DAI configuration */ ++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, ++ SND_SOC_DAIFMT_I2S | ++ SND_SOC_DAIFMT_NB_NF | ++ SND_SOC_DAIFMT_CBM_CFM); ++ if (ret < 0) { ++ printk(KERN_INFO "can't set cpu DAI configuration\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static struct snd_soc_ops omap3beagle_ops = { ++ .hw_params = omap3beagle_hw_params, ++}; ++ ++static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { ++ SND_SOC_DAPM_HP("Headphone Jack", NULL), ++ SND_SOC_DAPM_LINE("Line In", NULL), ++}; ++ ++static const char *audio_map[][3] = { ++ {"Headphone Jack", NULL, "HPLOUT"}, ++ {"Headphone Jack", NULL, "HPROUT"}, ++ ++ {"Line In", NULL, "Line In"}, ++ {"Line In", NULL, "Line In"}, ++}; ++ ++static int omap3beagle_twl4030_init(struct snd_soc_codec *codec) ++{ ++ int i; ++ ++ printk(KERN_INFO "OMAP3 Beagle TWL4030 SoC init\n"); ++ ++ /* Add omap3beagle specific widgets */ ++ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) ++ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); ++ ++ /* Set up omap3beagle specific audio path audio_map */ ++ for (i = 0; i < ARRAY_SIZE(audio_map); i++) ++ snd_soc_dapm_connect_input(codec, audio_map[i][0], ++ audio_map[i][1], audio_map[i][2]); ++ ++ /* always connected */ ++ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1); ++ snd_soc_dapm_set_endpoint(codec, "Line In", 1); ++ ++ snd_soc_dapm_sync_endpoints(codec); ++ ++ return 0; ++} ++ ++/* Digital audio interface glue - connects codec <--> CPU */ ++static struct snd_soc_dai_link omap3beagle_dai = { ++ .name = "TWL4030", ++ .stream_name = "TWL4030", ++ .cpu_dai = &omap_mcbsp_dai[0], ++ .codec_dai = &twl4030_dai, ++ .init = omap3beagle_twl4030_init, ++ .ops = &omap3beagle_ops, ++}; ++ ++/* Audio machine driver */ ++static struct snd_soc_machine snd_soc_machine_omap3beagle = { ++ .name = "omap3beagle", ++ .dai_link = &omap3beagle_dai, ++ .num_links = 1, ++}; ++ ++/* Audio subsystem */ ++static struct snd_soc_device omap3beagle_snd_devdata = { ++ .machine = &snd_soc_machine_omap3beagle, ++ .platform = &omap_soc_platform, ++ .codec_dev = &soc_codec_dev_twl4030, ++}; ++ ++static struct platform_device *omap3beagle_snd_device; ++ ++static int __init omap3beagle_soc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "OMAP3 Beagle SoC init\n"); ++ if (!machine_is_omap3_beagle()) { ++ printk(KERN_INFO "Not OMAP3 Beagle!\n"); ++ return -ENODEV; ++ } ++ ++ omap3beagle_snd_device = platform_device_alloc("soc-audio", -1); ++ if (!omap3beagle_snd_device) { ++ printk(KERN_INFO "Platform device allocation failed\n"); ++ return -ENOMEM; ++ } ++ ++ platform_set_drvdata(omap3beagle_snd_device, &omap3beagle_snd_devdata); ++ omap3beagle_snd_devdata.dev = &omap3beagle_snd_device->dev; ++ *(unsigned int *)omap3beagle_dai.cpu_dai->private_data = 1; /* McBSP2 */ ++ ++ ret = platform_device_add(omap3beagle_snd_device); ++ if (ret) ++ goto err1; ++ ++ return 0; ++ ++err1: ++ printk(KERN_INFO "Unable to add platform device\n"); ++ platform_device_put(omap3beagle_snd_device); ++ ++ return ret; ++} ++ ++static void __exit omap3beagle_soc_exit(void) ++{ ++ printk(KERN_INFO "OMAP3 Beagle SoC exit\n"); ++ platform_device_unregister(omap3beagle_snd_device); ++} ++ ++module_init(omap3beagle_soc_init); ++module_exit(omap3beagle_soc_exit); ++ ++MODULE_AUTHOR("Steve Sakoman "); ++MODULE_DESCRIPTION("ALSA SoC OMAP3 Beagle"); ++MODULE_LICENSE("GPL"); +diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c +new file mode 100644 +index 0000000..32d4f5d +--- /dev/null ++++ b/sound/soc/omap/omap3evm.c +@@ -0,0 +1,180 @@ ++/* ++ * omap3evm.c -- SoC audio for OMAP3 EVM ++ * ++ * Author: Steve Sakoman ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * version 2 as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "omap-mcbsp.h" ++#include "omap-pcm.h" ++#include "../codecs/twl4030.h" ++ ++static int omap3evm_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai; ++ int ret; ++ ++ /* Set codec DAI configuration */ ++ ret = codec_dai->dai_ops.set_fmt(codec_dai, ++ SND_SOC_DAIFMT_I2S | ++ SND_SOC_DAIFMT_NB_NF | ++ SND_SOC_DAIFMT_CBM_CFM); ++ if (ret < 0) { ++ printk(KERN_INFO "can't set codec DAI configuration\n"); ++ return ret; ++ } ++ ++ /* Set cpu DAI configuration */ ++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, ++ SND_SOC_DAIFMT_I2S | ++ SND_SOC_DAIFMT_NB_NF | ++ SND_SOC_DAIFMT_CBM_CFM); ++ if (ret < 0) { ++ printk(KERN_INFO "can't set cpu DAI configuration\n"); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static struct snd_soc_ops omap3evm_ops = { ++ .hw_params = omap3evm_hw_params, ++}; ++ ++static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { ++ SND_SOC_DAPM_HP("Headphone Jack", NULL), ++ SND_SOC_DAPM_LINE("Line In", NULL), ++}; ++ ++static const char *audio_map[][3] = { ++ {"Headphone Jack", NULL, "HPLOUT"}, ++ {"Headphone Jack", NULL, "HPROUT"}, ++ ++ {"Line In", NULL, "Line In"}, ++ {"Line In", NULL, "Line In"}, ++}; ++ ++static int omap3evm_twl4030_init(struct snd_soc_codec *codec) ++{ ++ int i; ++ ++ printk(KERN_INFO "OMAP3 EVM TWL4030 SoC init\n"); ++ ++ /* Add omap3evm specific widgets */ ++ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) ++ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); ++ ++ /* Set up omap3evm specific audio path audio_map */ ++ for (i = 0; i < ARRAY_SIZE(audio_map); i++) ++ snd_soc_dapm_connect_input(codec, audio_map[i][0], ++ audio_map[i][1], audio_map[i][2]); ++ ++ /* always connected */ ++ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1); ++ snd_soc_dapm_set_endpoint(codec, "Line In", 1); ++ ++ snd_soc_dapm_sync_endpoints(codec); ++ ++ return 0; ++} ++ ++/* Digital audio interface glue - connects codec <--> CPU */ ++static struct snd_soc_dai_link omap3evm_dai = { ++ .name = "TWL4030", ++ .stream_name = "TWL4030", ++ .cpu_dai = &omap_mcbsp_dai[0], ++ .codec_dai = &twl4030_dai, ++ .init = omap3evm_twl4030_init, ++ .ops = &omap3evm_ops, ++}; ++ ++/* Audio machine driver */ ++static struct snd_soc_machine snd_soc_machine_omap3evm = { ++ .name = "omap3evm", ++ .dai_link = &omap3evm_dai, ++ .num_links = 1, ++}; ++ ++/* Audio subsystem */ ++static struct snd_soc_device omap3evm_snd_devdata = { ++ .machine = &snd_soc_machine_omap3evm, ++ .platform = &omap_soc_platform, ++ .codec_dev = &soc_codec_dev_twl4030, ++}; ++ ++static struct platform_device *omap3evm_snd_device; ++ ++static int __init omap3evm_soc_init(void) ++{ ++ int ret; ++ ++ printk(KERN_INFO "OMAP3 EVM SoC init\n"); ++ if (!machine_is_omap3evm()) { ++ printk(KERN_INFO "Not OMAP3 EVM!\n"); ++ return -ENODEV; ++ } ++ ++ omap3evm_snd_device = platform_device_alloc("soc-audio", -1); ++ if (!omap3evm_snd_device) { ++ printk(KERN_INFO "Platform device allocation failed\n"); ++ return -ENOMEM; ++ } ++ ++ platform_set_drvdata(omap3evm_snd_device, &omap3evm_snd_devdata); ++ omap3evm_snd_devdata.dev = &omap3evm_snd_device->dev; ++ *(unsigned int *)omap3evm_dai.cpu_dai->private_data = 1; /* McBSP2 */ ++ ++ ret = platform_device_add(omap3evm_snd_device); ++ if (ret) ++ goto err1; ++ ++ return 0; ++ ++err1: ++ printk(KERN_INFO "Unable to add platform device\n"); ++ platform_device_put(omap3evm_snd_device); ++ ++ return ret; ++} ++ ++static void __exit omap3evm_soc_exit(void) ++{ ++ printk(KERN_INFO "OMAP3 EVM SoC exit\n"); ++ platform_device_unregister(omap3evm_snd_device); ++} ++ ++module_init(omap3evm_soc_init); ++module_exit(omap3evm_soc_exit); ++ ++MODULE_AUTHOR("Steve Sakoman "); ++MODULE_DESCRIPTION("ALSA SoC OMAP3 EVM"); ++MODULE_LICENSE("GPL"); diff --git a/packages/linux/linux-omap2-git/omap3evm/timer-suppression.patch b/packages/linux/linux-omap2-git/omap3evm/timer-suppression.patch new file mode 100644 index 0000000000..04362c96e3 --- /dev/null +++ b/packages/linux/linux-omap2-git/omap3evm/timer-suppression.patch @@ -0,0 +1,43 @@ +diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c +index b854a89..26f5569 100644 +--- a/kernel/time/tick-sched.c ++++ b/kernel/time/tick-sched.c +@@ -253,6 +253,16 @@ void tick_nohz_stop_sched_tick(void) + + /* Schedule the tick, if we are at least one jiffie off */ + if ((long)delta_jiffies >= 1) { ++ /* ++ * calculate the expiry time for the next timer wheel ++ * timer ++ */ ++ expires = ktime_add_ns(last_update, tick_period.tv64 * ++ delta_jiffies); ++ ++ /* Skip reprogram of event if its not changed */ ++ if(ts->tick_stopped && ktime_equal(expires, dev->next_event)) ++ goto out2; + + if (delta_jiffies > 1) + cpu_set(cpu, nohz_cpu_mask); +@@ -304,12 +314,7 @@ void tick_nohz_stop_sched_tick(void) + goto out; + } + +- /* +- * calculate the expiry time for the next timer wheel +- * timer +- */ +- expires = ktime_add_ns(last_update, tick_period.tv64 * +- delta_jiffies); ++ /* Mark expiries */ + ts->idle_expires = expires; + + if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { +@@ -328,6 +333,7 @@ void tick_nohz_stop_sched_tick(void) + tick_do_update_jiffies64(ktime_get()); + cpu_clear(cpu, nohz_cpu_mask); + } ++out2: + raise_softirq_irqoff(TIMER_SOFTIRQ); + out: + ts->next_jiffies = next_jiffies; diff --git a/packages/linux/linux-omap2-git/omap3evm/touchscreen.patch b/packages/linux/linux-omap2-git/omap3evm/touchscreen.patch new file mode 100644 index 0000000000..2325c401e4 --- /dev/null +++ b/packages/linux/linux-omap2-git/omap3evm/touchscreen.patch @@ -0,0 +1,22 @@ +diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c +index d8109ae..f8ce669 100644 +--- a/arch/arm/mach-omap2/board-omap3evm.c ++++ b/arch/arm/mach-omap2/board-omap3evm.c +@@ -128,8 +128,16 @@ static int ads7846_get_pendown_state(void) + } + + struct ads7846_platform_data ads7846_config = { ++ .x_max = 0x0fff, ++ .y_max = 0x0fff, ++ .x_plate_ohms = 180, ++ .pressure_max = 255, ++ .debounce_max = 10, ++ .debounce_tol = 3, ++ .debounce_rep = 1, + .get_pendown_state = ads7846_get_pendown_state, + .keep_vref_on = 1, ++ .settle_delay_usecs = 150, + }; + + static struct omap2_mcspi_device_config ads7846_mcspi_config = { + -- cgit v1.2.3 From 09fb5fd7e22434f0a36a1588d8eca6e419e59786 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 11:00:48 +0000 Subject: openmoko toolchain scripts: update SRC_URI and packaging, OE somehow refuses to package files in /, so the license are in /doc now --- conf/distro/include/sane-srcrevs.inc | 3 +-- packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb | 13 +++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index 05538c244f..f646ee55cb 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -38,7 +38,6 @@ SRCREV_pn-ezxd ?= "2074" SRCREV_pn-elf2flt ?= "1786" SRCREV_pn-epiphany ?= "7837" SRCREV_pn-fbgrab-viewer-native ?= "1943" -SRCREV_pn-ffmpeg ?= "12186" SRCREV_pn-frameworkd ?= "0c2b55d857ac1e62c1c8538b86c0d8d62a80ccd6" SRCREV_pn-fstests ?= "204" SRCREV_pn-gconf-dbus ?= "641" @@ -155,7 +154,7 @@ SRCREV_pn-openmoko-theme-standard2-qvga ?= "3425" SRCREV_pn-openmoko-today ?= "3056" SRCREV_pn-openmoko-today2 ?= "4168" SRCREV_pn-openmoko-today2-folders ?= "3704" -SRCREV_pn-openmoko-toolchain-scripts ?= "3767" +SRCREV_pn-openmoko-toolchain-scripts ?= "4430" SRCREV_pn-openmoko-worldclock2 ?= "3365" SRCREV_pn-openocd ?= "517" SRCREV_pn-openocd-native ?= "517" diff --git a/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb b/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb index 7533f81958..60dab56569 100644 --- a/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb +++ b/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb @@ -1,14 +1,19 @@ DESCRIPTION = "Convenient scripts to be used with openmoko toolchain." -PR = "r1" -SRC_URI = "svn://svn.openmoko.org/developers/john_lee;module=toolkit;proto=http" +PV = "0.0+svnr${SRCREV}" +PE = "1" -S = "${WORKDIR}/toolkit" +SRC_URI = "svn://svn.openmoko.org/trunk/src/host;module=toolchain-scripts;proto=http" -FILES_${PN} = "/" +S = "${WORKDIR}/toolchain-scripts" + +FILES_${PN} = "/bin /scripts /* \ +" do_install () { + install -d ${D}/doc cp -dr ${S}/* ${D} find ${D} -name ".svn" | xargs rm -rf rm -r ${D}/patches + cd ${D} ; mv COPYING COPYING.MIT LICENSE README doc ; mv setup-env bin } -- cgit v1.2.3 From 0ab76ac762d6064c44e0e948dd25a1e467c94055 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 11:03:53 +0000 Subject: ffmpeg: move SRCREV to recipe so people can build the git version with optimizations for NEON --- packages/ffmpeg/ffmpeg_git.bb | 132 ++++++++++++++++++++++++++++++++++++++++++ packages/ffmpeg/ffmpeg_svn.bb | 2 + 2 files changed, 134 insertions(+) create mode 100644 packages/ffmpeg/ffmpeg_git.bb diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb new file mode 100644 index 0000000000..c287b86623 --- /dev/null +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -0,0 +1,132 @@ +require ffmpeg.inc + +DEPENDS += "libgsm" + +PV = "0.4.9+${PR}+gitr${SRCREV}" +PR = "r9" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_armv7a = "1" + +FFBRANCH_arm = "arm-neon" +FFBRANCH ?= "master" + +SRCREV = "1e8300e71f79963eacdad6b180d9a12c4f56318d" +SRCREV_arm = "4cc48b756abd09baa7b31909ebbc0c09be2c8e5a" +SRC_URI = "git://git.mansr.com/ffmpeg.mru;protocol=git;branch=${FFBRANCH} \ +" + +S = "${WORKDIR}/git" +B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" + +FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -ftree-vectorize -fomit-frame-pointer -O4 -ffast-math" +BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}" + +EXTRA_FFCONF_armv7a = "--cpu=cortex-a8" +EXTRA_FFCONF ?= "" + +EXTRA_OECONF = " \ + --enable-shared \ + --enable-pthreads \ + --disable-stripping \ + --enable-gpl \ + --enable-nonfree \ + --enable-postproc \ + \ + --cross-prefix=${TARGET_PREFIX} \ + --prefix=${prefix} \ + \ + --enable-x11grab \ + --enable-libfaac \ + --enable-libfaad \ + --enable-libfaadbin \ + --enable-libgsm \ + --enable-libmp3lame \ + --enable-swscale \ + --arch=${TARGET_ARCH} \ + --enable-cross-compile \ + --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \ + --extra-ldflags="${TARGET_LDFLAGS}" \ + --enable-hardcoded-tables \ + ${EXTRA_FFCONF} \ +" + +do_configure() { + cd ${S} ; git clone git://git.mplayerhq.hu/libswscale || true + mkdir -p ${B} + cd ${B} + ${S}/configure ${EXTRA_OECONF} + sed -i -e s:Os:O4:g ${B}/config.h +} + +do_stage() { + for lib in libavcodec libavdevice libavformat \ + libavutil libpostproc libswscale + do + oe_libinstall -a -so -C $lib $lib ${STAGING_LIBDIR} + install -d ${STAGING_INCDIR}/$lib + done + + install -d ${STAGING_INCDIR}/ffmpeg + + install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/ffmpeg/avcodec.h + install -m 0644 ${S}/libavcodec/opt.h ${STAGING_INCDIR}/ffmpeg/opt.h + install -m 0644 ${S}/libavcodec/avcodec.h ${STAGING_INCDIR}/libavcodec/avcodec.h + install -m 0644 ${S}/libavcodec/opt.h ${STAGING_INCDIR}/libavcodec/opt.h + + install -m 0644 ${S}/libavdevice/avdevice.h ${STAGING_INCDIR}/ffmpeg/avdevice.h + + for h in avformat.h avio.h rtp.h rtsp.h rtspcodes.h + do + install -m 0644 ${S}/libavformat/$h ${STAGING_INCDIR}/ffmpeg/$h + done + + for h in adler32.h avstring.h avutil.h base64.h bswap.h \ + common.h crc.h fifo.h integer.h intfloat_readwrite.h \ + log.h lzo.h mathematics.h md5.h mem.h random.h \ + rational.h sha1.h + do + install -m 0644 ${S}/libavutil/$h ${STAGING_INCDIR}/ffmpeg/$h + install -m 0644 ${S}/libavutil/$h ${STAGING_INCDIR}/libavutil/$h + done + + install -m 0644 ${S}/libswscale/swscale.h ${STAGING_INCDIR}/ffmpeg/swscale.h + install -m 0644 ${S}/libswscale/rgb2rgb.h ${STAGING_INCDIR}/ffmpeg/rgb2rgb.h + + install -d ${STAGING_INCDIR}/libpostproc + install -d ${STAGING_INCDIR}/postproc + install -m 0644 ${S}/libpostproc/postprocess.h ${STAGING_INCDIR}/libpostproc/postprocess.h + install -m 0644 ${S}/libpostproc/postprocess.h ${STAGING_INCDIR}/postproc/postprocess.h +} + +PACKAGES += "libavcodec libavcodec-dev libavcodec-dbg \ + libavdevice libavdevice-dev libavdevice-dbg \ + libavformat libavformat-dev libavformat-dbg \ + libavutil libavutil-dev libavutil-dbg \ + libpostproc libpostproc-dev libpostproc-dbg \ + libswscale libswscale-dev libswscale-dbg" + +FILES_${PN}-dev = "${includedir}" +FILES_libavcodec = "${libdir}/libavcodec*.so.*" +FILES_libavcodec-dev = "${libdir}/libavcodec*.so ${libdir}/pkgconfig/libavcodec.pc ${libdir}/libavcodec*.a" +FILES_libavcodec-dbg += "${libdir}/.debug/libavcodec*" + +FILES_libavdevice = "${libdir}/libavdevice*.so.*" +FILES_libavdevice-dev = "${libdir}/libavdevice*.so ${libdir}/pkgconfig/libavdevice.pc ${libdir}/libavdevice*.a" +FILES_libavdevice-dbg += "${libdir}/.debug/libavdevice*" + +FILES_libavformat = "${libdir}/libavformat*.so.*" +FILES_libavformat-dev = "${libdir}/libavformat*.so ${libdir}/pkgconfig/libavformat.pc ${libdir}/libavformat*.a" +FILES_libavformat-dbg += "${libdir}/.debug/libavformat*" + +FILES_libavutil = "${libdir}/libavutil*.so.*" +FILES_libavutil-dev = "${libdir}/libavutil*.so ${libdir}/pkgconfig/libavutil.pc ${libdir}/libavutil*.a" +FILES_libavutil-dbg += "${libdir}/.debug/libavutil*" + +FILES_libpostproc = "${libdir}/libpostproc*.so.*" +FILES_libpostproc-dev = "${libdir}/libpostproc*.so ${libdir}/pkgconfig/libpostproc.pc ${libdir}/libpostproc*.a ${includedir}/postproc" +FILES_libpostproc-dbg += "${libdir}/.debug/libpostproc*" + +FILES_libswscale = "${libdir}/libswscale*.so.*" +FILES_libswscale-dev = "${libdir}/libswscale*.so ${libdir}/pkgconfig/libswscale.pc ${libdir}/libswscale*.a" +FILES_libswscale-dbg += "${libdir}/.debug/libswscale*" diff --git a/packages/ffmpeg/ffmpeg_svn.bb b/packages/ffmpeg/ffmpeg_svn.bb index cbf9cf3980..3fef6129a7 100644 --- a/packages/ffmpeg/ffmpeg_svn.bb +++ b/packages/ffmpeg/ffmpeg_svn.bb @@ -2,6 +2,8 @@ require ffmpeg.inc DEPENDS += "libgsm" +SRCREV ?= "12186" + PV = "0.4.9+svnr${SRCREV}" PR = "r0" -- cgit v1.2.3 From 5f527012e3d28f44a1159bd73baffd58de5f6dc1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 11:06:59 +0000 Subject: qt4: add a hack to get qt-embedded to build without building qtopia-core --- packages/qt4/qt-embedded_4.4.0.bb | 5 ++++- packages/qt4/qtopia-core_4.4.0.bb | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 packages/qt4/qtopia-core_4.4.0.bb diff --git a/packages/qt4/qt-embedded_4.4.0.bb b/packages/qt4/qt-embedded_4.4.0.bb index f7b8ab0267..a74a833ae5 100644 --- a/packages/qt4/qt-embedded_4.4.0.bb +++ b/packages/qt4/qt-embedded_4.4.0.bb @@ -1,6 +1,9 @@ require qtopia-core.inc -PR = "r2" +PROVIDES += "qtopia-core" +RPROVIDES_${PN} = "qtopia-core" + +PR = "r3" SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ file://qconfig-oe.h \ diff --git a/packages/qt4/qtopia-core_4.4.0.bb b/packages/qt4/qtopia-core_4.4.0.bb new file mode 100644 index 0000000000..b17ced70f0 --- /dev/null +++ b/packages/qt4/qtopia-core_4.4.0.bb @@ -0,0 +1,4 @@ +#Empty recipe to break a recursive loop +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_angstrom = "1" + -- cgit v1.2.3 From 24a51ce6d225dff097ede2281fc3a688e63865fc Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 9 Jul 2008 12:12:08 +0000 Subject: python-cython[-native]: downgrade to 0.9.6.14 for the time being, 0.9.8 does not compile python-e* --- packages/python/python-cython-native_0.9.6.14.bb | 9 +++++++++ packages/python/python-cython_0.9.6.14.bb | 13 +++++++++++++ packages/python/python-cython_0.9.8.bb | 3 +++ 3 files changed, 25 insertions(+) create mode 100644 packages/python/python-cython-native_0.9.6.14.bb create mode 100644 packages/python/python-cython_0.9.6.14.bb diff --git a/packages/python/python-cython-native_0.9.6.14.bb b/packages/python/python-cython-native_0.9.6.14.bb new file mode 100644 index 0000000000..cb7743e1bf --- /dev/null +++ b/packages/python/python-cython-native_0.9.6.14.bb @@ -0,0 +1,9 @@ +require python-cython_${PV}.bb +inherit native +DEPENDS = "python-native" +RDEPENDS = "" + +do_stage() { + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR} +} diff --git a/packages/python/python-cython_0.9.6.14.bb b/packages/python/python-cython_0.9.6.14.bb new file mode 100644 index 0000000000..6077089bf2 --- /dev/null +++ b/packages/python/python-cython_0.9.6.14.bb @@ -0,0 +1,13 @@ +DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \ +It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \ +and the messy, low-level world of C." +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "GPL" +SRCNAME = "Cython" +PR = "ml0" + +SRC_URI = "http://pypi.python.org/packages/source/C/Cython/${SRCNAME}-${PV}.tar.gz" +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit distutils diff --git a/packages/python/python-cython_0.9.8.bb b/packages/python/python-cython_0.9.8.bb index f78ba38e87..9243aa61f0 100644 --- a/packages/python/python-cython_0.9.8.bb +++ b/packages/python/python-cython_0.9.8.bb @@ -11,3 +11,6 @@ SRC_URI = "http://www.cython.org/${SRCNAME}-${PV}.tar.gz" S = "${WORKDIR}/${SRCNAME}-${PV}" inherit distutils + +DEFAULT_PREFERENCE = "-1" + -- cgit v1.2.3 From 115b8d44e4e5fb2e4c2ad94b5d67e811c887488e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 14:37:04 +0000 Subject: qt-e: adjust PR --- packages/qt4/qt-embedded_4.4.0.bb | 2 +- packages/qt4/qtopia-core_4.4.0.bb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/qt4/qt-embedded_4.4.0.bb b/packages/qt4/qt-embedded_4.4.0.bb index a74a833ae5..f83b2516d7 100644 --- a/packages/qt4/qt-embedded_4.4.0.bb +++ b/packages/qt4/qt-embedded_4.4.0.bb @@ -3,7 +3,7 @@ require qtopia-core.inc PROVIDES += "qtopia-core" RPROVIDES_${PN} = "qtopia-core" -PR = "r3" +PR = "r4" SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ file://qconfig-oe.h \ diff --git a/packages/qt4/qtopia-core_4.4.0.bb b/packages/qt4/qtopia-core_4.4.0.bb index b17ced70f0..71a702b965 100644 --- a/packages/qt4/qtopia-core_4.4.0.bb +++ b/packages/qt4/qtopia-core_4.4.0.bb @@ -2,3 +2,5 @@ DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_angstrom = "1" +#keep in sync with qt-embedded_4.4.0.bb +PR = "r4" -- cgit v1.2.3 From 260b89a668fac43fc00e02dacf51a777feed7f76 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 14:55:09 +0000 Subject: dsplink: bump PR to force rebuild against updated kernels --- packages/dsplink/codec-engine_2.10.bb | 2 +- packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index 8968a0ce02..b783a5ef32 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -5,7 +5,7 @@ RDEPENDS = "update-modules" inherit module -PR = "r1" +PR = "r2" PV = "2.10" # Get CE tarball from TI website, place in sources and calculate diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index 80088d1ddf..f222fd2861 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r5" +PR = "r6" PE = "1" PV = "1.50" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 922e311256..41e3721a05 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r2" +PR = "r4" PE = "1" PV = "1.51" -- cgit v1.2.3 From 28dfe0ee7737a7702de101bb6ba1e72f7d408f03 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 16:35:04 +0000 Subject: neuros osd image: add dbus and qt/e, attempt to use mdev --- packages/images/neuros-osd-base-image.bb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/images/neuros-osd-base-image.bb b/packages/images/neuros-osd-base-image.bb index ddf524574a..d2e39760c8 100644 --- a/packages/images/neuros-osd-base-image.bb +++ b/packages/images/neuros-osd-base-image.bb @@ -1,7 +1,15 @@ # This image is intended to be the base for further neuros images +inherit image + +export IMAGE_BASENAME = "Neuros-OSD2-base-image" + +PR = "r1" + # Select which Secure Shell Daemon gets included into the rootfs DISTRO_SSH_DAEMON ?= "dropbear" +DISTRO_DEV_MANAGER = "mdev" +PREFERRED_PROVIDER_hotplug = "mdev" # Include a timestamp that initscripts can use to set the time to a # more sane value after a reboot @@ -9,10 +17,10 @@ IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp" IMAGE_INSTALL = "task-boot \ util-linux-mount util-linux-umount \ + e2fsprogs dosfstools \ + wireless-tools zd1211-firmware \ ${DISTRO_SSH_DAEMON} \ - " + qt-embedded dbus \ + " IMAGE_LINGUAS = "" - -inherit image - -- cgit v1.2.3 From 45c6f45b3a33ed8ce1c20f4cd41e0a2b8f3c18e7 Mon Sep 17 00:00:00 2001 From: Leon Woestenberg Date: Wed, 9 Jul 2008 19:07:36 +0000 Subject: fastcgi: Link with -lm. uclibc requires this. Fixes #4421. --- packages/fastcgi/fastcgi_2.4.0.bb | 8 +++----- packages/fastcgi/files/.mtn2git_empty | 0 packages/fastcgi/files/link-against-math.patch | 26 ++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 packages/fastcgi/files/.mtn2git_empty create mode 100644 packages/fastcgi/files/link-against-math.patch diff --git a/packages/fastcgi/fastcgi_2.4.0.bb b/packages/fastcgi/fastcgi_2.4.0.bb index beada396cd..4c70aa3461 100644 --- a/packages/fastcgi/fastcgi_2.4.0.bb +++ b/packages/fastcgi/fastcgi_2.4.0.bb @@ -1,8 +1,9 @@ LICENSE = "Open Market" DESCRIPTION = "Fast CGI backend (web server to CGI handler) library" -PR = "r1" +PR = "r2" -SRC_URI = "http://www.fastcgi.com/dist/fcgi-${PV}.tar.gz" +SRC_URI = "http://www.fastcgi.com/dist/fcgi-${PV}.tar.gz \ +file://link-against-math.patch;patch=1" S=${WORKDIR}/fcgi-${PV} @@ -16,6 +17,3 @@ do_stage() { autotools_stage_all } -do_compile() { -} - diff --git a/packages/fastcgi/files/.mtn2git_empty b/packages/fastcgi/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fastcgi/files/link-against-math.patch b/packages/fastcgi/files/link-against-math.patch new file mode 100644 index 0000000000..37a9a038ce --- /dev/null +++ b/packages/fastcgi/files/link-against-math.patch @@ -0,0 +1,26 @@ +Need to link against the C math library (-lm) at least for uclibc. + +Index: fcgi-2.4.0/cgi-fcgi/Makefile.am +=================================================================== +--- fcgi-2.4.0.orig/cgi-fcgi/Makefile.am 2008-07-09 20:54:56.000000000 +0200 ++++ fcgi-2.4.0/cgi-fcgi/Makefile.am 2008-07-09 20:55:12.000000000 +0200 +@@ -11,5 +11,5 @@ + LIBDIR = ../libfcgi + LIBFCGI = $(LIBDIR)/libfcgi.la + +-LDADD = $(LIBFCGI) ++LDADD = $(LIBFCGI) -lm + cgi_fcgi_SOURCES = $(INCLUDE_FILES) cgi-fcgi.c +Index: fcgi-2.4.0/examples/Makefile.am +=================================================================== +--- fcgi-2.4.0.orig/examples/Makefile.am 2008-07-09 20:54:56.000000000 +0200 ++++ fcgi-2.4.0/examples/Makefile.am 2008-07-09 20:55:11.000000000 +0200 +@@ -21,7 +21,7 @@ + LIBDIR = ../libfcgi + LIBFCGI = $(LIBDIR)/libfcgi.la + +-LDADD = $(LIBFCGI) ++LDADD = $(LIBFCGI) -lm + + echo_SOURCES = $(INCLUDE_FILES) echo.c + echo_x_SOURCES = $(INCLUDE_FILES) echo-x.c -- cgit v1.2.3 From fb3c124a8efbf6dfc9b9a838b782b68c9f2aa0aa Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 21:42:59 +0000 Subject: ffmpeg git: enhance staging --- packages/ffmpeg/ffmpeg_git.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb index c287b86623..41ce4ce9d9 100644 --- a/packages/ffmpeg/ffmpeg_git.bb +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -3,7 +3,7 @@ require ffmpeg.inc DEPENDS += "libgsm" PV = "0.4.9+${PR}+gitr${SRCREV}" -PR = "r9" +PR = "r10" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_armv7a = "1" @@ -79,7 +79,8 @@ do_stage() { for h in avformat.h avio.h rtp.h rtsp.h rtspcodes.h do install -m 0644 ${S}/libavformat/$h ${STAGING_INCDIR}/ffmpeg/$h - done + install -m 0644 ${S}/libavformat/$h ${STAGING_INCDIR}/libavformat/$h + done for h in adler32.h avstring.h avutil.h base64.h bswap.h \ common.h crc.h fifo.h integer.h intfloat_readwrite.h \ -- cgit v1.2.3 From 384eb287e98739817edc378dc990941098b96867 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 21:43:49 +0000 Subject: omapfbplay: add small media player that uses the omapfb overlays to play stuff --- packages/ffmpeg/omapfbplay_git.bb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 packages/ffmpeg/omapfbplay_git.bb diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb new file mode 100644 index 0000000000..c6861e74b2 --- /dev/null +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -0,0 +1,24 @@ +DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" +DEPENDS = "ffmpeg virtual/kernel" +LICENSE = "MIT" + +inherit module-base + +PV = "0.0+${PR}+gitr${SRCREV}" + +SRCREV = "980e6e293f380ec038643c2110aec34f0b96697d" +SRC_URI = "git://git.mansr.com/${PN};protocol=git" + +S = "${WORKDIR}/git" + + +CFLAGS += "-I${STAGING_KERNEL_DIR}/include " + +do_compile() { + oe_runmake -e +} + +do_install() { + install -d ${D}/${bindir} + install -m 0755 ${S}/omapfbplay ${D}/${bindir}/ +} -- cgit v1.2.3 From 532c741ef30ed0b5feb49f833fec4634974ec0f8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 9 Jul 2008 23:24:21 +0000 Subject: linux omap2 git: add patches to get overlay working for beagleboard --- .../beagleboard/01-fix-timing-print.diff | 23 +++++ .../beagleboard/02-set-clkseld11.diff | 22 ++++ .../beagleboard/03-enable-overlay-opt.diff | 27 +++++ .../linux-omap2-git/beagleboard/04-use-pcd.diff | 28 +++++ .../beagleboard/05-fix-display-panning.diff | 45 ++++++++ .../beagleboard/06-ensure-fclk.diff | 31 ++++++ .../beagleboard/07-set-burst-size.diff | 21 ++++ .../linux/linux-omap2-git/beagleboard/defconfig | 2 +- .../beagleboard/omap3-dppl-divider.patch | 114 --------------------- .../linux-omap2-git/beagleboard/omap3-jitter.patch | 95 ----------------- packages/linux/linux-omap2_git.bb | 9 +- 11 files changed, 206 insertions(+), 211 deletions(-) create mode 100644 packages/linux/linux-omap2-git/beagleboard/01-fix-timing-print.diff create mode 100644 packages/linux/linux-omap2-git/beagleboard/02-set-clkseld11.diff create mode 100644 packages/linux/linux-omap2-git/beagleboard/03-enable-overlay-opt.diff create mode 100644 packages/linux/linux-omap2-git/beagleboard/04-use-pcd.diff create mode 100644 packages/linux/linux-omap2-git/beagleboard/05-fix-display-panning.diff create mode 100644 packages/linux/linux-omap2-git/beagleboard/06-ensure-fclk.diff create mode 100644 packages/linux/linux-omap2-git/beagleboard/07-set-burst-size.diff delete mode 100644 packages/linux/linux-omap2-git/beagleboard/omap3-dppl-divider.patch delete mode 100644 packages/linux/linux-omap2-git/beagleboard/omap3-jitter.patch diff --git a/packages/linux/linux-omap2-git/beagleboard/01-fix-timing-print.diff b/packages/linux/linux-omap2-git/beagleboard/01-fix-timing-print.diff new file mode 100644 index 0000000000..89fbe3a836 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/01-fix-timing-print.diff @@ -0,0 +1,23 @@ +From: Mans Rullgard +Date: Sat, 5 Jul 2008 20:31:56 +0000 (+0100) +Subject: omapfb: fix video timings message +X-Git-Tag: beagle-5~3 +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=2929b75035ebe8702ba2ff2c81b654c487701f64 + +omapfb: fix video timings message +--- + +diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c +index 418ed9f..1166a01 100644 +--- a/drivers/video/omap/omapfb_main.c ++++ b/drivers/video/omap/omapfb_main.c +@@ -1789,7 +1789,8 @@ static int omapfb_do_probe(struct platform_device *pdev, + vram, fbdev->mem_desc.region_cnt); + pr_info("omapfb: Pixclock %lu kHz hfreq %lu.%lu kHz " + "vfreq %lu.%lu Hz\n", +- phz / 1000, hhz / 10000, hhz % 10, vhz / 10, vhz % 10); ++ phz / 1000, hhz / 10000, hhz % 10000, ++ vhz / 10, vhz % 10); + + return 0; + diff --git a/packages/linux/linux-omap2-git/beagleboard/02-set-clkseld11.diff b/packages/linux/linux-omap2-git/beagleboard/02-set-clkseld11.diff new file mode 100644 index 0000000000..c437f145d3 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/02-set-clkseld11.diff @@ -0,0 +1,22 @@ +From: Mans Rullgard +Date: Sat, 5 Jul 2008 20:32:38 +0000 (+0100) +Subject: omap: set CLKSEL_DSS1 to 2 +X-Git-Tag: beagle-5~2 +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=d23f9c3c5c6243b626f7ec4c255469de2536e488 + +omap: set CLKSEL_DSS1 to 2 +--- + +diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c +index 8fdf8f3..04dedec 100644 +--- a/arch/arm/mach-omap2/clock34xx.c ++++ b/arch/arm/mach-omap2/clock34xx.c +@@ -596,6 +596,8 @@ int __init omap2_clk_init(void) + /* u32 clkrate; */ + u32 cpu_clkflg; + ++ __raw_writel(0x1002, io_p2v(0x48004e40)); ++ + /* REVISIT: Ultimately this will be used for multiboot */ + #if 0 + if (cpu_is_omap242x()) { diff --git a/packages/linux/linux-omap2-git/beagleboard/03-enable-overlay-opt.diff b/packages/linux/linux-omap2-git/beagleboard/03-enable-overlay-opt.diff new file mode 100644 index 0000000000..9fa749f5fc --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/03-enable-overlay-opt.diff @@ -0,0 +1,27 @@ +From: Mans Rullgard +Date: Sun, 6 Jul 2008 13:15:36 +0000 (+0100) +Subject: omapfb: enable overlay optimisation when possible +X-Git-Tag: beagle-5~1 +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=a63ac3abdf6781f863112321260fe7a5da757802 + +omapfb: enable overlay optimisation when possible +--- + +diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c +index 6aff476..3b36227 100644 +--- a/drivers/video/omap/dispc.c ++++ b/drivers/video/omap/dispc.c +@@ -582,11 +582,13 @@ static int omap_dispc_enable_plane(int plane, int enable) + const u32 at_reg[] = { DISPC_GFX_ATTRIBUTES, + DISPC_VID1_BASE + DISPC_VID_ATTRIBUTES, + DISPC_VID2_BASE + DISPC_VID_ATTRIBUTES }; ++ unsigned overlay_opt = plane & !!enable & !dispc.color_key.key_type; + if ((unsigned int)plane > dispc.mem_desc.region_cnt) + return -EINVAL; + + enable_lcd_clocks(1); + MOD_REG_FLD(at_reg[plane], 1, enable ? 1 : 0); ++ MOD_REG_FLD(DISPC_CONTROL, 1<<12 | 1<<5, overlay_opt<<12 | 1<<5); + enable_lcd_clocks(0); + + return 0; diff --git a/packages/linux/linux-omap2-git/beagleboard/04-use-pcd.diff b/packages/linux/linux-omap2-git/beagleboard/04-use-pcd.diff new file mode 100644 index 0000000000..bdf8ab5f0b --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/04-use-pcd.diff @@ -0,0 +1,28 @@ +From: Mans Rullgard +Date: Sun, 6 Jul 2008 13:22:54 +0000 (+0100) +Subject: omapfb: use PCD if set in panel config +X-Git-Tag: beagle-5 +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=c8060d36ae156771f00a7a27cabf1b4435c378bd + +omapfb: use PCD if set in panel config +--- + +diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c +index 3b36227..4e1a8e3 100644 +--- a/drivers/video/omap/dispc.c ++++ b/drivers/video/omap/dispc.c +@@ -798,7 +798,13 @@ static void set_lcd_timings(void) + l |= panel->acb & 0xff; + dispc_write_reg(DISPC_POL_FREQ, l); + +- calc_ck_div(is_tft, panel->pixel_clock * 1000, &lck_div, &pck_div); ++ if (panel->pcd) { ++ pck_div = panel->pcd; ++ lck_div = 1; ++ } else { ++ calc_ck_div(is_tft, panel->pixel_clock * 1000, ++ &lck_div, &pck_div); ++ } + + l = dispc_read_reg(DISPC_DIVISOR); + l &= ~(FLD_MASK(16, 8) | FLD_MASK(0, 8)); diff --git a/packages/linux/linux-omap2-git/beagleboard/05-fix-display-panning.diff b/packages/linux/linux-omap2-git/beagleboard/05-fix-display-panning.diff new file mode 100644 index 0000000000..d3c9fffcda --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/05-fix-display-panning.diff @@ -0,0 +1,45 @@ +From: Mans Rullgard +Date: Mon, 7 Jul 2008 00:13:00 +0000 (+0100) +Subject: omapfb: fix display panning +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=9fec252c96b0e69bcef0afd9cb9dd72b7179c239 + +omapfb: fix display panning +--- + +diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c +index 4e1a8e3..c17371c 100644 +--- a/drivers/video/omap/dispc.c ++++ b/drivers/video/omap/dispc.c +@@ -435,6 +435,8 @@ static inline int _setup_plane(int plane, int channel_out, + + dispc_write_reg(ri_reg[plane], (screen_width - width) * bpp / 8 + 1); + ++ MOD_REG_FLD(DISPC_CONTROL, 1<<5, 1<<5); ++ + return height * screen_width * bpp / 8; + } + +diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c +index 1166a01..3e4959e 100644 +--- a/drivers/video/omap/omapfb_main.c ++++ b/drivers/video/omap/omapfb_main.c +@@ -206,8 +206,8 @@ static int ctrl_change_mode(struct fb_info *fbi) + struct omapfb_device *fbdev = plane->fbdev; + struct fb_var_screeninfo *var = &fbi->var; + +- offset = var->yoffset * fbi->fix.line_length + +- var->xoffset * var->bits_per_pixel / 8; ++ offset = (var->yoffset * var->xres_virtual + var->xoffset) * ++ var->bits_per_pixel / 8; + + if (fbdev->ctrl->sync) + fbdev->ctrl->sync(); +@@ -423,6 +423,8 @@ static void set_fb_fix(struct fb_info *fbi) + } + fix->accel = FB_ACCEL_OMAP1610; + fix->line_length = var->xres_virtual * bpp / 8; ++ fix->xpanstep = 1; ++ fix->ypanstep = 1; + } + + static int set_color_mode(struct omapfb_plane_struct *plane, diff --git a/packages/linux/linux-omap2-git/beagleboard/06-ensure-fclk.diff b/packages/linux/linux-omap2-git/beagleboard/06-ensure-fclk.diff new file mode 100644 index 0000000000..79871a7208 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/06-ensure-fclk.diff @@ -0,0 +1,31 @@ +From: Mans Rullgard +Date: Mon, 7 Jul 2008 23:59:08 +0000 (+0100) +Subject: omapfb: ensure fck/lcd < 173MHz +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=0523ece1bad659c48c66aea364d83f7490e7e5ae + +omapfb: ensure fck/lcd < 173MHz +--- + +diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c +index c17371c..85d6cad 100644 +--- a/drivers/video/omap/dispc.c ++++ b/drivers/video/omap/dispc.c +@@ -738,14 +738,16 @@ static void setup_color_conv_coef(void) + MOD_REG_FLD(at2_reg, (1 << 11), ct->full_range); + } + ++#define MAX_FCK_LCD 173000000 ++ + static void calc_ck_div(int is_tft, int pck, int *lck_div, int *pck_div) + { + unsigned long fck, lck; + +- *lck_div = 1; + pck = max(1, pck); + fck = clk_get_rate(dispc.dss1_fck); +- lck = fck; ++ *lck_div = (fck + MAX_FCK_LCD - 1) / MAX_FCK_LCD; ++ lck = fck / *lck_div; + *pck_div = (lck + pck - 1) / pck; + if (is_tft) + *pck_div = max(2, *pck_div); diff --git a/packages/linux/linux-omap2-git/beagleboard/07-set-burst-size.diff b/packages/linux/linux-omap2-git/beagleboard/07-set-burst-size.diff new file mode 100644 index 0000000000..99bd80eae0 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/07-set-burst-size.diff @@ -0,0 +1,21 @@ +From: Mans Rullgard +Date: Tue, 8 Jul 2008 18:26:43 +0000 (+0100) +Subject: omapfb: set graphics burst size to 16x32 +X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=4f9e415dfcd5613a8de973f6c9878cab959c5869 + +omapfb: set graphics burst size to 16x32 +--- + +diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c +index 85d6cad..fd06ca2 100644 +--- a/drivers/video/omap/dispc.c ++++ b/drivers/video/omap/dispc.c +@@ -409,7 +409,7 @@ static inline int _setup_plane(int plane, int channel_out, + l |= cconv_en << 9; + + l &= ~(0x03 << burst_shift); +- l |= DISPC_BURST_8x32 << burst_shift; ++ l |= DISPC_BURST_16x32 << burst_shift; + + l &= ~(1 << chout_shift); + l |= chout_val << chout_shift; diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 0b4af695d8..6381271cf9 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1246,7 +1246,7 @@ CONFIG_FB_OMAP_079M3R=y # CONFIG_FB_OMAP_092M9R is not set # CONFIG_FB_OMAP_LCDC_EXTERNAL is not set # CONFIG_FB_OMAP_BOOTLOADER_INIT is not set -CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=4 +CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=8 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set # diff --git a/packages/linux/linux-omap2-git/beagleboard/omap3-dppl-divider.patch b/packages/linux/linux-omap2-git/beagleboard/omap3-dppl-divider.patch deleted file mode 100644 index 25e5aad9c9..0000000000 --- a/packages/linux/linux-omap2-git/beagleboard/omap3-dppl-divider.patch +++ /dev/null @@ -1,114 +0,0 @@ -From linux-omap-owner@vger.kernel.org Tue Jun 24 09:24:30 2008 -Received: from localhost - ([127.0.0.1] helo=dominion ident=koen) - by dominion.dominion.void with esmtp (Exim 4.63) - (envelope-from ) - id 1KB2tB-0005XT-FQ - for koen@localhost; Tue, 24 Jun 2008 09:24:30 +0200 -Received: from xs.service.utwente.nl [130.89.5.250] - by dominion with POP3 (fetchmail-6.3.6) - for (single-drop); Tue, 24 Jun 2008 09:24:29 +0200 (CEST) -Received: from mail.service.utwente.nl ([130.89.5.254]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Tue, 24 Jun 2008 09:13:04 +0200 -Received: from mx.utwente.nl ([130.89.2.13]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Tue, 24 Jun 2008 09:13:03 +0200 -Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) - by mx.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m5O7CcD7008917 - for ; Tue, 24 Jun 2008 09:12:38 +0200 -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S1751623AbYFXHMh (ORCPT ); - Tue, 24 Jun 2008 03:12:37 -0400 -Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751670AbYFXHMh - (ORCPT ); - Tue, 24 Jun 2008 03:12:37 -0400 -Received: from utopia.booyaka.com ([72.9.107.138]:47392 "EHLO - utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1751623AbYFXHMg (ORCPT - ); Tue, 24 Jun 2008 03:12:36 -0400 -Received: (qmail 1797 invoked by uid 526); 24 Jun 2008 07:12:35 -0000 -Date: Tue, 24 Jun 2008 01:12:35 -0600 (MDT) -From: Paul Walmsley -To: linux-omap@vger.kernel.org -Subject: [PATCH] OMAP3 clock: DPLL{1,2}_FCLK clksel can divide by 4 -Message-ID: -User-Agent: Alpine 1.00 (DEB 882 2007-12-20) -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=US-ASCII -Sender: linux-omap-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: linux-omap@vger.kernel.org -X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information. -X-UTwente-MailScanner: Found to be clean -X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org -X-Spam-Status: No -X-OriginalArrivalTime: 24 Jun 2008 07:13:04.0264 (UTC) FILETIME=[BE950880:01C8D5C9] - - -OMAP34xx ES2 TRM Delta G to H states that the divider for DPLL1_FCLK and -DPLL2_FCLK can divide by 4 in addition to dividing by 1 and 2. Encode this -into the OMAP3 clock framework. - -Signed-off-by: Paul Walmsley ---- - - arch/arm/mach-omap2/clock34xx.h | 20 ++++++++++++++++---- - 1 files changed, 16 insertions(+), 4 deletions(-) - -diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h -index b4dceea..9605744 100644 ---- a/arch/arm/mach-omap2/clock34xx.h -+++ b/arch/arm/mach-omap2/clock34xx.h -@@ -1029,8 +1029,15 @@ static struct clk corex2_fck = { - - /* DPLL power domain clock controls */ - --static const struct clksel div2_core_clksel[] = { -- { .parent = &core_ck, .rates = div2_rates }, -+static const struct clksel_rate div4_rates[] = { -+ { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE }, -+ { .div = 2, .val = 2, .flags = RATE_IN_343X }, -+ { .div = 4, .val = 4, .flags = RATE_IN_343X }, -+ { .div = 0 } -+}; -+ -+static const struct clksel div4_core_clksel[] = { -+ { .parent = &core_ck, .rates = div4_rates }, - { .parent = NULL } - }; - -@@ -1044,7 +1051,7 @@ static struct clk dpll1_fck = { - .init = &omap2_init_clksel_parent, - .clksel_reg = _OMAP34XX_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL), - .clksel_mask = OMAP3430_MPU_CLK_SRC_MASK, -- .clksel = div2_core_clksel, -+ .clksel = div4_core_clksel, - .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | - PARENT_CONTROLS_CLOCK, - .recalc = &omap2_clksel_recalc, -@@ -1119,7 +1126,7 @@ static struct clk dpll2_fck = { - .init = &omap2_init_clksel_parent, - .clksel_reg = _OMAP34XX_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL), - .clksel_mask = OMAP3430_IVA2_CLK_SRC_MASK, -- .clksel = div2_core_clksel, -+ .clksel = div4_core_clksel, - .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | - PARENT_CONTROLS_CLOCK, - .recalc = &omap2_clksel_recalc, -@@ -1155,6 +1162,11 @@ static struct clk iva2_ck = { - - /* Common interface clocks */ - -+static const struct clksel div2_core_clksel[] = { -+ { .parent = &core_ck, .rates = div2_rates }, -+ { .parent = NULL } -+}; -+ - static struct clk l3_ick = { - .name = "l3_ick", - .parent = &core_ck, --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - diff --git a/packages/linux/linux-omap2-git/beagleboard/omap3-jitter.patch b/packages/linux/linux-omap2-git/beagleboard/omap3-jitter.patch deleted file mode 100644 index 2e0dfd9f13..0000000000 --- a/packages/linux/linux-omap2-git/beagleboard/omap3-jitter.patch +++ /dev/null @@ -1,95 +0,0 @@ -From linux-omap-owner@vger.kernel.org Tue Jun 24 09:24:30 2008 -Received: from localhost - ([127.0.0.1] helo=dominion ident=koen) - by dominion.dominion.void with esmtp (Exim 4.63) - (envelope-from ) - id 1KB2tC-0005XT-Mj - for koen@localhost; Tue, 24 Jun 2008 09:24:30 +0200 -Received: from xs.service.utwente.nl [130.89.5.250] - by dominion with POP3 (fetchmail-6.3.6) - for (single-drop); Tue, 24 Jun 2008 09:24:30 +0200 (CEST) -Received: from mail.service.utwente.nl ([130.89.5.253]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Tue, 24 Jun 2008 09:20:48 +0200 -Received: from smtp.utwente.nl ([130.89.2.8]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); - Tue, 24 Jun 2008 09:20:47 +0200 -Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) - by smtp.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m5O7BPWU031214 - for ; Tue, 24 Jun 2008 09:11:25 +0200 -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S1751128AbYFXHLY (ORCPT ); - Tue, 24 Jun 2008 03:11:24 -0400 -Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751405AbYFXHLX - (ORCPT ); - Tue, 24 Jun 2008 03:11:23 -0400 -Received: from utopia.booyaka.com ([72.9.107.138]:44580 "EHLO - utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1751128AbYFXHLX (ORCPT - ); Tue, 24 Jun 2008 03:11:23 -0400 -Received: (qmail 1744 invoked by uid 526); 24 Jun 2008 07:11:21 -0000 -Date: Tue, 24 Jun 2008 01:11:21 -0600 (MDT) -From: Paul Walmsley -To: linux-omap@vger.kernel.org -Subject: [PATCH] OMAP3 clock: fix DPLL jitter correction and rate - programming -Message-ID: -User-Agent: Alpine 1.00 (DEB 882 2007-12-20) -MIME-Version: 1.0 -Content-Type: TEXT/PLAIN; charset=US-ASCII -Sender: linux-omap-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: linux-omap@vger.kernel.org -X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information. -X-UTwente-MailScanner: Found to be clean -X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org -X-Spam-Status: No -X-OriginalArrivalTime: 24 Jun 2008 07:20:48.0265 (UTC) FILETIME=[D325F790:01C8D5CA] - - -Fix DPLL jitter correction programming. Previously, -omap3_noncore_dpll_program() stored the FREQSEL jitter correction -parameter to the wrong register. This caused jitter correction to be set -incorrectly and also caused the DPLL divider to be programmed incorrectly. - -Also, fix DPLL divider programming. An off-by-one error existed in -omap3_noncore_dpll_program(), causing DPLLs to be programmed with a higher -divider than intended. - -Signed-off-by: Paul Walmsley ---- - - arch/arm/mach-omap2/clock34xx.c | 13 ++++++++----- - 1 files changed, 8 insertions(+), 5 deletions(-) - -diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c -index 408b51a..8fdf8f3 100644 ---- a/arch/arm/mach-omap2/clock34xx.c -+++ b/arch/arm/mach-omap2/clock34xx.c -@@ -346,14 +346,17 @@ static int omap3_noncore_dpll_program(struct clk *clk, u16 m, u8 n, u16 freqsel) - /* 3430 ES2 TRM: 4.7.6.9 DPLL Programming Sequence */ - _omap3_noncore_dpll_bypass(clk); - -+ /* Set jitter correction */ -+ v = __raw_readl(dd->control_reg); -+ v &= ~dd->freqsel_mask; -+ v |= freqsel << __ffs(dd->freqsel_mask); -+ __raw_writel(v, dd->control_reg); -+ -+ /* Set DPLL multiplier, divider */ - v = __raw_readl(dd->mult_div1_reg); - v &= ~(dd->mult_mask | dd->div1_mask); -- -- /* Set mult (M), div1 (N), freqsel */ - v |= m << __ffs(dd->mult_mask); -- v |= n << __ffs(dd->div1_mask); -- v |= freqsel << __ffs(dd->freqsel_mask); -- -+ v |= (n - 1) << __ffs(dd->div1_mask); - __raw_writel(v, dd->mult_div1_reg); - - /* We let the clock framework set the other output dividers later */ --- -To unsubscribe from this list: send the line "unsubscribe linux-omap" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 8392ff7308..797511b5d6 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" -PR = "r40" +PR = "r41" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -21,6 +21,13 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://no-empty-flash-warnings.patch;patch=1 \ file://logo_linux_clut224.ppm \ file://oprofile-0.9.3.armv7.diff;patch=1 \ + file://01-fix-timing-print.diff;patch=1 \ + file://02-set-clkseld11.diff;patch=1 \ + file://03-enable-overlay-opt.diff;patch=1 \ + file://04-use-pcd.diff;patch=1 \ + file://05-fix-display-panning.diff;patch=1 \ + file://06-ensure-fclk.diff;patch=1 \ + file://07-set-burst-size.diff;patch=1 \ " SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ -- cgit v1.2.3 From 83fb760ad8f0764fa81b480d85c458c80d2b8116 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 08:34:22 +0000 Subject: ffmpeg git: adjust staging --- packages/ffmpeg/ffmpeg_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb index 41ce4ce9d9..0c9936a2f9 100644 --- a/packages/ffmpeg/ffmpeg_git.bb +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -42,7 +42,7 @@ EXTRA_OECONF = " \ --enable-libfaadbin \ --enable-libgsm \ --enable-libmp3lame \ - --enable-swscale \ + --disable-swscale \ --arch=${TARGET_ARCH} \ --enable-cross-compile \ --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \ @@ -63,7 +63,7 @@ do_stage() { for lib in libavcodec libavdevice libavformat \ libavutil libpostproc libswscale do - oe_libinstall -a -so -C $lib $lib ${STAGING_LIBDIR} + oe_libinstall -a -so -C $lib $lib ${STAGING_LIBDIR} || true install -d ${STAGING_INCDIR}/$lib done -- cgit v1.2.3 From 21b1c8a5c53d1cafaacad8ea7ae115846f3a8706 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 08:34:57 +0000 Subject: omapfbplay: bump SRCREV to move frame display to a seperate thread --- packages/ffmpeg/omapfbplay_git.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb index c6861e74b2..6274575a34 100644 --- a/packages/ffmpeg/omapfbplay_git.bb +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -2,11 +2,13 @@ DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" DEPENDS = "ffmpeg virtual/kernel" LICENSE = "MIT" +PR = "r1" + inherit module-base PV = "0.0+${PR}+gitr${SRCREV}" -SRCREV = "980e6e293f380ec038643c2110aec34f0b96697d" +SRCREV = "5d0a1fd4c9733ef8c57823c368e21688344bbeb4" SRC_URI = "git://git.mansr.com/${PN};protocol=git" S = "${WORKDIR}/git" -- cgit v1.2.3 From 10a3e1fe34495ea6ecbf6e7800a38090c5f5b2de Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 11:02:38 +0000 Subject: omapfbplay: make a static binary --- packages/ffmpeg/omapfbplay/.mtn2git_empty | 0 packages/ffmpeg/omapfbplay/fbplay-static.diff | 10 ++++++++++ packages/ffmpeg/omapfbplay_git.bb | 7 ++++--- 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 packages/ffmpeg/omapfbplay/.mtn2git_empty create mode 100644 packages/ffmpeg/omapfbplay/fbplay-static.diff diff --git a/packages/ffmpeg/omapfbplay/.mtn2git_empty b/packages/ffmpeg/omapfbplay/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/ffmpeg/omapfbplay/fbplay-static.diff b/packages/ffmpeg/omapfbplay/fbplay-static.diff new file mode 100644 index 0000000000..439fc6e6bb --- /dev/null +++ b/packages/ffmpeg/omapfbplay/fbplay-static.diff @@ -0,0 +1,10 @@ +--- /tmp/Makefile 2008-07-10 12:59:00.000000000 +0200 ++++ git/Makefile 2008-07-10 12:57:38.723198000 +0200 +@@ -5,6 +5,6 @@ + CFLAGS = -O3 -Wall -fomit-frame-pointer -mcpu=cortex-a8 -mfpu=neon \ + -I$(LINUX)/include -I$(FFMPEG) + LDFLAGS = -L$(FFMPEG)/libavcodec -L$(FFMPEG)/libavformat -L$(FFMPEG)/libavutil +-LDLIBS = -lavformat -lavcodec -lavutil -lm -lz -lpthread ++LDLIBS = -lavformat -lavcodec -lavutil -lz -ldl -lbz2 -lfaac -lgsm -lmp3lame -lm -lpthread + + all: omapfbplay diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb index 6274575a34..8f19d27469 100644 --- a/packages/ffmpeg/omapfbplay_git.bb +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -2,19 +2,20 @@ DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" DEPENDS = "ffmpeg virtual/kernel" LICENSE = "MIT" -PR = "r1" +PR = "r2" inherit module-base PV = "0.0+${PR}+gitr${SRCREV}" SRCREV = "5d0a1fd4c9733ef8c57823c368e21688344bbeb4" -SRC_URI = "git://git.mansr.com/${PN};protocol=git" +SRC_URI = "git://git.mansr.com/${PN};protocol=git \ + file://fbplay-static.diff;patch=1 " S = "${WORKDIR}/git" -CFLAGS += "-I${STAGING_KERNEL_DIR}/include " +CFLAGS += " -static -I${STAGING_KERNEL_DIR}/include " do_compile() { oe_runmake -e -- cgit v1.2.3 From 8860d326b55de67f29e3839c24f6d08158263cd1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 12:12:24 +0000 Subject: beagleboard demo image: add mplayer and omapfbplay --- packages/images/beagleboard-demo-image.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/images/beagleboard-demo-image.bb b/packages/images/beagleboard-demo-image.bb index 67632ff0a9..6ac22916dd 100644 --- a/packages/images/beagleboard-demo-image.bb +++ b/packages/images/beagleboard-demo-image.bb @@ -28,6 +28,7 @@ IMAGE_INSTALL = "\ powertop oprofile \ pidgin \ # irssi \ + mplayer omapfbplay \ " IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp" -- cgit v1.2.3 From 0edf712c220323fe0bffd354012ea8ede0946c07 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 10 Jul 2008 14:50:43 +0000 Subject: chinook-compat: Set dbus-glib version preference to 0.7.4. --- conf/distro/chinook-compat.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf index f6029eed1b..0fb2dd4511 100644 --- a/conf/distro/chinook-compat.conf +++ b/conf/distro/chinook-compat.conf @@ -87,9 +87,12 @@ PREFERRED_VERSION_pango = "1.16.4" PREFERRED_VERSION_atk = "1.18.0" PREFERRED_VERSION_gtk+ = "2.10.14" PREFERRED_VERSION_libpng = "1.2.8" -PREFERRED_VERSION_dbus = "1.0.3" PREFERRED_VERSION_expat = "1.95.7" +# only dbus-glib 0.7.4 works with older dbus 1.0.x +PREFERRED_VERSION_dbus = "1.0.3" +PREFERRED_VERSION_dbus-glib = "0.7.4" + PREFERRED_VERSION_gnome-vfs = "2.16.3" # 3.9.1 would be correct -- cgit v1.2.3 From daca624e4b5f1363dc5ffaf333324e41746bf138 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 10 Jul 2008 15:59:04 +0000 Subject: classpath: Added patch fixing build on newer GCCs (and prevents a bug). --- packages/classpath/classpath_0.95.bb | 3 ++- packages/classpath/classpath_0.96.1.bb | 3 ++- packages/classpath/classpath_0.97.2.bb | 3 ++- packages/classpath/files/javanet-local.patch | 37 ++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 packages/classpath/files/javanet-local.patch diff --git a/packages/classpath/classpath_0.95.bb b/packages/classpath/classpath_0.95.bb index 0b2090f72f..45ce04f519 100644 --- a/packages/classpath/classpath_0.95.bb +++ b/packages/classpath/classpath_0.95.bb @@ -3,9 +3,10 @@ require classpath.inc SRC_URI += "\ file://gjar-prefix-patch.diff;patch=1;pnum=0 \ file://xmlstream-fix.patch;patch=1;pnum=0 \ + file://javanet-local.patch;patch=1;pnum=0 \ " -PR = "r3" +PR = "r4" DEPENDS += "gtk+ gconf libxtst" diff --git a/packages/classpath/classpath_0.96.1.bb b/packages/classpath/classpath_0.96.1.bb index 9d347a0303..6952cda72f 100644 --- a/packages/classpath/classpath_0.96.1.bb +++ b/packages/classpath/classpath_0.96.1.bb @@ -3,9 +3,10 @@ require classpath.inc SRC_URI += "\ file://gjar-prefix-patch.diff;patch=1;pnum=0 \ file://xmlstream-fix.patch;patch=1;pnum=0 \ + file://javanet-local.patch;patch=1;pnum=0 \ " -PR = "r5" +PR = "r6" DEPENDS += "gtk+ gconf libxtst" diff --git a/packages/classpath/classpath_0.97.2.bb b/packages/classpath/classpath_0.97.2.bb index 338ebcf0d4..fafe0bbb88 100644 --- a/packages/classpath/classpath_0.97.2.bb +++ b/packages/classpath/classpath_0.97.2.bb @@ -3,9 +3,10 @@ require classpath.inc SRC_URI += "\ file://netif_16.patch;patch=1;pnum=0 \ file://SimpleName.diff;patch=1;pnum=0 \ + file://javanet-local;patch=1;pnum=0 \ " -PR = "r0" +PR = "r1" DEPENDS += "gtk+ gconf libxtst" diff --git a/packages/classpath/files/javanet-local.patch b/packages/classpath/files/javanet-local.patch new file mode 100644 index 0000000000..b8d1584e7c --- /dev/null +++ b/packages/classpath/files/javanet-local.patch @@ -0,0 +1,37 @@ +Index: native/jni/java-net/local.c +=================================================================== +RCS file: /sources/classpath/classpath/native/jni/java-net/local.c,v +retrieving revision 1.4 +diff -u -r1.4 local.c +--- native/jni/java-net/local.c 17 Apr 2007 21:46:27 -0000 1.4 ++++ native/jni/java-net/local.c 27 Jun 2008 13:14:40 -0000 +@@ -73,27 +73,18 @@ + return socket (PF_UNIX, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + } + +-static int gcc_sucks = 0; +- + int + local_bind (int fd, const char *addr) + { + struct sockaddr_un saddr; + +- /* For some reason, GCC 4.0.1 on Darwin/x86 MODIFIES the `addr' +- pointer in the CALLER's STACK FRAME after calling this function, +- but if we add this statement below, it doesn't! */ +- if (gcc_sucks) +- fprintf (stderr, "bind %p\n", addr); +- +- if (strlen (addr) > sizeof (saddr.sun_path)) ++ if (strlen (addr) >= sizeof (saddr.sun_path)) + { + errno = ENAMETOOLONG; + return -1; + } + +- strncpy (saddr.sun_path, addr, sizeof (saddr.sun_path)); +- saddr.sun_path[sizeof (saddr.sun_path)] = '\0'; ++ strcpy (saddr.sun_path, addr); + saddr.sun_family = AF_LOCAL; + + return bind (fd, (struct sockaddr *) &saddr, SUN_LEN (&saddr)); -- cgit v1.2.3 From f2f3619fc7da1972c071c5e89b32de600d57b020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20L=C3=BCbbe?= Date: Thu, 10 Jul 2008 16:30:11 +0000 Subject: fso-image: use e-wm instead of matchbox --- packages/freesmartphone/zhone/80zhone | 2 +- packages/freesmartphone/zhone_git.bb | 2 +- packages/images/fso-image.bb | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/freesmartphone/zhone/80zhone b/packages/freesmartphone/zhone/80zhone index 90a1e95b39..5a36e873f4 100644 --- a/packages/freesmartphone/zhone/80zhone +++ b/packages/freesmartphone/zhone/80zhone @@ -1,4 +1,4 @@ #!/bin/sh -e -zhone --fullscreen > /tmp/zhone.log 2>&1 & +zhone > /tmp/zhone.log 2>&1 & renice -3 $! exit 0 diff --git a/packages/freesmartphone/zhone_git.bb b/packages/freesmartphone/zhone_git.bb index a766eb1ab5..8a4a21bbed 100644 --- a/packages/freesmartphone/zhone_git.bb +++ b/packages/freesmartphone/zhone_git.bb @@ -4,7 +4,7 @@ SECTION = "x11" DEPENDS = "edje-native python-pyrex-native python-cython-native" RDEPENDS = "task-python-efl python-textutils python-dbus" PV = "0.0.0+gitr${SRCREV}" -PR = "r6" +PR = "r7" SRC_URI = "${FREESMARTPHONE_GIT}/zhone.git;protocol=git;branch=master \ file://80zhone" diff --git a/packages/images/fso-image.bb b/packages/images/fso-image.bb index c257158a12..173f598770 100644 --- a/packages/images/fso-image.bb +++ b/packages/images/fso-image.bb @@ -18,7 +18,9 @@ BASE_INSTALL = "\ # getting an X window system up X_INSTALL = "\ - matchbox-wm \ + e-wm \ + illume \ + illume-theme \ ${XSERVER} \ xserver-kdrive-common \ xserver-nodm-init \ -- cgit v1.2.3 From 460a49bd121f7753156bf45558e258155cf93ad8 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 10 Jul 2008 18:06:20 +0000 Subject: jamvm-initial: Fixed installation directory. --- packages/jamvm/jamvm-initial_1.5.0.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/jamvm/jamvm-initial_1.5.0.bb b/packages/jamvm/jamvm-initial_1.5.0.bb index 3369733340..a1c415dd62 100644 --- a/packages/jamvm/jamvm-initial_1.5.0.bb +++ b/packages/jamvm/jamvm-initial_1.5.0.bb @@ -4,6 +4,8 @@ LICENSE = "GPL" DEPENDS = "zlib-native classpath-initial jikes-initial" +PR = "r1" + PROVIDES = "virtual/java-initial" S = "${WORKDIR}/jamvm-${PV}" @@ -18,7 +20,7 @@ ARM_INSTRUCTION_SET = "arm" inherit native autotools EXTRA_OECONF = "\ - --with-classpath-install-dir=${STAGING_DIR_NATIVE}\ + --with-classpath-install-dir=${prefix} \ --program-suffix=-initial \ " -- cgit v1.2.3 From b962cd5700837714cf2f16090b5fdd870cc7f458 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 18:39:06 +0000 Subject: omapfbplay: fix depends --- packages/ffmpeg/omapfbplay_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb index 8f19d27469..a3c50da5cc 100644 --- a/packages/ffmpeg/omapfbplay_git.bb +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -1,8 +1,8 @@ DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" -DEPENDS = "ffmpeg virtual/kernel" +DEPENDS = "bzip2 libmp3lame ffmpeg virtual/kernel" LICENSE = "MIT" -PR = "r2" +PR = "r3" inherit module-base -- cgit v1.2.3 From 2cbe083afe8cd29ff3e0fe3694b8fb08c23b3af6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 18:40:26 +0000 Subject: angstrom-glibc: don't use -Os on armv7, csl2007q3 breaks horribly with it --- conf/distro/include/angstrom-glibc.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/distro/include/angstrom-glibc.inc b/conf/distro/include/angstrom-glibc.inc index a143fe9e65..4734187f0f 100644 --- a/conf/distro/include/angstrom-glibc.inc +++ b/conf/distro/include/angstrom-glibc.inc @@ -29,6 +29,7 @@ FULL_OPTIMIZATION_pn-glibc-intermediate = "-O2" FULL_OPTIMIZATION_pn-glibc = "-fexpensive-optimizations -fomit-frame-pointer -O2" FULL_OPTIMIZATION_sparc = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2" +FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -frename-registers -fomit-frame-pointer -ftree-vectorize -O2" FULL_OPTIMIZATION_pn-glibc_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -ftree-vectorize -O3" BUILD_OPTIMIZATION = "-Os" -- cgit v1.2.3 From 81c95077c313c5eb1e8611cbb80f641899b7fdca Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 10 Jul 2008 19:48:07 +0000 Subject: cacao-native.inc: Fix setting include dir. --- packages/cacao/cacao-native.inc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/cacao/cacao-native.inc b/packages/cacao/cacao-native.inc index 8ae2874253..f4eee16cf6 100644 --- a/packages/cacao/cacao-native.inc +++ b/packages/cacao/cacao-native.inc @@ -17,7 +17,7 @@ EXTRA_OECONF = "\ --with-vm-zip=${datadir}/cacao/vm.zip \ \ --with-classpath-libdir=${libdir_jni}:${libdir} \ - --with-classpath-includedir=${includedir}/classpath \ + --with-classpath-includedir=${incdir}/classpath \ --with-classpath-classes=${datadir}/classpath/glibj.zip \ \ --with-java-runtime-library-classes=${datadir}/classpath/glibj.zip \ @@ -26,8 +26,11 @@ EXTRA_OECONF = "\ --with-jni_h=${incdir}/classpath \ " -# force usage of ecj-initial (but Java5-compatible class library) -export JAVAC="${STAGING_BINDIR_NATIVE}/ecj-initial -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath/glibj.zip" +# force usage of ecj-initial +# Important: Not specifying the bootclasspath argument here is only supported +# for Cacao >= 0.99. Earlier Cacao may need the BCP set to a Java5-capable +# class library. +export JAVAC="${STAGING_BINDIR_NATIVE}/ecj-initial" # force usage of fastjar -export JAR=fastjar +export JAR="fastjar" -- cgit v1.2.3 From 40278a60d9052ede1a5d6484be57959f3650e1bd Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Thu, 10 Jul 2008 19:49:15 +0000 Subject: classpath-native 0.97.2: New recipe. --- packages/classpath/classpath-native_0.97.2.bb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/classpath/classpath-native_0.97.2.bb diff --git a/packages/classpath/classpath-native_0.97.2.bb b/packages/classpath/classpath-native_0.97.2.bb new file mode 100644 index 0000000000..e744b3378e --- /dev/null +++ b/packages/classpath/classpath-native_0.97.2.bb @@ -0,0 +1,13 @@ +require classpath-native.inc + +PR = "r0" + +# The code affected by the javanet-local patch +# is usually not compiled. However if someone changes +# to --enable-local-sockets it will. +SRC_URI += "\ + file://netif_16.patch;patch=1;pnum=0 \ + file://SimpleName.diff;patch=1;pnum=0 \ + file://javanet-local.patch;patch=1;pnum=0 \ + " + -- cgit v1.2.3 From 1ba9771aa3554051a356f7985f2b653d23e5a9d8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 10 Jul 2008 20:20:32 +0000 Subject: omapfbplay: update DEPENDS --- packages/ffmpeg/omapfbplay_git.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb index a3c50da5cc..e87550207f 100644 --- a/packages/ffmpeg/omapfbplay_git.bb +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" -DEPENDS = "bzip2 libmp3lame ffmpeg virtual/kernel" +DEPENDS = "bzip2 lame ffmpeg virtual/kernel" LICENSE = "MIT" PR = "r3" -- cgit v1.2.3 From d8805be5cae986e4489bb7a9a83836bd133c1615 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 07:59:04 +0000 Subject: ffmpeg git: bump SRCREV to get rid of image curruption when using gcc 4.3.1 omapfbplay git: bump PR to use above ffmpeg --- packages/ffmpeg/ffmpeg_git.bb | 4 ++-- packages/ffmpeg/omapfbplay_git.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb index 0c9936a2f9..294b6afc22 100644 --- a/packages/ffmpeg/ffmpeg_git.bb +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -3,7 +3,7 @@ require ffmpeg.inc DEPENDS += "libgsm" PV = "0.4.9+${PR}+gitr${SRCREV}" -PR = "r10" +PR = "r12" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_armv7a = "1" @@ -12,7 +12,7 @@ FFBRANCH_arm = "arm-neon" FFBRANCH ?= "master" SRCREV = "1e8300e71f79963eacdad6b180d9a12c4f56318d" -SRCREV_arm = "4cc48b756abd09baa7b31909ebbc0c09be2c8e5a" +SRCREV_arm = "749766cea9969418633abb77b6c8677a884dfcb9" SRC_URI = "git://git.mansr.com/ffmpeg.mru;protocol=git;branch=${FFBRANCH} \ " diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb index e87550207f..b8e092def6 100644 --- a/packages/ffmpeg/omapfbplay_git.bb +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" DEPENDS = "bzip2 lame ffmpeg virtual/kernel" LICENSE = "MIT" -PR = "r3" +PR = "r4" inherit module-base -- cgit v1.2.3 From a7b535066025fea712e253cd0951f244ec4bbaf8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 08:24:30 +0000 Subject: libmad: sanitize optimization options, some were remove in recent gcc versions --- packages/libmad/files/mad.diff | 24 ++++++++++++++++++++++++ packages/libmad/libmad_0.15.1b.bb | 5 +++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 packages/libmad/files/mad.diff diff --git a/packages/libmad/files/mad.diff b/packages/libmad/files/mad.diff new file mode 100644 index 0000000000..851dc01201 --- /dev/null +++ b/packages/libmad/files/mad.diff @@ -0,0 +1,24 @@ +--- /tmp/configure.ac 2008-07-11 10:19:17.000000000 +0200 ++++ libmad-0.15.1b/configure.ac 2008-07-11 10:20:00.313198000 +0200 +@@ -140,21 +140,14 @@ + case "$optimize" in + -O|"-O "*) + optimize="-O" +- optimize="$optimize -fforce-mem" +- optimize="$optimize -fforce-addr" + : #x optimize="$optimize -finline-functions" + : #- optimize="$optimize -fstrength-reduce" +- optimize="$optimize -fthread-jumps" +- optimize="$optimize -fcse-follow-jumps" +- optimize="$optimize -fcse-skip-blocks" + : #x optimize="$optimize -frerun-cse-after-loop" + : #x optimize="$optimize -frerun-loop-opt" + : #x optimize="$optimize -fgcse" + optimize="$optimize -fexpensive-optimizations" +- optimize="$optimize -fregmove" + : #* optimize="$optimize -fdelayed-branch" + : #x optimize="$optimize -fschedule-insns" +- optimize="$optimize -fschedule-insns2" + : #? optimize="$optimize -ffunction-sections" + : #? optimize="$optimize -fcaller-saves" + : #> optimize="$optimize -funroll-loops" diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb index d828ca85a4..4a75c2d927 100644 --- a/packages/libmad/libmad_0.15.1b.bb +++ b/packages/libmad/libmad_0.15.1b.bb @@ -3,10 +3,11 @@ SECTION = "libs" PRIORITY = "optional" DEPENDS = "libid3tag" LICENSE = "GPL" -PR = "r3" +PR = "r4" SRC_URI = "${SOURCEFORGE_MIRROR}/mad/libmad-${PV}.tar.gz \ - file://add-pkgconfig.patch;patch=1" + file://add-pkgconfig.patch;patch=1 \ + file://mad.diff;patch=1 " S = "${WORKDIR}/libmad-${PV}" -- cgit v1.2.3 From 0c51bf951cdee42392c6cb565b7a82d9975a0d72 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 08:59:10 +0000 Subject: codec-engine: disable parallel make --- packages/dsplink/codec-engine_2.10.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index b783a5ef32..49593a23ab 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -17,6 +17,7 @@ SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_10_01.tar.gz \ S = "${WORKDIR}/codec_engine_2_10_01" +PARALLEL_MAKE = "" do_compile() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem -- cgit v1.2.3 From 1af32f8a798caba849145cba080006ff7d2e6376 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Fri, 11 Jul 2008 09:11:57 +0000 Subject: add ezx-gen-blob from wyrm --- packages/ezx/ezx-gen-blob/.mtn2git_empty | 0 packages/ezx/ezx-gen-blob/gen-blob | Bin 0 -> 58368 bytes packages/ezx/ezx-gen-blob_20080707.bb | 32 +++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 packages/ezx/ezx-gen-blob/.mtn2git_empty create mode 100644 packages/ezx/ezx-gen-blob/gen-blob create mode 100644 packages/ezx/ezx-gen-blob_20080707.bb diff --git a/packages/ezx/ezx-gen-blob/.mtn2git_empty b/packages/ezx/ezx-gen-blob/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/ezx/ezx-gen-blob/gen-blob b/packages/ezx/ezx-gen-blob/gen-blob new file mode 100644 index 0000000000..1131a211ca Binary files /dev/null and b/packages/ezx/ezx-gen-blob/gen-blob differ diff --git a/packages/ezx/ezx-gen-blob_20080707.bb b/packages/ezx/ezx-gen-blob_20080707.bb new file mode 100644 index 0000000000..50fcd8b105 --- /dev/null +++ b/packages/ezx/ezx-gen-blob_20080707.bb @@ -0,0 +1,32 @@ +DESCRIPTION = "Generic Blob [Bootloader] for the Motorola EZX platform" +SECTION = "bootloaders" +AUTHOR = "Daniel Riberio" +HOMEPAGE = "http://people.openezx.org/wyrm/gen-blob" +PRIORITY = "optional" +LICENSE = "GPL" +PROVIDES = "virtual/bootloader" + +SRC_URI = "file://gen-blob" +S = "${WORKDIR}" + +do_deploy() { + dd if=${WORKDIR}/gen-blob bs=1k seek=2 conv=sync of=${WORKDIR}/gen-blob-a1200 + + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 gen-blob ${DEPLOY_DIR_IMAGE}/gen-blob-for-1stgen.${SRCDATE} + install -m 0644 gen-blob-a1200 ${DEPLOY_DIR_IMAGE}/gen-blob-for-2ndgen.${SRCDATE} +} + +do_install() { + dd if=${WORKDIR}/gen-blob bs=1k seek=2 conv=sync of=${WORKDIR}/gen-blob-a1200 + + install -d ${D}/${datadir}/openezx + install -m 0644 gen-blob ${D}${datadir}/openezx/gen-blob-for-1stgen.${SRCDATE} + install -m 0644 gen-blob-a1200 ${D}${datadir}/openezx/gen-blob-for-2ndgen.${SRCDATE} +} + +addtask deploy before do_build after do_compile + +PACKAGE_ARCH = "${MACHINE_ARCH}" +FILES_${PN} = "${datadir}" + -- cgit v1.2.3 From 02591ec50dcd3d3dcd5d7ebca53e89241b4b0e34 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 09:18:28 +0000 Subject: dsplink, codec-engine: disable stripping for all packages, the kernel modules don't work when modules_strip is used and you can't disable stripping per package, only per recipe :( --- packages/dsplink/codec-engine_2.10.bb | 3 ++- packages/dsplink/dsplink.inc | 1 + packages/dsplink/dsplink_1.51.00.08.bb | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index 49593a23ab..f9e5757220 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -5,7 +5,7 @@ RDEPENDS = "update-modules" inherit module -PR = "r2" +PR = "r3" PV = "2.10" # Get CE tarball from TI website, place in sources and calculate @@ -72,6 +72,7 @@ pkg_postrm_${PN}-module () { PACKAGES =+ "dsplink-cmemk-module" FILES_dsplink-cmemk-module = "${sysconfdir} /lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*ko" +INHIBIT_PACKAGE_STRIP = "1" FILES_${PN} = "${base_sbindir}" diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 5fdbd1de90..4ea750ea98 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -88,6 +88,7 @@ pkg_postrm_${PN}-module () { PACKAGES =+ "${PN}-module" FILES_${PN}-module = "${sysconfdir} /lib/modules" FILES_${PN} = "${bindir}/mpcsxfergpp ${bindir}/ringiogpp" +INHIBIT_PACKAGE_STRIP = "1" PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 41e3721a05..8220e6c395 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r4" +PR = "r5" PE = "1" PV = "1.51" -- cgit v1.2.3 From 8ade10b54bf971c5ec0f74ad28a130ca68f0dc26 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 10:45:12 +0000 Subject: dsplink: attempt to fix kernel architecture flags. before: vermagic: 2.6.26-rc9-omap1 mod_unload modversions ARMv5 after: vermagic: 2.6.26-rc9-omap1 mod_unload modversions ARMv7 Still not loading on omap3, though --- packages/dsplink/dsplink.inc | 11 ++++++++++- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- packages/dsplink/files/davinci_mvlpro5.0.mk | 6 +++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 4ea750ea98..95f2552eb6 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -23,6 +23,13 @@ DSPLINKSOC ?= "DM6446" DSPLINKSOC_beagleboard = "3530" + +USERARMFLAGS = "${TARGET_CC_ARCH}" +KERNELARMFLAGS = "-D__LINUX_ARM_ARCH__=5 -march=armv5t -mtune=arm9tdmi" +KERNELARMFLAGS_armv6 = "-D__LINUX_ARM_ARCH__=6 -march=armv6j -mtune=arm1136jf-s" +KERNELARMFLAGS_armv7a = "-D__LINUX_ARM_ARCH__=7 -march=armv7-a -mtune=cortex-a8" + + export DSPLINKPLATFORM export DSPLINKDSP @@ -43,7 +50,9 @@ do_configure () { sed -i -e s:SED_ME_CROSS:${STAGING_INCDIR}:g \ -e s:SED_ME_STAGINGDIR:${STAGING_DIR_TARGET}:g \ -e s:SED_ME_TARGET_PREFIX:${TARGET_PREFIX}:g \ - -e s:SED_ME_KERNELDIR:${STAGING_KERNEL_DIR}:g \ + -e s:SED_ME_KERNELDIR:${STAGING_KERNEL_DIR}:g \ + -e 's:SEDME_KERNEL_ARMFLAGS:${KERNELARMFLAGS}:g' \ + -e 's:SEDME_USER_ARMFLAGS:${USERARMFLAGS}:g' \ ${S}/make/Linux/davinci_mvlpro5.0.mk } diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 8220e6c395..3be772d801 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r5" +PR = "r6" PE = "1" PV = "1.51" diff --git a/packages/dsplink/files/davinci_mvlpro5.0.mk b/packages/dsplink/files/davinci_mvlpro5.0.mk index 2379bc359e..00bae888e6 100644 --- a/packages/dsplink/files/davinci_mvlpro5.0.mk +++ b/packages/dsplink/files/davinci_mvlpro5.0.mk @@ -102,10 +102,10 @@ CC_SW_DEB := -g STD_KRNL_FLAGS := -include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall -Wstrict-prototypes\ -Wno-trigraphs -fno-strict-aliasing -fno-common \ -fno-omit-frame-pointer -mapcs -mno-sched-prolog \ - -mlittle-endian -D__LINUX_ARM_ARCH__=5 -march=armv5t \ - -mtune=arm9tdmi -msoft-float -Uarm -mapcs \ + -mlittle-endian SEDME_KERNEL_ARMFLAGS \ + -msoft-float -Uarm -mapcs \ -Wdeclaration-after-statement -Os -marm -mabi=aapcs-linux -STD_USER_FLAGS := -mlittle-endian -march=armv5t -mtune=arm9tdmi -msoft-float \ +STD_USER_FLAGS := -mlittle-endian SEDME_USER_ARMFLAGS -msoft-float \ -Uarm -Wdeclaration-after-statement -marm -Wall \ -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing \ -fno-common -fno-omit-frame-pointer -mapcs -c \ -- cgit v1.2.3 From 65e8f9519dff8f44ff2a6604d5c97ea892994e2b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 11:30:42 +0000 Subject: dsplink: create an 'openembedded' distro for dsplink, update kernel flags --- packages/dsplink/dsplink.inc | 34 +++-- packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- packages/dsplink/files/davinci_mvlpro5.0.mk | 201 ---------------------------- packages/dsplink/files/openembedded.mk | 196 +++++++++++++++++++++++++++ 5 files changed, 224 insertions(+), 211 deletions(-) delete mode 100644 packages/dsplink/files/davinci_mvlpro5.0.mk create mode 100644 packages/dsplink/files/openembedded.mk diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 95f2552eb6..f528271c2f 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -25,23 +25,41 @@ DSPLINKSOC_beagleboard = "3530" USERARMFLAGS = "${TARGET_CC_ARCH}" -KERNELARMFLAGS = "-D__LINUX_ARM_ARCH__=5 -march=armv5t -mtune=arm9tdmi" -KERNELARMFLAGS_armv6 = "-D__LINUX_ARM_ARCH__=6 -march=armv6j -mtune=arm1136jf-s" -KERNELARMFLAGS_armv7a = "-D__LINUX_ARM_ARCH__=7 -march=armv7-a -mtune=cortex-a8" - +KERNELARMFLAGS = "-include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall -Wstrict-prototypes \ + -Wno-trigraphs -fno-strict-aliasing -fno-common \ + -fno-omit-frame-pointer -mapcs -mno-sched-prolog \ + -mlittle-endian \ + -D__LINUX_ARM_ARCH__=5 -march=armv5t -mtune=arm9tdmi \ + -msoft-float -Uarm -mapcs \ + -Wdeclaration-after-statement -Os -marm -mabi=aapcs-linux" +KERNELARMFLAGS_armv6 = "-include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall -Wstrict-prototypes \ + -Wno-trigraphs -fno-strict-aliasing -fno-common \ + -fno-omit-frame-pointer -mapcs -mno-sched-prolog \ + -mlittle-endian \ + -D__LINUX_ARM_ARCH__=6 -march=armv6j -mtune=arm1136jf-s \ + -msoft-float -Uarm -mapcs \ + -Wdeclaration-after-statement -Os -marm -mabi=aapcs-linux" +KERNELARMFLAGS_armv7a = "-c -nostdinc -include $(BASE_OSINC)/linux/autoconf.h -isystem $(OSINC_PLATFORM) -iwithprefix include -Iinclude -Wall -Wstrict-prototypes \ + -Wno-trigraphs -fno-strict-aliasing -fno-common \ + -fno-omit-frame-pointer -mapcs -mno-sched-prolog \ + -mlittle-endian \ + -D__LINUX_ARM_ARCH__=7 -march=armv7-a -mtune=cortex-a8 \ + -msoft-float -Uarm -mapcs \ + -Wdeclaration-after-statement -Os -marm -mabi=aapcs-linux \ + -D__KERNEL__ -mno-thumb-interwork -msoft-float -fno-optimize-sibling-calls -g -fno-stack-protector -Wno-pointer-sign -g -DUSE_UDEV=1 -DOS_LINUX -DLINUX_KERNEL" export DSPLINKPLATFORM export DSPLINKDSP do_configure () { cp ${WORKDIR}/CURRENTCFG.MK ${S}/config - cp ${WORKDIR}/davinci_mvlpro5.0.mk ${S}/make/Linux + cp ${WORKDIR}/openembedded.mk ${S}/make/Linux cp ${WORKDIR}/c64xx_5.xx_linux.mk ${S}/make/DspBios sed -i -e s:SED_ME_SOURCEDIR:${S}:g \ - -e s:SED_ME_GPPDISTRO:davinci_mvlpro5\.0:g \ + -e s:SED_ME_GPPDISTRO:openembedded:g \ -e s:SED_ME_KERNELVERSION:${KERNEL_VERSION}:g \ - -e s:SED_ME_DSPDISTRO:davinci_mvlpro5\.0:g \ + -e s:SED_ME_DSPDISTRO:openembedded:g \ -e s:SED_ME_PLATFORM:${DSPLINKPLATFORM}:g \ -e s:SED_ME_DSP:${DSPLINKDSP}:g \ -e s:SED_ME_SOC:${DSPLINKSOC}:g \ @@ -53,7 +71,7 @@ do_configure () { -e s:SED_ME_KERNELDIR:${STAGING_KERNEL_DIR}:g \ -e 's:SEDME_KERNEL_ARMFLAGS:${KERNELARMFLAGS}:g' \ -e 's:SEDME_USER_ARMFLAGS:${USERARMFLAGS}:g' \ - ${S}/make/Linux/davinci_mvlpro5.0.mk + ${S}/make/Linux/openembedded.mk } diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index f222fd2861..9ded5ef43d 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -11,7 +11,7 @@ PV = "1.50" SRC_URI = "http://install.tarball.in.source.dir/dsplink_1_50.tar.gz \ file://CURRENTCFG.MK \ file://c64xx_5.xx_linux.mk \ - file://davinci_mvlpro5.0.mk \ + file://openmebdded.mk \ file://prcs-fix-include.patch;patch=1;pnum=2 \ " diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 3be772d801..928f03204f 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -11,7 +11,7 @@ PV = "1.51" SRC_URI = "http://install.tarball.in.source.dir/dsplink_1_51_00_08.tar.gz \ file://CURRENTCFG.MK \ file://c64xx_5.xx_linux.mk \ - file://davinci_mvlpro5.0.mk \ + file://openembedded.mk \ file://prcs-fix-include.patch;patch=1;pnum=2 \ " diff --git a/packages/dsplink/files/davinci_mvlpro5.0.mk b/packages/dsplink/files/davinci_mvlpro5.0.mk deleted file mode 100644 index 00bae888e6..0000000000 --- a/packages/dsplink/files/davinci_mvlpro5.0.mk +++ /dev/null @@ -1,201 +0,0 @@ -# ============================================================================ -# @file davinci_mvlpro5.0.mk -# -# @path $(DSPLINK)/make/Linux/ -# -# @desc This makefile defines OS specific macros used by MAKE system for -# the Montavista Pro 5.0 Linux distribution. -# -# @ver 1.50 -# ============================================================================ -# Copyright (c) Texas Instruments Incorporated 2002-2007 -# -# Use of this software is controlled by the terms and conditions found in the -# license agreement under which this software has been supplied or provided. -# ============================================================================ - - -ifndef DAVINCI_MVLPRO5_0_MK - -define DAVINCI_MVLPRO5_0_MK -endef - - -# ============================================================================ -# Let the make system know that a specific distribution for the GPP OS -# is being used. -# ============================================================================ -USE_DISTRIBUTION := 1 - - -# ============================================================================ -# Set the values of necessary variables to be used for the OS. -# ============================================================================ - -# ---------------------------------------------------------------------------- -# Base directory for the GPP OS -# ---------------------------------------------------------------------------- -BASE_BUILDOS := SED_ME_KERNELDIR - -# ---------------------------------------------------------------------------- -# Base for code generation tools - compiler, linker, archiver etc. -# ---------------------------------------------------------------------------- -BASE_CGTOOLS := /opt/montavista/pro/devkit/arm/v5t_le/bin - -# ---------------------------------------------------------------------------- -# Base directory for include files provided by GPP OS -# ---------------------------------------------------------------------------- -BASE_OSINC := $(BASE_BUILDOS)/include - -OSINC_GENERIC := $(BASE_OSINC) -OSINC_PLATFORM := SED_ME_CROSS/4.2.0/include -OSINC_TARGET := SED_ME_STAGINGDIR/usr/include - -ifneq ("$(VARIANT)", "") -OSINC_VARIANT := $(BASE_OSINC) -endif - - -# ---------------------------------------------------------------------------- -# Base directory for libraries provided by GPP OS -# ---------------------------------------------------------------------------- -BASE_OSLIB := SED_ME_STAGINGDIR/lib - -OSLIB_GENERIC := $(BASE_OSLIB) -OSLIB_PLATFORM := $(BASE_OSLIB) - - -ifneq ("$(VARIANT)", "") -OSLIB_VARIANT := $(BASE_OSLIB) -endif - - -# ============================================================================ -# COMPILER -# ============================================================================ - -# ---------------------------------------------------------------------------- -# Name of the compiler -# ---------------------------------------------------------------------------- -COMPILER := SED_ME_TARGET_PREFIXgcc -LD := SED_ME_TARGET_PREFIXld - -CROSS_COMPILE := SED_ME_TARGET_PREFIX -export CROSS_COMPILE - -# ---------------------------------------------------------------------------- -# Command line switches used by the compiler -# -# CC_SW_DEF Command line defines -# CC_SW_INC Search path for header files -# CC_SW_OBJ Create object file -# CC_SW_DEB Include debug information -# ---------------------------------------------------------------------------- -CC_SW_DEF := -D -CC_SW_INC := -I -CC_SW_OBJ := -o -CC_SW_DEB := -g - -# ---------------------------------------------------------------------------- -# Standard flags for the compiler -# ---------------------------------------------------------------------------- -STD_KRNL_FLAGS := -include linux/autoconf.h -c -iwithprefix include -Iinclude -Wall -Wstrict-prototypes\ - -Wno-trigraphs -fno-strict-aliasing -fno-common \ - -fno-omit-frame-pointer -mapcs -mno-sched-prolog \ - -mlittle-endian SEDME_KERNEL_ARMFLAGS \ - -msoft-float -Uarm -mapcs \ - -Wdeclaration-after-statement -Os -marm -mabi=aapcs-linux -STD_USER_FLAGS := -mlittle-endian SEDME_USER_ARMFLAGS -msoft-float \ - -Uarm -Wdeclaration-after-statement -marm -Wall \ - -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing \ - -fno-common -fno-omit-frame-pointer -mapcs -c \ - -mabi=aapcs-linux - -# ---------------------------------------------------------------------------- -# Standard flags for the compiler when building an executable -# ---------------------------------------------------------------------------- -EXE_CC_FLAGS := - -# ---------------------------------------------------------------------------- -# Flags for the compiler when building a driver -# ---------------------------------------------------------------------------- -DRV_CC_FLAGS := -nostdinc - -# ---------------------------------------------------------------------------- -# Flags for the compiler when building a library -# ---------------------------------------------------------------------------- -LIB_CC_FLAGS := - -# ---------------------------------------------------------------------------- -# Standard definitions for the compiler -# ---------------------------------------------------------------------------- -STD_CC_DEFNS := -D_REENTRANT - - -# ============================================================================ -# ARCHIVER1 - This denotes the linker. -# ============================================================================ -ARCHIVER1 := SED_ME_TARGET_PREFIXld - -# ---------------------------------------------------------------------------- -# Standard flags for the archiver -# ---------------------------------------------------------------------------- -STD_AR_FLAGS1 := -EL -r - - -# ============================================================================ -# ARCHIVER2 - This denotes the archiver. -# ============================================================================ -ARCHIVER2 := SED_ME_TARGET_PREFIXar - -# ---------------------------------------------------------------------------- -# Standard flags for the archiver -# ---------------------------------------------------------------------------- -STD_AR_FLAGS2 := -r - - -# ============================================================================ -# LINKER - The compiler is used for linking purpose as well. -# ============================================================================ -LINKER := SED_ME_TARGET_PREFIXgcc - -# ---------------------------------------------------------------------------- -# Command line switches used by the linker -# -# LD_SW_LIB Search path for libraries -# LD_SW_OUT Output filename -# LD_SW_RELOC Generate relocateable output -# ---------------------------------------------------------------------------- -LD_SW_LIB := -L -LD_SW_OUT := -o -LD_SW_RELOC := -r - -# ---------------------------------------------------------------------------- -# Standard flags for the linker -# ---------------------------------------------------------------------------- -STD_LD_FLAGS := - -# ---------------------------------------------------------------------------- -# Specific flags for the linker if linking and module generating utility are -# different -# ---------------------------------------------------------------------------- -SPECIFIC_LD_FLAGS := -lpthread - -# ---------------------------------------------------------------------------- -# Flags for the linker when building an executable -# ---------------------------------------------------------------------------- -EXE_LD_FLAGS := -lc - -# ---------------------------------------------------------------------------- -# Flags for the linker when building a driver -# ---------------------------------------------------------------------------- -DRV_LD_FLAGS := - - -# ============================================================================ -# Post processing utilities for Linux 2.6 -# ============================================================================ -CMD_MODPOST := $(BASE_BUILDOS)/scripts/mod/modpost -i $(BASE_BUILDOS)/Module.symvers $(BASE_BUILDOS)/vmlinux - - -endif # ifndef DAVINCI_MVLPRO5_0_MK diff --git a/packages/dsplink/files/openembedded.mk b/packages/dsplink/files/openembedded.mk new file mode 100644 index 0000000000..aaf241ad14 --- /dev/null +++ b/packages/dsplink/files/openembedded.mk @@ -0,0 +1,196 @@ +# ============================================================================ +# @file davinci_mvlpro5.0.mk +# +# @path $(DSPLINK)/make/Linux/ +# +# @desc This makefile defines OS specific macros used by MAKE system for +# the Montavista Pro 5.0 Linux distribution. +# +# @ver 1.50 +# ============================================================================ +# Copyright (c) Texas Instruments Incorporated 2002-2007 +# +# Use of this software is controlled by the terms and conditions found in the +# license agreement under which this software has been supplied or provided. +# ============================================================================ + + +ifndef DAVINCI_MVLPRO5_0_MK + +define DAVINCI_MVLPRO5_0_MK +endef + + +# ============================================================================ +# Let the make system know that a specific distribution for the GPP OS +# is being used. +# ============================================================================ +USE_DISTRIBUTION := 1 + + +# ============================================================================ +# Set the values of necessary variables to be used for the OS. +# ============================================================================ + +# ---------------------------------------------------------------------------- +# Base directory for the GPP OS +# ---------------------------------------------------------------------------- +BASE_BUILDOS := SED_ME_KERNELDIR + +# ---------------------------------------------------------------------------- +# Base for code generation tools - compiler, linker, archiver etc. +# ---------------------------------------------------------------------------- +BASE_CGTOOLS := /opt/montavista/pro/devkit/arm/v5t_le/bin + +# ---------------------------------------------------------------------------- +# Base directory for include files provided by GPP OS +# ---------------------------------------------------------------------------- +BASE_OSINC := $(BASE_BUILDOS)/include + +OSINC_GENERIC := $(BASE_OSINC) +OSINC_PLATFORM := SED_ME_CROSS/4.2.0/include +OSINC_TARGET := SED_ME_STAGINGDIR/usr/include + +ifneq ("$(VARIANT)", "") +OSINC_VARIANT := $(BASE_OSINC) +endif + + +# ---------------------------------------------------------------------------- +# Base directory for libraries provided by GPP OS +# ---------------------------------------------------------------------------- +BASE_OSLIB := SED_ME_STAGINGDIR/lib + +OSLIB_GENERIC := $(BASE_OSLIB) +OSLIB_PLATFORM := $(BASE_OSLIB) + + +ifneq ("$(VARIANT)", "") +OSLIB_VARIANT := $(BASE_OSLIB) +endif + + +# ============================================================================ +# COMPILER +# ============================================================================ + +# ---------------------------------------------------------------------------- +# Name of the compiler +# ---------------------------------------------------------------------------- +COMPILER := SED_ME_TARGET_PREFIXgcc +LD := SED_ME_TARGET_PREFIXld + +CROSS_COMPILE := SED_ME_TARGET_PREFIX +export CROSS_COMPILE + +# ---------------------------------------------------------------------------- +# Command line switches used by the compiler +# +# CC_SW_DEF Command line defines +# CC_SW_INC Search path for header files +# CC_SW_OBJ Create object file +# CC_SW_DEB Include debug information +# ---------------------------------------------------------------------------- +CC_SW_DEF := -D +CC_SW_INC := -I +CC_SW_OBJ := -o +CC_SW_DEB := -g + +# ---------------------------------------------------------------------------- +# Standard flags for the compiler +# ---------------------------------------------------------------------------- +STD_KRNL_FLAGS := SEDME_KERNEL_ARMFLAGS +STD_USER_FLAGS := -mlittle-endian SEDME_USER_ARMFLAGS -msoft-float \ + -Uarm -Wdeclaration-after-statement -marm -Wall \ + -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing \ + -fno-common -fno-omit-frame-pointer -mapcs -c \ + -mabi=aapcs-linux + +# ---------------------------------------------------------------------------- +# Standard flags for the compiler when building an executable +# ---------------------------------------------------------------------------- +EXE_CC_FLAGS := + +# ---------------------------------------------------------------------------- +# Flags for the compiler when building a driver +# ---------------------------------------------------------------------------- +DRV_CC_FLAGS := -nostdinc + +# ---------------------------------------------------------------------------- +# Flags for the compiler when building a library +# ---------------------------------------------------------------------------- +LIB_CC_FLAGS := + +# ---------------------------------------------------------------------------- +# Standard definitions for the compiler +# ---------------------------------------------------------------------------- +STD_CC_DEFNS := -D_REENTRANT + + +# ============================================================================ +# ARCHIVER1 - This denotes the linker. +# ============================================================================ +ARCHIVER1 := SED_ME_TARGET_PREFIXld + +# ---------------------------------------------------------------------------- +# Standard flags for the archiver +# ---------------------------------------------------------------------------- +STD_AR_FLAGS1 := -EL -r + + +# ============================================================================ +# ARCHIVER2 - This denotes the archiver. +# ============================================================================ +ARCHIVER2 := SED_ME_TARGET_PREFIXar + +# ---------------------------------------------------------------------------- +# Standard flags for the archiver +# ---------------------------------------------------------------------------- +STD_AR_FLAGS2 := -r + + +# ============================================================================ +# LINKER - The compiler is used for linking purpose as well. +# ============================================================================ +LINKER := SED_ME_TARGET_PREFIXgcc + +# ---------------------------------------------------------------------------- +# Command line switches used by the linker +# +# LD_SW_LIB Search path for libraries +# LD_SW_OUT Output filename +# LD_SW_RELOC Generate relocateable output +# ---------------------------------------------------------------------------- +LD_SW_LIB := -L +LD_SW_OUT := -o +LD_SW_RELOC := -r + +# ---------------------------------------------------------------------------- +# Standard flags for the linker +# ---------------------------------------------------------------------------- +STD_LD_FLAGS := + +# ---------------------------------------------------------------------------- +# Specific flags for the linker if linking and module generating utility are +# different +# ---------------------------------------------------------------------------- +SPECIFIC_LD_FLAGS := -lpthread + +# ---------------------------------------------------------------------------- +# Flags for the linker when building an executable +# ---------------------------------------------------------------------------- +EXE_LD_FLAGS := -lc + +# ---------------------------------------------------------------------------- +# Flags for the linker when building a driver +# ---------------------------------------------------------------------------- +DRV_LD_FLAGS := + + +# ============================================================================ +# Post processing utilities for Linux 2.6 +# ============================================================================ +CMD_MODPOST := $(BASE_BUILDOS)/scripts/mod/modpost -i $(BASE_BUILDOS)/Module.symvers $(BASE_BUILDOS)/vmlinux + + +endif # ifndef DAVINCI_MVLPRO5_0_MK -- cgit v1.2.3 From 42145b3bf92b73216275e3c471af4d3462267b76 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 11:38:19 +0000 Subject: dsplink 1.50: fix typo --- packages/dsplink/dsplink_1.50.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index 9ded5ef43d..5aaeaad0f7 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -11,7 +11,7 @@ PV = "1.50" SRC_URI = "http://install.tarball.in.source.dir/dsplink_1_50.tar.gz \ file://CURRENTCFG.MK \ file://c64xx_5.xx_linux.mk \ - file://openmebdded.mk \ + file://openembedded.mk \ file://prcs-fix-include.patch;patch=1;pnum=2 \ " -- cgit v1.2.3 From 332e03a0d9f17b0062bb582f0e676233127ed0c5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 12:37:31 +0000 Subject: dsplink: use some more sed magic to get the kernel part to use the kernel gcc and the userspace part the userspace gcc --- packages/dsplink/dsplink.inc | 7 +++++-- packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index f528271c2f..94489ee6ca 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -86,8 +86,11 @@ do_compile () { ln -sf ${S}/gpp/src/pmgr/pmgr_proc.h ${S}/gpp/inc/pmgr_proc.h unset DISPLAY - - oe_runmake -C ${S}/gpp/src all targets + + sed -i -e 's:gcc:gcc${KERNEL_CCSUFFIX}:' ${S}/make/Linux/openembedded.mk + oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" -C ${S}/gpp/src all targets + + sed -i -e 's:gcc${KERNEL_CCSUFFIX}:gcc:' ${S}/make/Linux/openembedded.mk oe_runmake -C ${S}/gpp/src/samples } diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index 5aaeaad0f7..561d26fd6b 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r6" +PR = "r7" PE = "1" PV = "1.50" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 928f03204f..7fa2c34558 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r6" +PR = "r7" PE = "1" PV = "1.51" -- cgit v1.2.3 From d10eb8cbbaadad790a7d06069dfb3de146f68c68 Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Fri, 11 Jul 2008 13:42:27 +0000 Subject: u-boot git: bump SRCREV for beagleboard --- packages/u-boot/u-boot_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index 32634dfa00..e900ab41db 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,8 +1,8 @@ require u-boot.inc -PR="r7" +PR="r9" SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" -SRCREV_beagleboard = "a94f22f08f280905926219e568568964cb9eeb9d" +SRCREV_beagleboard = "9b55a2536919f4de1bb1044e6eb8262c2f53bc96" SRCREV_neuros-osd2 = "482dfe48845192c7f810bccfc93db93d0f1654f7" SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git " -- cgit v1.2.3 From 2ccb3936814942b2de6a495fe1c0eb46fc510213 Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Fri, 11 Jul 2008 13:54:47 +0000 Subject: linux omap2 git: update alsa SoC patch for beagleboard and omap3evm --- .../linux/linux-omap2-git/beagleboard/soc.patch | 233 ++++++++++----------- packages/linux/linux-omap2-git/omap3evm/soc.patch | 233 ++++++++++----------- packages/linux/linux-omap2_git.bb | 2 +- 3 files changed, 215 insertions(+), 253 deletions(-) diff --git a/packages/linux/linux-omap2-git/beagleboard/soc.patch b/packages/linux/linux-omap2-git/beagleboard/soc.patch index bb97403f29..f4cce21ca7 100644 --- a/packages/linux/linux-omap2-git/beagleboard/soc.patch +++ b/packages/linux/linux-omap2-git/beagleboard/soc.patch @@ -29,10 +29,10 @@ index 4e1314c..d2c0b12 100644 +obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c new file mode 100644 -index 0000000..c9eee19 +index 0000000..eb8370c --- /dev/null +++ b/sound/soc/codecs/twl4030.c -@@ -0,0 +1,595 @@ +@@ -0,0 +1,625 @@ +/* + * ALSA SoC TWL4030 codec driver + * @@ -196,7 +196,7 @@ index 0000000..c9eee19 + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, + twl4030_reg[REG_CODEC_MODE] & 0xfd, REG_CODEC_MODE); + -+ udelay(10); /* 10 ms delay for power settling */ ++ udelay(10); /* delay for power settling */ + + for (i = REG_OPTION; i <= REG_MISC_SET_2; i++) { + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, twl4030_reg[i], i); @@ -205,7 +205,7 @@ index 0000000..c9eee19 + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, + twl4030_reg[REG_CODEC_MODE], REG_CODEC_MODE); + -+ udelay(10); /* 10 ms delay for power settling */ ++ udelay(10); /* delay for power settling */ + + /* initiate offset cancellation */ + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, @@ -219,7 +219,6 @@ index 0000000..c9eee19 + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, + twl4030_reg[REG_MISC_SET_1] | 0x02, REG_MISC_SET_1); + -+ twl4030_dump_registers(); +} + +static const struct snd_kcontrol_new twl4030_snd_controls[] = { @@ -247,8 +246,6 @@ index 0000000..c9eee19 + return 0; +} + -+#define TWL4030_PWR 0 -+ +static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { + SND_SOC_DAPM_INPUT("INL"), + SND_SOC_DAPM_INPUT("INR"), @@ -314,32 +311,40 @@ index 0000000..c9eee19 + +static void twl4030_power_up (struct snd_soc_codec *codec, u8 mode) +{ ++ u8 popn, hsgain; ++ + twl4030_write(codec, REG_CODEC_MODE, mode & ~CODECPDZ); + twl4030_write(codec, REG_CODEC_MODE, mode | CODECPDZ); + udelay(10); + -+ u8 popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) | (0x40); ++ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET); ++ popn &= RAMP_DELAY; ++ popn |= VMID_EN | RAMP_DELAY_161MS; + twl4030_write(codec, REG_HS_POPN_SET, popn); + -+ u8 hsgain = twl4030_read_reg_cache(codec, REG_HS_GAIN_SET) | (0x0a); ++ hsgain = HSR_GAIN_0DB| HSL_GAIN_0DB; + twl4030_write(codec, REG_HS_GAIN_SET, hsgain); + -+ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) | (0x02); ++ popn |= RAMP_EN; + twl4030_write(codec, REG_HS_POPN_SET, popn); +} + +static void twl4030_power_down (struct snd_soc_codec *codec) +{ -+ u8 popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) & ~(0x02); ++ u8 popn, hsgain, mode; ++ ++ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET); ++ popn &= ~RAMP_EN; + twl4030_write(codec, REG_HS_POPN_SET, popn); + -+ u8 hsgain = twl4030_read_reg_cache(codec, REG_HS_GAIN_SET) & ~(0x0f); ++ hsgain = HSR_GAIN_PWR_DOWN | HSL_GAIN_PWR_DOWN; + twl4030_write(codec, REG_HS_GAIN_SET, hsgain); + -+ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) & ~(0x40); ++ popn &= ~VMID_EN; + twl4030_write(codec, REG_HS_POPN_SET, popn); + -+ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; ++ mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ mode &= ~CODECPDZ; + twl4030_write(codec, REG_CODEC_MODE, mode); + udelay(10); +} @@ -352,19 +357,18 @@ index 0000000..c9eee19 + struct snd_soc_device *socdev = rtd->socdev; + struct snd_soc_codec *codec = socdev->codec; + struct twl4030_priv *twl4030 = codec->private_data; ++ u8 mode, old_mode, format, old_format; + -+ twl4030_power_down(codec); -+ -+ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; + ++ /* bit rate */ ++ old_mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; ++ mode = old_mode; + mode &= ~APLL_RATE; + switch (params_rate(params)) { + case 44100: -+ printk(KERN_INFO "TWL4030 hw params: set rate to 44.1khz\n"); + mode |= APLL_RATE_44100; + break; + case 48000: -+ printk(KERN_INFO "TWL4030 hw params: set rate to 48khz\n"); + mode |= APLL_RATE_48000; + break; + default: @@ -372,22 +376,43 @@ index 0000000..c9eee19 + return -EINVAL; + } + -+ /* bit size */ ++ if (mode != old_mode) { ++ /* change rate and turn codec back on */ ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ mode |= CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ } ++ ++ /* sample size */ ++ old_format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ format = old_format; ++ format &= ~DATA_WIDTH; + switch (params_format(params)) { + case SNDRV_PCM_FORMAT_S16_LE: -+ printk(KERN_INFO "TWL4030 hw params: set format to S16_LE\n"); ++ format |= DATA_WIDTH_16S_16W; + break; + case SNDRV_PCM_FORMAT_S24_LE: -+ printk(KERN_INFO "TWL4030 hw params: set format to S24_LE\n"); ++ format |= DATA_WIDTH_32S_24W; + break; + default: + printk(KERN_INFO "TWL4030 hw params: unknown format %d\n", params_format(params)); + return -EINVAL; + } + -+ /* change rate and turn codec back on */ -+ twl4030_power_up(codec, mode); ++ if (format != old_format) { ++ ++ /* turn off codec before changing format */ ++ mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ mode &= ~CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); + ++ /* change format */ ++ twl4030_write(codec, REG_AUDIO_IF, format); ++ ++ /* turn on codec */ ++ mode |= CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ } + return 0; +} + @@ -399,14 +424,14 @@ index 0000000..c9eee19 + u8 rdac_reg = twl4030_read_reg_cache(codec, REG_ARXR2PGA); + + if (mute) { -+ printk(KERN_INFO "TWL4030 Audio Codec mute\n"); ++ /* printk(KERN_INFO "TWL4030 Audio Codec mute\n"); */ + twl4030_write(codec, REG_ARXL2PGA, 0x00); + twl4030_write(codec, REG_ARXR2PGA, 0x00); + twl4030_write_reg_cache(codec, REG_ARXL2PGA, ldac_reg); + twl4030_write_reg_cache(codec, REG_ARXR2PGA, rdac_reg); + } + else { -+ printk(KERN_INFO "TWL4030 Audio Codec unmute: %02x/%02x\n", ldac_reg, rdac_reg); ++ /* printk(KERN_INFO "TWL4030 Audio Codec unmute: %02x/%02x\n", ldac_reg, rdac_reg); */ + twl4030_write(codec, REG_ARXL2PGA, ldac_reg); + twl4030_write(codec, REG_ARXR2PGA, rdac_reg); + } @@ -419,19 +444,21 @@ index 0000000..c9eee19 +{ + struct snd_soc_codec *codec = codec_dai->codec; + struct twl4030_priv *twl4030 = codec->private_data; ++ u8 mode, old_format, format; + -+ /* get current format */ -+ u8 format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ /* get format */ ++ old_format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ format = old_format; + + /* set master/slave audio interface */ + switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { + case SND_SOC_DAIFMT_CBM_CFM: -+ printk(KERN_INFO "TWL4030 set dai fmt: master\n"); ++ /* printk(KERN_INFO "TWL4030 set dai fmt: master\n"); */ + format &= ~(AIF_SLAVE_EN); + format |= CLK256FS_EN; + break; + case SND_SOC_DAIFMT_CBS_CFS: -+ printk(KERN_INFO "TWL4030 set dai fmt: slave\n"); ++ /* printk(KERN_INFO "TWL4030 set dai fmt: slave\n"); */ + format &= ~(CLK256FS_EN); + format |= AIF_SLAVE_EN; + break; @@ -443,21 +470,26 @@ index 0000000..c9eee19 + format &= ~AIF_FORMAT; + switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { + case SND_SOC_DAIFMT_I2S: -+ printk(KERN_INFO "TWL4030 set dai fmt: i2s\n"); ++ /* printk(KERN_INFO "TWL4030 set dai fmt: i2s\n"); */ + format |= AIF_FORMAT_CODEC; + break; + default: + return -EINVAL; + } + -+ /* turn off codec before changing format */ -+ twl4030_power_down(codec); ++ if (format != old_format) { + -+ /* change format */ -+ twl4030_write(codec, REG_AUDIO_IF, format); ++ /* turn off codec before changing format */ ++ mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ mode &= ~CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); + -+ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); -+ twl4030_power_up(codec, mode); ++ /* change format */ ++ twl4030_write(codec, REG_AUDIO_IF, format); ++ ++ mode |= CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ } + + return 0; +} @@ -530,8 +562,6 @@ index 0000000..c9eee19 + + printk(KERN_INFO "TWL4030 Audio Codec init \n"); + -+ twl4030_init_chip(); -+ + codec->name = "twl4030"; + codec->owner = THIS_MODULE; + codec->read = twl4030_read_reg_cache; @@ -560,6 +590,9 @@ index 0000000..c9eee19 + goto card_err; + } + ++ twl4030_init_chip(); ++ twl4030_power_up(codec, APLL_RATE_44100 | OPT_MODE); ++ + return ret; + +card_err: @@ -580,8 +613,6 @@ index 0000000..c9eee19 + struct snd_soc_codec *codec; + struct twl4030_priv *twl4030; + -+ printk(KERN_INFO "TWL4030 Audio Codec probe\n"); -+ + codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); + if (codec == NULL) + return -ENOMEM; @@ -601,7 +632,6 @@ index 0000000..c9eee19 + twl4030_socdev = socdev; + twl4030_init(socdev); + -+ printk(KERN_INFO "TWL4030 Audio Codec probe exit\n"); + return 0; +} + @@ -630,10 +660,10 @@ index 0000000..c9eee19 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/twl4030.h b/sound/soc/codecs/twl4030.h new file mode 100644 -index 0000000..af8eb43 +index 0000000..e126f96 --- /dev/null +++ b/sound/soc/codecs/twl4030.h -@@ -0,0 +1,125 @@ +@@ -0,0 +1,152 @@ +/* + * ALSA SoC TWL4030 codec driver + * @@ -722,7 +752,7 @@ index 0000000..af8eb43 + +/* Bitfield Definitions */ + -+/* CODEC_MODE Fields */ ++/* CODEC_MODE (0x01) Fields */ + +#define APLL_RATE 0xF0 +#define APLL_RATE_8000 0x00 @@ -738,7 +768,7 @@ index 0000000..af8eb43 +#define CODECPDZ 0x02 +#define OPT_MODE 0x01 + -+/* AUDIO_IF Fields */ ++/* AUDIO_IF (0x0E) Fields */ + +#define AIF_SLAVE_EN 0x80 +#define DATA_WIDTH 0x60 @@ -754,6 +784,33 @@ index 0000000..af8eb43 +#define CLK256FS_EN 0x02 +#define AIF_EN 0x01 + ++/* HS_GAIN_SET (0x23) Fields */ ++ ++#define HSR_GAIN 0x0c ++#define HSR_GAIN_PWR_DOWN 0x00 ++#define HSR_GAIN_PLUS_6DB 0x04 ++#define HSR_GAIN_0DB 0x08 ++#define HSR_GAIN_MINUS_6DB 0x0c ++#define HSL_GAIN 0x0c ++#define HSL_GAIN_PWR_DOWN 0x00 ++#define HSL_GAIN_PLUS_6DB 0x01 ++#define HSL_GAIN_0DB 0x02 ++#define HSL_GAIN_MINUS_6DB 0x03 ++ ++/* HS_POPN_SET (0x24) Fields */ ++ ++#define VMID_EN 0x40 ++#define EXTMUTE 0x20 ++#define RAMP_DELAY 0x1C ++#define RAMP_DELAY_20MS 0x00 ++#define RAMP_DELAY_40MS 0x04 ++#define RAMP_DELAY_81MS 0x08 ++#define RAMP_DELAY_161MS 0x0c ++#define RAMP_DELAY_323MS 0x10 ++#define RAMP_DELAY_645MS 0x14 ++#define RAMP_DELAY_1291MS 0x18 ++#define RAMP_DELAY_2581MS 0x1c ++#define RAMP_EN 0x02 + +extern struct snd_soc_codec_dai twl4030_dai; +extern struct snd_soc_codec_device soc_codec_dev_twl4030; @@ -801,10 +858,10 @@ index d8d8d58..638a240 100644 + diff --git a/sound/soc/omap/omap3beagle.c b/sound/soc/omap/omap3beagle.c new file mode 100644 -index 0000000..fb79938 +index 0000000..878f894 --- /dev/null +++ b/sound/soc/omap/omap3beagle.c -@@ -0,0 +1,180 @@ +@@ -0,0 +1,142 @@ +/* + * omap3beagle.c -- SoC audio for OMAP3 Beagle + * @@ -877,50 +934,12 @@ index 0000000..fb79938 + .hw_params = omap3beagle_hw_params, +}; + -+static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { -+ SND_SOC_DAPM_HP("Headphone Jack", NULL), -+ SND_SOC_DAPM_LINE("Line In", NULL), -+}; -+ -+static const char *audio_map[][3] = { -+ {"Headphone Jack", NULL, "HPLOUT"}, -+ {"Headphone Jack", NULL, "HPROUT"}, -+ -+ {"Line In", NULL, "Line In"}, -+ {"Line In", NULL, "Line In"}, -+}; -+ -+static int omap3beagle_twl4030_init(struct snd_soc_codec *codec) -+{ -+ int i; -+ -+ printk(KERN_INFO "OMAP3 Beagle TWL4030 SoC init\n"); -+ -+ /* Add omap3beagle specific widgets */ -+ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) -+ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); -+ -+ /* Set up omap3beagle specific audio path audio_map */ -+ for (i = 0; i < ARRAY_SIZE(audio_map); i++) -+ snd_soc_dapm_connect_input(codec, audio_map[i][0], -+ audio_map[i][1], audio_map[i][2]); -+ -+ /* always connected */ -+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1); -+ snd_soc_dapm_set_endpoint(codec, "Line In", 1); -+ -+ snd_soc_dapm_sync_endpoints(codec); -+ -+ return 0; -+} -+ +/* Digital audio interface glue - connects codec <--> CPU */ +static struct snd_soc_dai_link omap3beagle_dai = { + .name = "TWL4030", + .stream_name = "TWL4030", + .cpu_dai = &omap_mcbsp_dai[0], + .codec_dai = &twl4030_dai, -+ .init = omap3beagle_twl4030_init, + .ops = &omap3beagle_ops, +}; + @@ -987,10 +1006,10 @@ index 0000000..fb79938 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c new file mode 100644 -index 0000000..32d4f5d +index 0000000..a64c788 --- /dev/null +++ b/sound/soc/omap/omap3evm.c -@@ -0,0 +1,180 @@ +@@ -0,0 +1,142 @@ +/* + * omap3evm.c -- SoC audio for OMAP3 EVM + * @@ -1063,50 +1082,12 @@ index 0000000..32d4f5d + .hw_params = omap3evm_hw_params, +}; + -+static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { -+ SND_SOC_DAPM_HP("Headphone Jack", NULL), -+ SND_SOC_DAPM_LINE("Line In", NULL), -+}; -+ -+static const char *audio_map[][3] = { -+ {"Headphone Jack", NULL, "HPLOUT"}, -+ {"Headphone Jack", NULL, "HPROUT"}, -+ -+ {"Line In", NULL, "Line In"}, -+ {"Line In", NULL, "Line In"}, -+}; -+ -+static int omap3evm_twl4030_init(struct snd_soc_codec *codec) -+{ -+ int i; -+ -+ printk(KERN_INFO "OMAP3 EVM TWL4030 SoC init\n"); -+ -+ /* Add omap3evm specific widgets */ -+ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) -+ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); -+ -+ /* Set up omap3evm specific audio path audio_map */ -+ for (i = 0; i < ARRAY_SIZE(audio_map); i++) -+ snd_soc_dapm_connect_input(codec, audio_map[i][0], -+ audio_map[i][1], audio_map[i][2]); -+ -+ /* always connected */ -+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1); -+ snd_soc_dapm_set_endpoint(codec, "Line In", 1); -+ -+ snd_soc_dapm_sync_endpoints(codec); -+ -+ return 0; -+} -+ +/* Digital audio interface glue - connects codec <--> CPU */ +static struct snd_soc_dai_link omap3evm_dai = { + .name = "TWL4030", + .stream_name = "TWL4030", + .cpu_dai = &omap_mcbsp_dai[0], + .codec_dai = &twl4030_dai, -+ .init = omap3evm_twl4030_init, + .ops = &omap3evm_ops, +}; + diff --git a/packages/linux/linux-omap2-git/omap3evm/soc.patch b/packages/linux/linux-omap2-git/omap3evm/soc.patch index bb97403f29..f4cce21ca7 100644 --- a/packages/linux/linux-omap2-git/omap3evm/soc.patch +++ b/packages/linux/linux-omap2-git/omap3evm/soc.patch @@ -29,10 +29,10 @@ index 4e1314c..d2c0b12 100644 +obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c new file mode 100644 -index 0000000..c9eee19 +index 0000000..eb8370c --- /dev/null +++ b/sound/soc/codecs/twl4030.c -@@ -0,0 +1,595 @@ +@@ -0,0 +1,625 @@ +/* + * ALSA SoC TWL4030 codec driver + * @@ -196,7 +196,7 @@ index 0000000..c9eee19 + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, + twl4030_reg[REG_CODEC_MODE] & 0xfd, REG_CODEC_MODE); + -+ udelay(10); /* 10 ms delay for power settling */ ++ udelay(10); /* delay for power settling */ + + for (i = REG_OPTION; i <= REG_MISC_SET_2; i++) { + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, twl4030_reg[i], i); @@ -205,7 +205,7 @@ index 0000000..c9eee19 + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, + twl4030_reg[REG_CODEC_MODE], REG_CODEC_MODE); + -+ udelay(10); /* 10 ms delay for power settling */ ++ udelay(10); /* delay for power settling */ + + /* initiate offset cancellation */ + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, @@ -219,7 +219,6 @@ index 0000000..c9eee19 + twl4030_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, + twl4030_reg[REG_MISC_SET_1] | 0x02, REG_MISC_SET_1); + -+ twl4030_dump_registers(); +} + +static const struct snd_kcontrol_new twl4030_snd_controls[] = { @@ -247,8 +246,6 @@ index 0000000..c9eee19 + return 0; +} + -+#define TWL4030_PWR 0 -+ +static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { + SND_SOC_DAPM_INPUT("INL"), + SND_SOC_DAPM_INPUT("INR"), @@ -314,32 +311,40 @@ index 0000000..c9eee19 + +static void twl4030_power_up (struct snd_soc_codec *codec, u8 mode) +{ ++ u8 popn, hsgain; ++ + twl4030_write(codec, REG_CODEC_MODE, mode & ~CODECPDZ); + twl4030_write(codec, REG_CODEC_MODE, mode | CODECPDZ); + udelay(10); + -+ u8 popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) | (0x40); ++ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET); ++ popn &= RAMP_DELAY; ++ popn |= VMID_EN | RAMP_DELAY_161MS; + twl4030_write(codec, REG_HS_POPN_SET, popn); + -+ u8 hsgain = twl4030_read_reg_cache(codec, REG_HS_GAIN_SET) | (0x0a); ++ hsgain = HSR_GAIN_0DB| HSL_GAIN_0DB; + twl4030_write(codec, REG_HS_GAIN_SET, hsgain); + -+ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) | (0x02); ++ popn |= RAMP_EN; + twl4030_write(codec, REG_HS_POPN_SET, popn); +} + +static void twl4030_power_down (struct snd_soc_codec *codec) +{ -+ u8 popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) & ~(0x02); ++ u8 popn, hsgain, mode; ++ ++ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET); ++ popn &= ~RAMP_EN; + twl4030_write(codec, REG_HS_POPN_SET, popn); + -+ u8 hsgain = twl4030_read_reg_cache(codec, REG_HS_GAIN_SET) & ~(0x0f); ++ hsgain = HSR_GAIN_PWR_DOWN | HSL_GAIN_PWR_DOWN; + twl4030_write(codec, REG_HS_GAIN_SET, hsgain); + -+ popn = twl4030_read_reg_cache(codec, REG_HS_POPN_SET) & ~(0x40); ++ popn &= ~VMID_EN; + twl4030_write(codec, REG_HS_POPN_SET, popn); + -+ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; ++ mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ mode &= ~CODECPDZ; + twl4030_write(codec, REG_CODEC_MODE, mode); + udelay(10); +} @@ -352,19 +357,18 @@ index 0000000..c9eee19 + struct snd_soc_device *socdev = rtd->socdev; + struct snd_soc_codec *codec = socdev->codec; + struct twl4030_priv *twl4030 = codec->private_data; ++ u8 mode, old_mode, format, old_format; + -+ twl4030_power_down(codec); -+ -+ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; + ++ /* bit rate */ ++ old_mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE) & ~CODECPDZ; ++ mode = old_mode; + mode &= ~APLL_RATE; + switch (params_rate(params)) { + case 44100: -+ printk(KERN_INFO "TWL4030 hw params: set rate to 44.1khz\n"); + mode |= APLL_RATE_44100; + break; + case 48000: -+ printk(KERN_INFO "TWL4030 hw params: set rate to 48khz\n"); + mode |= APLL_RATE_48000; + break; + default: @@ -372,22 +376,43 @@ index 0000000..c9eee19 + return -EINVAL; + } + -+ /* bit size */ ++ if (mode != old_mode) { ++ /* change rate and turn codec back on */ ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ mode |= CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ } ++ ++ /* sample size */ ++ old_format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ format = old_format; ++ format &= ~DATA_WIDTH; + switch (params_format(params)) { + case SNDRV_PCM_FORMAT_S16_LE: -+ printk(KERN_INFO "TWL4030 hw params: set format to S16_LE\n"); ++ format |= DATA_WIDTH_16S_16W; + break; + case SNDRV_PCM_FORMAT_S24_LE: -+ printk(KERN_INFO "TWL4030 hw params: set format to S24_LE\n"); ++ format |= DATA_WIDTH_32S_24W; + break; + default: + printk(KERN_INFO "TWL4030 hw params: unknown format %d\n", params_format(params)); + return -EINVAL; + } + -+ /* change rate and turn codec back on */ -+ twl4030_power_up(codec, mode); ++ if (format != old_format) { ++ ++ /* turn off codec before changing format */ ++ mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ mode &= ~CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); + ++ /* change format */ ++ twl4030_write(codec, REG_AUDIO_IF, format); ++ ++ /* turn on codec */ ++ mode |= CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ } + return 0; +} + @@ -399,14 +424,14 @@ index 0000000..c9eee19 + u8 rdac_reg = twl4030_read_reg_cache(codec, REG_ARXR2PGA); + + if (mute) { -+ printk(KERN_INFO "TWL4030 Audio Codec mute\n"); ++ /* printk(KERN_INFO "TWL4030 Audio Codec mute\n"); */ + twl4030_write(codec, REG_ARXL2PGA, 0x00); + twl4030_write(codec, REG_ARXR2PGA, 0x00); + twl4030_write_reg_cache(codec, REG_ARXL2PGA, ldac_reg); + twl4030_write_reg_cache(codec, REG_ARXR2PGA, rdac_reg); + } + else { -+ printk(KERN_INFO "TWL4030 Audio Codec unmute: %02x/%02x\n", ldac_reg, rdac_reg); ++ /* printk(KERN_INFO "TWL4030 Audio Codec unmute: %02x/%02x\n", ldac_reg, rdac_reg); */ + twl4030_write(codec, REG_ARXL2PGA, ldac_reg); + twl4030_write(codec, REG_ARXR2PGA, rdac_reg); + } @@ -419,19 +444,21 @@ index 0000000..c9eee19 +{ + struct snd_soc_codec *codec = codec_dai->codec; + struct twl4030_priv *twl4030 = codec->private_data; ++ u8 mode, old_format, format; + -+ /* get current format */ -+ u8 format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ /* get format */ ++ old_format = twl4030_read_reg_cache(codec, REG_AUDIO_IF); ++ format = old_format; + + /* set master/slave audio interface */ + switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { + case SND_SOC_DAIFMT_CBM_CFM: -+ printk(KERN_INFO "TWL4030 set dai fmt: master\n"); ++ /* printk(KERN_INFO "TWL4030 set dai fmt: master\n"); */ + format &= ~(AIF_SLAVE_EN); + format |= CLK256FS_EN; + break; + case SND_SOC_DAIFMT_CBS_CFS: -+ printk(KERN_INFO "TWL4030 set dai fmt: slave\n"); ++ /* printk(KERN_INFO "TWL4030 set dai fmt: slave\n"); */ + format &= ~(CLK256FS_EN); + format |= AIF_SLAVE_EN; + break; @@ -443,21 +470,26 @@ index 0000000..c9eee19 + format &= ~AIF_FORMAT; + switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { + case SND_SOC_DAIFMT_I2S: -+ printk(KERN_INFO "TWL4030 set dai fmt: i2s\n"); ++ /* printk(KERN_INFO "TWL4030 set dai fmt: i2s\n"); */ + format |= AIF_FORMAT_CODEC; + break; + default: + return -EINVAL; + } + -+ /* turn off codec before changing format */ -+ twl4030_power_down(codec); ++ if (format != old_format) { + -+ /* change format */ -+ twl4030_write(codec, REG_AUDIO_IF, format); ++ /* turn off codec before changing format */ ++ mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); ++ mode &= ~CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); + -+ u8 mode = twl4030_read_reg_cache(codec, REG_CODEC_MODE); -+ twl4030_power_up(codec, mode); ++ /* change format */ ++ twl4030_write(codec, REG_AUDIO_IF, format); ++ ++ mode |= CODECPDZ; ++ twl4030_write(codec, REG_CODEC_MODE, mode); ++ } + + return 0; +} @@ -530,8 +562,6 @@ index 0000000..c9eee19 + + printk(KERN_INFO "TWL4030 Audio Codec init \n"); + -+ twl4030_init_chip(); -+ + codec->name = "twl4030"; + codec->owner = THIS_MODULE; + codec->read = twl4030_read_reg_cache; @@ -560,6 +590,9 @@ index 0000000..c9eee19 + goto card_err; + } + ++ twl4030_init_chip(); ++ twl4030_power_up(codec, APLL_RATE_44100 | OPT_MODE); ++ + return ret; + +card_err: @@ -580,8 +613,6 @@ index 0000000..c9eee19 + struct snd_soc_codec *codec; + struct twl4030_priv *twl4030; + -+ printk(KERN_INFO "TWL4030 Audio Codec probe\n"); -+ + codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL); + if (codec == NULL) + return -ENOMEM; @@ -601,7 +632,6 @@ index 0000000..c9eee19 + twl4030_socdev = socdev; + twl4030_init(socdev); + -+ printk(KERN_INFO "TWL4030 Audio Codec probe exit\n"); + return 0; +} + @@ -630,10 +660,10 @@ index 0000000..c9eee19 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/twl4030.h b/sound/soc/codecs/twl4030.h new file mode 100644 -index 0000000..af8eb43 +index 0000000..e126f96 --- /dev/null +++ b/sound/soc/codecs/twl4030.h -@@ -0,0 +1,125 @@ +@@ -0,0 +1,152 @@ +/* + * ALSA SoC TWL4030 codec driver + * @@ -722,7 +752,7 @@ index 0000000..af8eb43 + +/* Bitfield Definitions */ + -+/* CODEC_MODE Fields */ ++/* CODEC_MODE (0x01) Fields */ + +#define APLL_RATE 0xF0 +#define APLL_RATE_8000 0x00 @@ -738,7 +768,7 @@ index 0000000..af8eb43 +#define CODECPDZ 0x02 +#define OPT_MODE 0x01 + -+/* AUDIO_IF Fields */ ++/* AUDIO_IF (0x0E) Fields */ + +#define AIF_SLAVE_EN 0x80 +#define DATA_WIDTH 0x60 @@ -754,6 +784,33 @@ index 0000000..af8eb43 +#define CLK256FS_EN 0x02 +#define AIF_EN 0x01 + ++/* HS_GAIN_SET (0x23) Fields */ ++ ++#define HSR_GAIN 0x0c ++#define HSR_GAIN_PWR_DOWN 0x00 ++#define HSR_GAIN_PLUS_6DB 0x04 ++#define HSR_GAIN_0DB 0x08 ++#define HSR_GAIN_MINUS_6DB 0x0c ++#define HSL_GAIN 0x0c ++#define HSL_GAIN_PWR_DOWN 0x00 ++#define HSL_GAIN_PLUS_6DB 0x01 ++#define HSL_GAIN_0DB 0x02 ++#define HSL_GAIN_MINUS_6DB 0x03 ++ ++/* HS_POPN_SET (0x24) Fields */ ++ ++#define VMID_EN 0x40 ++#define EXTMUTE 0x20 ++#define RAMP_DELAY 0x1C ++#define RAMP_DELAY_20MS 0x00 ++#define RAMP_DELAY_40MS 0x04 ++#define RAMP_DELAY_81MS 0x08 ++#define RAMP_DELAY_161MS 0x0c ++#define RAMP_DELAY_323MS 0x10 ++#define RAMP_DELAY_645MS 0x14 ++#define RAMP_DELAY_1291MS 0x18 ++#define RAMP_DELAY_2581MS 0x1c ++#define RAMP_EN 0x02 + +extern struct snd_soc_codec_dai twl4030_dai; +extern struct snd_soc_codec_device soc_codec_dev_twl4030; @@ -801,10 +858,10 @@ index d8d8d58..638a240 100644 + diff --git a/sound/soc/omap/omap3beagle.c b/sound/soc/omap/omap3beagle.c new file mode 100644 -index 0000000..fb79938 +index 0000000..878f894 --- /dev/null +++ b/sound/soc/omap/omap3beagle.c -@@ -0,0 +1,180 @@ +@@ -0,0 +1,142 @@ +/* + * omap3beagle.c -- SoC audio for OMAP3 Beagle + * @@ -877,50 +934,12 @@ index 0000000..fb79938 + .hw_params = omap3beagle_hw_params, +}; + -+static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { -+ SND_SOC_DAPM_HP("Headphone Jack", NULL), -+ SND_SOC_DAPM_LINE("Line In", NULL), -+}; -+ -+static const char *audio_map[][3] = { -+ {"Headphone Jack", NULL, "HPLOUT"}, -+ {"Headphone Jack", NULL, "HPROUT"}, -+ -+ {"Line In", NULL, "Line In"}, -+ {"Line In", NULL, "Line In"}, -+}; -+ -+static int omap3beagle_twl4030_init(struct snd_soc_codec *codec) -+{ -+ int i; -+ -+ printk(KERN_INFO "OMAP3 Beagle TWL4030 SoC init\n"); -+ -+ /* Add omap3beagle specific widgets */ -+ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) -+ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); -+ -+ /* Set up omap3beagle specific audio path audio_map */ -+ for (i = 0; i < ARRAY_SIZE(audio_map); i++) -+ snd_soc_dapm_connect_input(codec, audio_map[i][0], -+ audio_map[i][1], audio_map[i][2]); -+ -+ /* always connected */ -+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1); -+ snd_soc_dapm_set_endpoint(codec, "Line In", 1); -+ -+ snd_soc_dapm_sync_endpoints(codec); -+ -+ return 0; -+} -+ +/* Digital audio interface glue - connects codec <--> CPU */ +static struct snd_soc_dai_link omap3beagle_dai = { + .name = "TWL4030", + .stream_name = "TWL4030", + .cpu_dai = &omap_mcbsp_dai[0], + .codec_dai = &twl4030_dai, -+ .init = omap3beagle_twl4030_init, + .ops = &omap3beagle_ops, +}; + @@ -987,10 +1006,10 @@ index 0000000..fb79938 +MODULE_LICENSE("GPL"); diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c new file mode 100644 -index 0000000..32d4f5d +index 0000000..a64c788 --- /dev/null +++ b/sound/soc/omap/omap3evm.c -@@ -0,0 +1,180 @@ +@@ -0,0 +1,142 @@ +/* + * omap3evm.c -- SoC audio for OMAP3 EVM + * @@ -1063,50 +1082,12 @@ index 0000000..32d4f5d + .hw_params = omap3evm_hw_params, +}; + -+static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { -+ SND_SOC_DAPM_HP("Headphone Jack", NULL), -+ SND_SOC_DAPM_LINE("Line In", NULL), -+}; -+ -+static const char *audio_map[][3] = { -+ {"Headphone Jack", NULL, "HPLOUT"}, -+ {"Headphone Jack", NULL, "HPROUT"}, -+ -+ {"Line In", NULL, "Line In"}, -+ {"Line In", NULL, "Line In"}, -+}; -+ -+static int omap3evm_twl4030_init(struct snd_soc_codec *codec) -+{ -+ int i; -+ -+ printk(KERN_INFO "OMAP3 EVM TWL4030 SoC init\n"); -+ -+ /* Add omap3evm specific widgets */ -+ for (i = 0; i < ARRAY_SIZE(twl4030_dapm_widgets); i++) -+ snd_soc_dapm_new_control(codec, &twl4030_dapm_widgets[i]); -+ -+ /* Set up omap3evm specific audio path audio_map */ -+ for (i = 0; i < ARRAY_SIZE(audio_map); i++) -+ snd_soc_dapm_connect_input(codec, audio_map[i][0], -+ audio_map[i][1], audio_map[i][2]); -+ -+ /* always connected */ -+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1); -+ snd_soc_dapm_set_endpoint(codec, "Line In", 1); -+ -+ snd_soc_dapm_sync_endpoints(codec); -+ -+ return 0; -+} -+ +/* Digital audio interface glue - connects codec <--> CPU */ +static struct snd_soc_dai_link omap3evm_dai = { + .name = "TWL4030", + .stream_name = "TWL4030", + .cpu_dai = &omap_mcbsp_dai[0], + .codec_dai = &twl4030_dai, -+ .init = omap3evm_twl4030_init, + .ops = &omap3evm_ops, +}; + diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 797511b5d6..0b3155aaa5 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" -PR = "r41" +PR = "r42" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" -- cgit v1.2.3 From b2084a59724f3125f6feda5005c5cab4eb16590e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Fri, 11 Jul 2008 18:00:30 +0000 Subject: linux-omap2 git: enhance /proc/cpuinfo cache info. RMK doesn't like it, but who cares? --- .../beagleboard/cache-display-fix.patch | 238 +++++++++++++++++++++ packages/linux/linux-omap2_git.bb | 3 +- 2 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-omap2-git/beagleboard/cache-display-fix.patch diff --git a/packages/linux/linux-omap2-git/beagleboard/cache-display-fix.patch b/packages/linux/linux-omap2-git/beagleboard/cache-display-fix.patch new file mode 100644 index 0000000000..c96b95f2f4 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/cache-display-fix.patch @@ -0,0 +1,238 @@ +On Tue, 2008-07-01 at 06:23 +0100, Dirk Behme wrote: +> Catalin Marinas wrote: +> > But, anyway, if you want a patch, Harry is updating it to a recent +> > kernel. +> +> Any news on this? I think there are some people wanting a patch ;) + +See below for a preliminary patch updated to 2.6.26-rc8. Note that I +don't plan to submit it in its current form but clean it up a bit first. + + +Show the cache type of ARMv7 CPUs + +From: Catalin Marinas + +Signed-off-by: Catalin Marinas +--- + + arch/arm/kernel/setup.c | 137 +++++++++++++++++++++++++++++++++++++++++++++- + include/asm-arm/system.h | 18 ++++++ + 2 files changed, 153 insertions(+), 2 deletions(-) + + +diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c +index 5ae0eb2..0cd238d 100644 +--- a/arch/arm/kernel/setup.c ++++ b/arch/arm/kernel/setup.c +@@ -256,6 +256,24 @@ static const char *proc_arch[] = { + "?(17)", + }; + ++static const char *v7_cache_policy[4] = { ++ "reserved", ++ "AVIVT", ++ "VIPT", ++ "PIPT", ++}; ++ ++static const char *v7_cache_type[8] = { ++ "none", ++ "instruction only", ++ "data only", ++ "separate instruction and data", ++ "unified", ++ "unknown type", ++ "unknown type", ++ "unknown type", ++}; ++ + #define CACHE_TYPE(x) (((x) >> 25) & 15) + #define CACHE_S(x) ((x) & (1 << 24)) + #define CACHE_DSIZE(x) (((x) >> 12) & 4095) /* only if S=1 */ +@@ -266,6 +284,22 @@ static const char *proc_arch[] = { + #define CACHE_M(y) ((y) & (1 << 2)) + #define CACHE_LINE(y) ((y) & 3) + ++#define CACHE_TYPE_V7(x) (((x) >> 14) & 3) ++#define CACHE_UNIFIED(x) ((((x) >> 27) & 7)+1) ++#define CACHE_COHERENT(x) ((((x) >> 24) & 7)+1) ++ ++#define CACHE_ID_LEVEL_MASK 7 ++#define CACHE_ID_LEVEL_BITS 3 ++ ++#define CACHE_LINE_V7(v) ((1 << (((v) & 7)+4))) ++#define CACHE_ASSOC_V7(v) ((((v) >> 3) & ((1<<10)-1))+1) ++#define CACHE_SETS_V7(v) ((((v) >> 13) & ((1<<15)-1))+1) ++#define CACHE_SIZE_V7(v) (CACHE_LINE_V7(v)*CACHE_ASSOC_V7(v)*CACHE_SETS_V7(v)) ++#define CACHE_WA_V7(v) (((v) & (1<<28)) != 0) ++#define CACHE_RA_V7(v) (((v) & (1<<29)) != 0) ++#define CACHE_WB_V7(v) (((v) & (1<<30)) != 0) ++#define CACHE_WT_V7(v) (((v) & (1<<31)) != 0) ++ + static inline void dump_cache(const char *prefix, int cpu, unsigned int cache) + { + unsigned int mult = 2 + (CACHE_M(cache) ? 1 : 0); +@@ -279,11 +313,57 @@ static inline void dump_cache(const char *prefix, int cpu, unsigned int cache) + CACHE_LINE(cache))); + } + ++static void dump_v7_cache(const char *type, int cpu, unsigned int level) ++{ ++ unsigned int cachesize; ++ ++ write_extended_cpuid(2,0,0,0,level); /* Set the cache size selection register */ ++ write_extended_cpuid(0,7,5,4,0); /* Prefetch flush to wait for above */ ++ cachesize = read_extended_cpuid(1,0,0,0); ++ ++ printk("CPU%u: %s cache: %d bytes, associativity %d, %d byte lines, %d sets,\n supports%s%s%s%s\n", ++ cpu, type, ++ CACHE_SIZE_V7(cachesize),CACHE_ASSOC_V7(cachesize), ++ CACHE_LINE_V7(cachesize),CACHE_SETS_V7(cachesize), ++ CACHE_WA_V7(cachesize) ? " WA" : "", ++ CACHE_RA_V7(cachesize) ? " RA" : "", ++ CACHE_WB_V7(cachesize) ? " WB" : "", ++ CACHE_WT_V7(cachesize) ? " WT" : ""); ++} ++ + static void __init dump_cpu_info(int cpu) + { + unsigned int info = read_cpuid(CPUID_CACHETYPE); + +- if (info != processor_id) { ++ if (info != processor_id && (info & (1 << 31))) { ++ /* ARMv7 style of cache info register */ ++ unsigned int id = read_extended_cpuid(1,0,0,1); ++ unsigned int level = 0; ++ printk("CPU%u: L1 I %s cache. Caches unified at level %u, coherent at level %u\n", ++ cpu, ++ v7_cache_policy[CACHE_TYPE_V7(info)], ++ CACHE_UNIFIED(id), ++ CACHE_COHERENT(id)); ++ ++ while (id & CACHE_ID_LEVEL_MASK) { ++ printk("CPU%u: Level %u cache is %s\n", ++ cpu, (level >> 1)+1, v7_cache_type[id & CACHE_ID_LEVEL_MASK]); ++ ++ if (id & 1) { ++ /* Dump I at this level */ ++ dump_v7_cache("I", cpu, level | 1); ++ } ++ ++ if (id & (4 | 2)) { ++ /* Dump D or unified at this level */ ++ dump_v7_cache((id & 4) ? "unified" : "D", cpu, level); ++ } ++ ++ /* Next level out */ ++ level += 2; ++ id >>= CACHE_ID_LEVEL_BITS; ++ } ++ } else if (info != processor_id) { + printk("CPU%u: D %s %s cache\n", cpu, cache_is_vivt() ? "VIVT" : "VIPT", + cache_types[CACHE_TYPE(info)]); + if (CACHE_S(info)) { +@@ -916,6 +996,30 @@ c_show_cache(struct seq_file *m, const char *type, unsigned int cache) + CACHE_LINE(cache))); + } + ++static void c_show_v7_cache(struct seq_file *m, const char *type, unsigned int levelselect) ++{ ++ unsigned int cachesize; ++ unsigned int level = (levelselect >> 1) + 1; ++ ++ write_extended_cpuid(2,0,0,0,levelselect); /* Set the cache size selection register */ ++ write_extended_cpuid(0,7,5,4,0); /* Prefetch flush to wait for above */ ++ cachesize = read_extended_cpuid(1,0,0,0); ++ ++ seq_printf(m, "L%u %s size\t\t: %d bytes\n" ++ "L%u %s assoc\t\t: %d\n" ++ "L%u %s line length\t: %d\n" ++ "L%u %s sets\t\t: %d\n" ++ "L%u %s supports\t\t:%s%s%s%s\n", ++ level, type, CACHE_SIZE_V7(cachesize), ++ level, type, CACHE_ASSOC_V7(cachesize), ++ level, type, CACHE_LINE_V7(cachesize), ++ level, type, CACHE_SETS_V7(cachesize), ++ level, type, CACHE_WA_V7(cachesize) ? " WA" : "", ++ CACHE_RA_V7(cachesize) ? " RA" : "", ++ CACHE_WB_V7(cachesize) ? " WB" : "", ++ CACHE_WT_V7(cachesize) ? " WT" : ""); ++} ++ + static int c_show(struct seq_file *m, void *v) + { + int i; +@@ -971,7 +1075,36 @@ static int c_show(struct seq_file *m, void *v) + + { + unsigned int cache_info = read_cpuid(CPUID_CACHETYPE); +- if (cache_info != processor_id) { ++ if (cache_info != processor_id && (cache_info & (1<<31))) { ++ /* V7 style of cache info register */ ++ unsigned int id = read_extended_cpuid(1,0,0,1); ++ unsigned int levelselect = 0; ++ seq_printf(m, "L1 I cache\t:%s\n" ++ "Cache unification level\t: %u\n" ++ "Cache coherency level\t: %u\n", ++ v7_cache_policy[CACHE_TYPE_V7(cache_info)], ++ CACHE_UNIFIED(id), ++ CACHE_COHERENT(id)); ++ ++ while (id & CACHE_ID_LEVEL_MASK) { ++ seq_printf(m, "Level %u cache\t\t: %s\n", ++ (levelselect >> 1)+1, v7_cache_type[id & CACHE_ID_LEVEL_MASK]); ++ ++ if (id & 1) { ++ /* Dump I at this level */ ++ c_show_v7_cache(m, "I", levelselect | 1); ++ } ++ ++ if (id & (4 | 2)) { ++ /* Dump D or unified at this level */ ++ c_show_v7_cache(m, (id & 4) ? "cache" : "D", levelselect); ++ } ++ ++ /* Next level out */ ++ levelselect += 2; ++ id >>= CACHE_ID_LEVEL_BITS; ++ } ++ } else if (cache_info != processor_id) { + seq_printf(m, "Cache type\t: %s\n" + "Cache clean\t: %s\n" + "Cache lockdown\t: %s\n" +diff --git a/include/asm-arm/system.h b/include/asm-arm/system.h +index 514af79..704738e 100644 +--- a/include/asm-arm/system.h ++++ b/include/asm-arm/system.h +@@ -74,6 +74,24 @@ + : "cc"); \ + __val; \ + }) ++#define read_extended_cpuid(op1,op2,op3,op4) \ ++ ({ \ ++ unsigned int __val; \ ++ asm("mrc p15," __stringify(op1) ",%0,c" __stringify(op2)",c" __stringify(op3)"," __stringify(op4) \ ++ : "=r" (__val) \ ++ : \ ++ : "cc"); \ ++ __val; \ ++ }) ++ ++#define write_extended_cpuid(op1,op2,op3,op4,v) \ ++ ({ \ ++ unsigned int __val = v; \ ++ asm("mcr p15," __stringify(op1) ",%0,c" __stringify(op2)",c" __stringify(op3)"," __stringify(op4) \ ++ : \ ++ : "r" (__val) \ ++ : "cc"); \ ++ }) + #else + extern unsigned int processor_id; + #define read_cpuid(reg) (processor_id) + + +-- +Catalin + + diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 0b3155aaa5..69d3415faf 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" -PR = "r42" +PR = "r43" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -28,6 +28,7 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://05-fix-display-panning.diff;patch=1 \ file://06-ensure-fclk.diff;patch=1 \ file://07-set-burst-size.diff;patch=1 \ + file://cache-display-fix.patch;patch=1 \ " SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ -- cgit v1.2.3 From fb848073823a54711c3a8a724605041bfe85347c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 12 Jul 2008 09:26:38 +0000 Subject: linux-neuros: bump SRCREV --- packages/linux/linux-neuros_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-neuros_git.bb b/packages/linux/linux-neuros_git.bb index 5450fe75f8..dc48e92e53 100644 --- a/packages/linux/linux-neuros_git.bb +++ b/packages/linux/linux-neuros_git.bb @@ -2,10 +2,10 @@ require linux.inc DESCRIPTION = "Linux kernel for Neuros OSD devices" -SRCREV = "723849a80153f079a653d06a660f63fec67f6d1e" +SRCREV = "765db0a3a81756207809f982d65548bd4b3159e3" PV = "2.6.23-${PR}+git${SRCREV}" -PR = "r4" +PR = "r5" COMPATIBLE_MACHINE = "(neuros-osd|neuros-osd2)" -- cgit v1.2.3 From 042dc775c3e44814ec648329a1692b25465ebdeb Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Sat, 12 Jul 2008 12:37:27 +0000 Subject: gnuradio : Add patch for building with libusb-0.9. --- packages/gnuradio/gnuradio/gnuradio-libusb.patch | 25 ++++++++++++++++++++++++ packages/gnuradio/gnuradio_3.1.2.bb | 1 + 2 files changed, 26 insertions(+) create mode 100644 packages/gnuradio/gnuradio/gnuradio-libusb.patch diff --git a/packages/gnuradio/gnuradio/gnuradio-libusb.patch b/packages/gnuradio/gnuradio/gnuradio-libusb.patch new file mode 100644 index 0000000000..d3be6294b4 --- /dev/null +++ b/packages/gnuradio/gnuradio/gnuradio-libusb.patch @@ -0,0 +1,25 @@ +diff -Nurd gnuradio-3.1.2.orig/usrp/host/lib/legacy/usrp_prims.cc gnuradio-3.1.2/usrp/host/lib/legacy/usrp_prims.cc +--- gnuradio-3.1.2.orig/usrp/host/lib/legacy/usrp_prims.cc 2008-03-05 16:12:38.000000000 -0500 ++++ gnuradio-3.1.2/usrp/host/lib/legacy/usrp_prims.cc 2008-07-12 08:04:09.000000000 -0400 +@@ -131,10 +131,18 @@ + static struct usb_device * + dev_handle_to_dev (usb_dev_handle *udh) + { ++ struct list_head { ++ struct list_head *prev, *next; ++ }; ++ + struct usb_dev_handle_kludge { +- int fd; +- struct usb_bus *bus; +- struct usb_device *device; ++ /* lock protects claimed_interfaces */ ++ pthread_mutex_t lock; ++ unsigned long claimed_interfaces; ++ ++ struct list_head list; ++ struct usb_device *device; ++ unsigned char os_priv[0]; + }; + + return ((struct usb_dev_handle_kludge *) udh)->device; diff --git a/packages/gnuradio/gnuradio_3.1.2.bb b/packages/gnuradio/gnuradio_3.1.2.bb index f5ced2324c..60ced1c3e6 100644 --- a/packages/gnuradio/gnuradio_3.1.2.bb +++ b/packages/gnuradio/gnuradio_3.1.2.bb @@ -5,5 +5,6 @@ PR = "r3" SRC_URI = "ftp://ftp.gnu.org/gnu/gnuradio/gnuradio-${PV}.tar.gz \ file://no-trellis-doc.patch;patch=1 \ file://gcc43.patch;patch=1;pnum=2 \ + file://gnuradio-libusb.patch;patch=1 \ " -- cgit v1.2.3 From 3628be3bac314a8dfb449498f33cf4551728e882 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 12 Jul 2008 13:21:18 +0000 Subject: gnuradio: bump PR --- packages/gnuradio/gnuradio_3.1.2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gnuradio/gnuradio_3.1.2.bb b/packages/gnuradio/gnuradio_3.1.2.bb index 60ced1c3e6..4bc9b848bf 100644 --- a/packages/gnuradio/gnuradio_3.1.2.bb +++ b/packages/gnuradio/gnuradio_3.1.2.bb @@ -1,6 +1,6 @@ require gnuradio.inc -PR = "r3" +PR = "r4" SRC_URI = "ftp://ftp.gnu.org/gnu/gnuradio/gnuradio-${PV}.tar.gz \ file://no-trellis-doc.patch;patch=1 \ -- cgit v1.2.3 From a596e3e23fd60995a89318bd3518797a94bfa1d8 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 12 Jul 2008 14:07:07 +0000 Subject: python-native 2.5.1 add distutils patch to catch up with newer SWIG versions This fixes the infamous: TypeError: swig_sources() takes exactly 2 arguments (3 given) --- .../python-native-2.5.1/catchup-with-swig.patch | 13 +++++++++++++ packages/python/python-native_2.5.1.bb | 20 +++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 packages/python/python-native-2.5.1/catchup-with-swig.patch diff --git a/packages/python/python-native-2.5.1/catchup-with-swig.patch b/packages/python/python-native-2.5.1/catchup-with-swig.patch new file mode 100644 index 0000000000..f049b759f4 --- /dev/null +++ b/packages/python/python-native-2.5.1/catchup-with-swig.patch @@ -0,0 +1,13 @@ +Index: Python-2.5.1/Lib/distutils/command/build_ext.py +=================================================================== +--- Python-2.5.1.orig/Lib/distutils/command/build_ext.py ++++ Python-2.5.1/Lib/distutils/command/build_ext.py +@@ -513,7 +513,7 @@ class build_ext (Command): + target_lang=language) + + +- def swig_sources (self, sources, extension): ++ def swig_sources (self, sources, extension=None): + + """Walk the list of source files in 'sources', looking for SWIG + interface (.i) files. Run SWIG on all that are found, and diff --git a/packages/python/python-native_2.5.1.bb b/packages/python/python-native_2.5.1.bb index ea6e257043..3f58d36a2e 100644 --- a/packages/python/python-native_2.5.1.bb +++ b/packages/python/python-native_2.5.1.bb @@ -4,15 +4,18 @@ LICENSE = "PSF" SECTION = "devel/python" PRIORITY = "optional" DEPENDS = "" -PR = "ml1" +PR = "ml2" EXCLUDE_FROM_WORLD = "1" -SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \ - file://bindir-libdir.patch;patch=1 \ - file://cross-distutils.patch;patch=1 \ - file://dont-modify-shebang-line.patch;patch=1 \ - file://default-is-optimized.patch;patch=1" +SRC_URI = "\ + http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \ + file://bindir-libdir.patch;patch=1 \ + file://cross-distutils.patch;patch=1 \ + file://dont-modify-shebang-line.patch;patch=1 \ + file://default-is-optimized.patch;patch=1 \ + file://catchup-with-swig.patch;patch=1 \ +" S = "${WORKDIR}/Python-${PV}" inherit autotools native @@ -24,11 +27,6 @@ EXTRA_OECONF = "--with-threads --with-pymalloc --with-cyclic-gc \ --without-cxx --with-signal-module --with-wctype-functions" EXTRA_OEMAKE = 'BUILD_SYS="" HOST_SYS=""' -#do_configure() { -# # the autofoo stuff is too old to allow regenerating -# oe_runconf -#} - do_stage_append() { install -m 0755 Parser/pgen ${STAGING_BINDIR_NATIVE}/ } -- cgit v1.2.3 From a8a7aa9a1178682a6636948a59146e083f462f7b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 12 Jul 2008 14:08:20 +0000 Subject: python-setuptools[-native] 0.6c6 update to 0.6c8 --- packages/python/python-setuptools-native_0.6c6.bb | 9 --------- packages/python/python-setuptools-native_0.6c8.bb | 9 +++++++++ packages/python/python-setuptools_0.6c6.bb | 17 ----------------- packages/python/python-setuptools_0.6c8.bb | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 26 deletions(-) delete mode 100644 packages/python/python-setuptools-native_0.6c6.bb create mode 100644 packages/python/python-setuptools-native_0.6c8.bb delete mode 100644 packages/python/python-setuptools_0.6c6.bb create mode 100644 packages/python/python-setuptools_0.6c8.bb diff --git a/packages/python/python-setuptools-native_0.6c6.bb b/packages/python/python-setuptools-native_0.6c6.bb deleted file mode 100644 index b7716d8cac..0000000000 --- a/packages/python/python-setuptools-native_0.6c6.bb +++ /dev/null @@ -1,9 +0,0 @@ -require python-setuptools_${PV}.bb -inherit native - -DEPENDS = "python-native" - -do_stage() { - BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ - ${STAGING_BINDIR_NATIVE}/python setup.py install -} diff --git a/packages/python/python-setuptools-native_0.6c8.bb b/packages/python/python-setuptools-native_0.6c8.bb new file mode 100644 index 0000000000..b7716d8cac --- /dev/null +++ b/packages/python/python-setuptools-native_0.6c8.bb @@ -0,0 +1,9 @@ +require python-setuptools_${PV}.bb +inherit native + +DEPENDS = "python-native" + +do_stage() { + BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \ + ${STAGING_BINDIR_NATIVE}/python setup.py install +} diff --git a/packages/python/python-setuptools_0.6c6.bb b/packages/python/python-setuptools_0.6c6.bb deleted file mode 100644 index fe78e585f7..0000000000 --- a/packages/python/python-setuptools_0.6c6.bb +++ /dev/null @@ -1,17 +0,0 @@ -DESCRIPTION = "Download, build, install, upgrade, and uninstall Python packages" -HOMEPAGE = "http://cheeseshop.python.org/pypi/setuptools" -SECTION = "devel/python" -PRIORITY = "optional" -LICENSE = "MIT-like" -RDEPENDS = "python-distutils python-compression" -SRCNAME = "setuptools" -PR = "ml2" - -SRC_URI = "http://cheeseshop.python.org/packages/source/s/setuptools/${SRCNAME}-${PV}.tar.gz" -S = "${WORKDIR}/${SRCNAME}-${PV}" - -inherit distutils - -do_install_prepend() { - install -d ${D}/${libdir}/${PYTHON_DIR}/site-packages -} diff --git a/packages/python/python-setuptools_0.6c8.bb b/packages/python/python-setuptools_0.6c8.bb new file mode 100644 index 0000000000..19f73d3f67 --- /dev/null +++ b/packages/python/python-setuptools_0.6c8.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "Download, build, install, upgrade, and uninstall Python packages" +HOMEPAGE = "http://cheeseshop.python.org/pypi/setuptools" +SECTION = "devel/python" +PRIORITY = "optional" +LICENSE = "MIT-like" +RDEPENDS = "python-distutils python-compression" +SRCNAME = "setuptools" +PR = "ml0" + +SRC_URI = "http://cheeseshop.python.org/packages/source/s/setuptools/${SRCNAME}-${PV}.tar.gz" +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit distutils + +do_install_prepend() { + install -d ${D}/${libdir}/${PYTHON_DIR}/site-packages +} -- cgit v1.2.3 From 500773fabd0af9c1e1a7fd358a20cfadbf3e6bc4 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Sat, 12 Jul 2008 14:30:24 +0000 Subject: fso-image: add lsof --- packages/images/fso-image.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/images/fso-image.bb b/packages/images/fso-image.bb index 173f598770..33f83d89a0 100644 --- a/packages/images/fso-image.bb +++ b/packages/images/fso-image.bb @@ -41,6 +41,7 @@ X_INSTALL = "\ TOOLS_INSTALL = "\ # bash \ htop \ + lsof \ mickeydbus \ mickeyterm \ nano \ -- cgit v1.2.3 From f458615859f8ce14c0d42a70fb06c628a54b9e96 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sat, 12 Jul 2008 19:52:29 +0000 Subject: gcc csl 2007q3: add patch to fix segfaults when using -Os --- packages/gcc/gcc-cross_csl-arm-2007q3.bb | 2 +- packages/gcc/gcc-csl-arm-2007q3.inc | 1 + packages/gcc/gcc-csl-arm-2007q3/gcc-Os-fix.diff | 12 ++++++++++++ packages/gcc/gcc_csl-arm-2007q3.bb | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/gcc/gcc-csl-arm-2007q3/gcc-Os-fix.diff diff --git a/packages/gcc/gcc-cross_csl-arm-2007q3.bb b/packages/gcc/gcc-cross_csl-arm-2007q3.bb index cd10cfbdef..295353a0f8 100644 --- a/packages/gcc/gcc-cross_csl-arm-2007q3.bb +++ b/packages/gcc/gcc-cross_csl-arm-2007q3.bb @@ -1,4 +1,4 @@ -PR = "r1" +PR = "r2" require gcc-csl-arm-2007q3.inc require gcc-cross4.inc diff --git a/packages/gcc/gcc-csl-arm-2007q3.inc b/packages/gcc/gcc-csl-arm-2007q3.inc index 601b4f0110..a3da6c9ca3 100644 --- a/packages/gcc/gcc-csl-arm-2007q3.inc +++ b/packages/gcc/gcc-csl-arm-2007q3.inc @@ -30,6 +30,7 @@ SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-20 # file://fortran-static-linking.patch;patch=1 \ # file://gcc-configure-no-fortran.patch;patch=1;pnum=1 \ # file://gcc-new-makeinfo.patch;patch=1 \ + file://gcc-Os-fix.diff;patch=1 \ " diff --git a/packages/gcc/gcc-csl-arm-2007q3/gcc-Os-fix.diff b/packages/gcc/gcc-csl-arm-2007q3/gcc-Os-fix.diff new file mode 100644 index 0000000000..422091f2e7 --- /dev/null +++ b/packages/gcc/gcc-csl-arm-2007q3/gcc-Os-fix.diff @@ -0,0 +1,12 @@ +--- /tmp/arm.c 2008-07-12 21:44:16.000000000 +0200 ++++ gcc-4.2/gcc/config/arm/arm.c 2008-07-12 21:45:48.393198000 +0200 +@@ -11591,7 +11591,8 @@ + && count != 0 + && !current_function_calls_eh_return + && bit_count(saved_regs_mask) * 4 == count +- && !IS_INTERRUPT (func_type)) ++ && !IS_INTERRUPT (func_type) ++ && !cfun->tail_call_emit) + { + unsigned long mask; + mask = (1 << (arm_size_return_regs() / 4)) - 1; diff --git a/packages/gcc/gcc_csl-arm-2007q3.bb b/packages/gcc/gcc_csl-arm-2007q3.bb index 832167ca4e..4999c6a53e 100644 --- a/packages/gcc/gcc_csl-arm-2007q3.bb +++ b/packages/gcc/gcc_csl-arm-2007q3.bb @@ -1,4 +1,4 @@ -PR = "r1" +PR = "r2" require gcc-${PV}.inc require gcc-configure-target.inc -- cgit v1.2.3 From 8586cce86bd8240cac065f436c1b6dcb3f93f6fe Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 08:40:25 +0000 Subject: libxml-simple-perl*: merge from poky --- packages/perl/libxml-simple-perl-native_2.18.bb | 7 +++++++ packages/perl/libxml-simple-perl_2.18.bb | 10 ++++++++++ 2 files changed, 17 insertions(+) create mode 100644 packages/perl/libxml-simple-perl-native_2.18.bb create mode 100644 packages/perl/libxml-simple-perl_2.18.bb diff --git a/packages/perl/libxml-simple-perl-native_2.18.bb b/packages/perl/libxml-simple-perl-native_2.18.bb new file mode 100644 index 0000000000..bfdfc3de45 --- /dev/null +++ b/packages/perl/libxml-simple-perl-native_2.18.bb @@ -0,0 +1,7 @@ +SECTION = "libs" + +inherit native + +require libxml-simple-perl_${PV}.bb + +DEPENDS = "libxml-parser-perl-native perl-native" diff --git a/packages/perl/libxml-simple-perl_2.18.bb b/packages/perl/libxml-simple-perl_2.18.bb new file mode 100644 index 0000000000..6cab76bf1e --- /dev/null +++ b/packages/perl/libxml-simple-perl_2.18.bb @@ -0,0 +1,10 @@ +SECTION = "libs" +LICENSE = "Artistic" +DEPENDS += "libxml-parser-perl" +PR = "r0" + +SRC_URI = "http://www.cpan.org/modules/by-module/XML/XML-Simple-${PV}.tar.gz" + +S = "${WORKDIR}/XML-Simple-${PV}" + +inherit cpan -- cgit v1.2.3 From 2ff35e011ea077cc4470412f72323dcd54914b9b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 08:42:03 +0000 Subject: icon-naming-utils native: merge from poky --- packages/icon-naming-utils/.mtn2git_empty | 0 packages/icon-naming-utils/icon-naming-utils-native_0.8.2.bb | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 packages/icon-naming-utils/.mtn2git_empty create mode 100644 packages/icon-naming-utils/icon-naming-utils-native_0.8.2.bb diff --git a/packages/icon-naming-utils/.mtn2git_empty b/packages/icon-naming-utils/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/icon-naming-utils/icon-naming-utils-native_0.8.2.bb b/packages/icon-naming-utils/icon-naming-utils-native_0.8.2.bb new file mode 100644 index 0000000000..68d0667670 --- /dev/null +++ b/packages/icon-naming-utils/icon-naming-utils-native_0.8.2.bb @@ -0,0 +1,9 @@ +LICENSE = "GPLv2" +DEPENDS = "libxml-simple-perl-native" +PR = "r1" + +SRC_URI = "http://tango.freedesktop.org/releases/icon-naming-utils-0.8.2.tar.gz" + +S = "${WORKDIR}/icon-naming-utils-${PV}" + +inherit autotools native -- cgit v1.2.3 From 8fb5eca08681dba2074cef2e51d98af76477396e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 08:46:15 +0000 Subject: gnome icon theme: add 2.22.0 and clean up recipe --- packages/gnome/gnome-icon-theme_2.22.0.bb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/gnome/gnome-icon-theme_2.22.0.bb diff --git a/packages/gnome/gnome-icon-theme_2.22.0.bb b/packages/gnome/gnome-icon-theme_2.22.0.bb new file mode 100644 index 0000000000..9b6828ac73 --- /dev/null +++ b/packages/gnome/gnome-icon-theme_2.22.0.bb @@ -0,0 +1,12 @@ +LICENSE = "GPL" +SECTION = "x11/gnome" +DEPENDS = "icon-naming-utils glib-2.0 intltool-native" +RDEPENDS = "hicolor-icon-theme" + +FILES_${PN} += "${datadir}/*" + +EXTRA_OECONF = "--disable-hicolor-check" + +inherit gnome + +PACKAGE_ARCH = "all" -- cgit v1.2.3 From e10d19f3c6bb0af44a281342bbc0a78063423127 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 08:48:01 +0000 Subject: hicolor icon theme: add 0.10 --- packages/hicolor-icon-theme/hicolor-icon-theme_0.10.bb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/hicolor-icon-theme/hicolor-icon-theme_0.10.bb diff --git a/packages/hicolor-icon-theme/hicolor-icon-theme_0.10.bb b/packages/hicolor-icon-theme/hicolor-icon-theme_0.10.bb new file mode 100644 index 0000000000..a1cb41b846 --- /dev/null +++ b/packages/hicolor-icon-theme/hicolor-icon-theme_0.10.bb @@ -0,0 +1,9 @@ +SECTION = "unknown" +LICENSE = "GPL" +inherit gnome + +SRC_URI = "http://icon-theme.freedesktop.org/releases/${P}.tar.gz" + +PACKAGE_ARCH = "all" + +FILES_${PN} += "${datadir}/icons" -- cgit v1.2.3 From 438da6b56fd2bb53cfe6a69d1b466e7083a0dbfa Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 08:58:01 +0000 Subject: angstrom-glibc: revert armv7a optimization flags, they make gdb segfault --- conf/distro/include/angstrom-glibc.inc | 3 --- 1 file changed, 3 deletions(-) diff --git a/conf/distro/include/angstrom-glibc.inc b/conf/distro/include/angstrom-glibc.inc index 4734187f0f..8c76de6f1a 100644 --- a/conf/distro/include/angstrom-glibc.inc +++ b/conf/distro/include/angstrom-glibc.inc @@ -29,9 +29,6 @@ FULL_OPTIMIZATION_pn-glibc-intermediate = "-O2" FULL_OPTIMIZATION_pn-glibc = "-fexpensive-optimizations -fomit-frame-pointer -O2" FULL_OPTIMIZATION_sparc = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2" -FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -frename-registers -fomit-frame-pointer -ftree-vectorize -O2" -FULL_OPTIMIZATION_pn-glibc_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -ftree-vectorize -O3" - BUILD_OPTIMIZATION = "-Os" BUILD_OPTIMIZATION_pn-perl = "-O1" BUILD_OPTIMIZATION_pn-glibc-intermediate = "-O2" -- cgit v1.2.3 From 27aaabfb1a64de15f9a8b6665997ac47a4de13ff Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:16:11 +0000 Subject: util-linux-ng: update to 2.14 --- packages/util-linux-ng/util-linux-ng.inc | 4 ++-- packages/util-linux-ng/util-linux-ng_2.14.bb | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 packages/util-linux-ng/util-linux-ng_2.14.bb diff --git a/packages/util-linux-ng/util-linux-ng.inc b/packages/util-linux-ng/util-linux-ng.inc index fa02f35356..dd008073be 100644 --- a/packages/util-linux-ng/util-linux-ng.inc +++ b/packages/util-linux-ng/util-linux-ng.inc @@ -1,7 +1,7 @@ DESCRIPTION = "Util-linux-ng is a suite of essential utilities for any Linux system." SECTION = "base" LICENSE = "GPL" -DEPENDS = "zlib ncurses e2fsprogs-libs" +DEPENDS = "udev zlib ncurses e2fsprogs-libs" inherit autotools @@ -13,7 +13,7 @@ inherit autotools RC="" DEFAULT_PREFERENCE = "-1" -SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v2.13/util-linux-ng-${PV}${RC}.tar.bz2" +SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v${PV}/util-linux-ng-${PV}${RC}.tar.bz2" # file://gcc34.patch;patch=1 \ # file://MCONFIG \ # file://make_include \ diff --git a/packages/util-linux-ng/util-linux-ng_2.14.bb b/packages/util-linux-ng/util-linux-ng_2.14.bb new file mode 100644 index 0000000000..c3438425f3 --- /dev/null +++ b/packages/util-linux-ng/util-linux-ng_2.14.bb @@ -0,0 +1,3 @@ +require util-linux-ng.inc + +PR = "r0" -- cgit v1.2.3 From da335561e72434cf19bcf3cadca00e172db0d5c6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:16:43 +0000 Subject: task proper tools: prefer util-linux-ng to get schedutils as well --- packages/tasks/task-proper-tools.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tasks/task-proper-tools.bb b/packages/tasks/task-proper-tools.bb index 1610854bc0..6e1cd5d895 100644 --- a/packages/tasks/task-proper-tools.bb +++ b/packages/tasks/task-proper-tools.bb @@ -1,12 +1,12 @@ DESCRIPTION = "Full versions of tools provided by busybox" -PR = "r5" +PR = "r6" inherit task RDEPENDS_${PN} = "\ coreutils \ findutils \ - util-linux \ + util-linux-ng \ gawk \ sed \ wget \ -- cgit v1.2.3 From 768de7dae0fc250fe4544e71b15a2c26ad0d7b8b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:40:16 +0000 Subject: util-linux-ng: fix packaging --- packages/util-linux-ng/util-linux-ng.inc | 68 ++++++++++++---------------- packages/util-linux-ng/util-linux-ng_2.14.bb | 2 +- 2 files changed, 31 insertions(+), 39 deletions(-) diff --git a/packages/util-linux-ng/util-linux-ng.inc b/packages/util-linux-ng/util-linux-ng.inc index dd008073be..810c8e6e9f 100644 --- a/packages/util-linux-ng/util-linux-ng.inc +++ b/packages/util-linux-ng/util-linux-ng.inc @@ -14,29 +14,22 @@ RC="" DEFAULT_PREFERENCE = "-1" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v${PV}/util-linux-ng-${PV}${RC}.tar.bz2" -# file://gcc34.patch;patch=1 \ -# file://MCONFIG \ -# file://make_include \ -# file://swapargs.h \ -# file://fdiskbsdlabel_thumb.diff;patch=1 \ -# file://umount.diff;patch=1 \ -# file://defines.h" -PACKAGES_prepend = "util-linux-fdisk util-linux-cfdisk util-linux-sfdisk util-linux-swaponoff util-linux-losetup util-linux-umount util-linux-mount util-linux-readprofile " +PACKAGES =+ "util-linux-ng-fdisk util-linux-ng-cfdisk util-linux-ng-sfdisk util-linux-ng-swaponoff util-linux-ng-losetup util-linux-ng-umount util-linux-ng-mount util-linux-ng-readprofile " FILES_${PN}-doc += "/usr/share/misc/getopt/getopt-*.*" -FILES_util-linux-fdisk = "/sbin/fdisk.${PN}" -FILES_util-linux-cfdisk = "/sbin/cfdisk" -FILES_util-linux-sfdisk = "/sbin/sfdisk" -FILES_util-linux-swaponoff = "/sbin/swapon.${PN} /sbin/swapoff.${PN}" -FILES_util-linux-losetup = "/sbin/losetup.${PN}" -FILES_util-linux-mount = "/bin/mount.${PN} ${sysconfdir}/default/mountall" -FILES_util-linux-umount = "/bin/umount.${PN}" -FILES_util-linux-readprofile = "/usr/sbin/readprofile" +FILES_util-linux-ng-fdisk = "/sbin/fdisk.${PN}" +FILES_util-linux-ng-cfdisk = "/sbin/cfdisk" +FILES_util-linux-ng-sfdisk = "/sbin/sfdisk" +FILES_util-linux-ng-swaponoff = "/sbin/swapon.${PN} /sbin/swapoff.${PN}" +FILES_util-linux-ng-losetup = "/sbin/losetup.${PN}" +FILES_util-linux-ng-mount = "/bin/mount.${PN} ${sysconfdir}/default/mountall" +FILES_util-linux-ng-umount = "/bin/umount.${PN}" +FILES_util-linux-ng-readprofile = "/usr/sbin/readprofile" -RRECOMMENDS_${PN} = "util-linux-fdisk util-linux-cfdisk util-linux-sfdisk util-linux-mount util-linux-readprofile " -RDEPENDS_${PN} = "util-linux-umount util-linux-swaponoff util-linux-losetup" +RRECOMMENDS_${PN} = "util-linux-ng-fdisk util-linux-ng-cfdisk util-linux-ng-sfdisk util-linux-ng-mount util-linux-ng-readprofile " +RDEPENDS_${PN} = "util-linux-ng-umount util-linux-ng-swaponoff util-linux-ng-losetup" EXTRA_OECONF = "--disable-use-tty-group --disable-makeinstall-chown \ --enable-kill --enable-last --enable-mesg --enable-raw --enable-login-utils \ @@ -104,7 +97,6 @@ do_install () { mv ${D}${bindir}/mesg ${D}${bindir}/mesg.${PN} mv ${D}${bindir}/renice ${D}${bindir}/renice.${PN} mv ${D}${bindir}/wall ${D}${bindir}/wall.${PN} - return 0 mv ${D}${sbindir}/losetup ${D}${base_sbindir}/losetup.${PN} mv ${D}${sbindir}/swapon ${D}${base_sbindir}/swapon.${PN} @@ -112,19 +104,19 @@ do_install () { mv ${D}${bindir}/mount ${D}${base_bindir}/mount.${PN} mv ${D}${sbindir}/fdisk ${D}${base_sbindir}/fdisk.${PN} - mv ${D}${bindir}/agetty ${D}${base_sbindir}/ - mv ${D}${bindir}/blockdev ${D}${base_sbindir}/ - mv ${D}${bindir}/cfdisk ${D}${base_sbindir}/ - mv ${D}${bindir}/ctrlaltdel ${D}${base_sbindir}/ + mv ${D}${sbindir}/agetty ${D}${base_sbindir}/ + mv ${D}${sbindir}/blockdev ${D}${base_sbindir}/ + mv ${D}${sbindir}/cfdisk ${D}${base_sbindir}/ + mv ${D}${sbindir}/ctrlaltdel ${D}${base_sbindir}/ install -d ${D}${sysconfdir}/default/ echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall - checklink swapon ${D}${base_sbindir}/swapoff ".${PN}" - checklink shutdown ${D}${base_sbindir}/reboot ".${PN}" - checklink shutdown ${D}${base_sbindir}/halt ".${PN}" - checklink shutdown ${D}${base_sbindir}/fastboot "" - checklink shutdown ${D}${base_sbindir}/fasthalt "" + ln -sf ${base_sbindir}/swapon ${D}${base_sbindir}/swapoff.${PN} + ln -sf ${base_sbindir}/shutdown ${D}${base_sbindir}/reboot.${PN} + ln -sf ${base_sbindir}/shutdown ${D}${base_sbindir}/halt.${PN} + ln -sf ${base_sbindir}/shutdown ${D}${base_sbindir}/fastboot + ln -sf ${base_sbindir}/shutdown ${D}${base_sbindir}/fasthalt } pkg_postinst_${PN} () { @@ -174,44 +166,44 @@ pkg_prerm_${PN} () { update-alternatives --remove wall wall.${PN} } -pkg_postinst_util-linux-fdisk () { +pkg_postinst_util-linux-ng-fdisk () { update-alternatives --install ${base_sbindir}/fdisk fdisk fdisk.${PN} 100 } -pkg_prerm_util-linux-fdisk () { +pkg_prerm_util-linux-ng-fdisk () { update-alternatives --remove fdisk fdisk.${PN} } -pkg_postinst_util-linux-mount () { +pkg_postinst_util-linux-ng-mount () { update-alternatives --install ${base_bindir}/mount mount mount.${PN} 100 } -pkg_prerm_util-linux-mount () { +pkg_prerm_util-linux-ng-mount () { update-alternatives --remove mount mount.${PN} } -pkg_postinst_util-linux-umount () { +pkg_postinst_util-linux-ng-umount () { update-alternatives --install ${base_bindir}/umount umount umount.${PN} 100 } -pkg_prerm_util-linux-umount () { +pkg_prerm_util-linux-ng-umount () { update-alternatives --remove umount umount.${PN} } -pkg_postinst_util-linux-losetup () { +pkg_postinst_util-linux-ng-losetup () { update-alternatives --install ${base_sbindir}/losetup losetup losetup.${PN} 100 } -pkg_prerm_util-linux-losetup () { +pkg_prerm_util-linux-ng-losetup () { update-alternatives --remove losetup losetup.${PN} } -pkg_postinst_util-linux-swaponoff () { +pkg_postinst_util-linux-ng-swaponoff () { update-alternatives --install ${base_sbindir}/swapoff swapoff swapoff.${PN} 100 update-alternatives --install ${base_sbindir}/swapon swapon swapon.${PN} 100 } -pkg_prerm_util-linux-swaponoff () { +pkg_prerm_util-linux-ng-swaponoff () { update-alternatives --remove swapoff swapoff.${PN} update-alternatives --remove swapon swapon.${PN} } diff --git a/packages/util-linux-ng/util-linux-ng_2.14.bb b/packages/util-linux-ng/util-linux-ng_2.14.bb index c3438425f3..ed80268e22 100644 --- a/packages/util-linux-ng/util-linux-ng_2.14.bb +++ b/packages/util-linux-ng/util-linux-ng_2.14.bb @@ -1,3 +1,3 @@ require util-linux-ng.inc -PR = "r0" +PR = "r1" -- cgit v1.2.3 From 20d09bff0ae5418929d6063a60dd90952d96e6bc Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:40:47 +0000 Subject: angstrom: prefer util-linux-ng --- conf/distro/angstrom-2008.1.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index d6354411fd..3026e6f043 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -190,7 +190,7 @@ DISTRO_EXTRA_RDEPENDS += "\ ${@base_contains("MACHINE_FEATURES", "screen", "psplash", "",d)} \ angstrom-version \ opkg-nogpg opkg-collateral ${ANGSTROM_FEED_CONFIGS} \ - util-linux-mount util-linux-umount \ + util-linux-ng-mount util-linux-ng-umount \ ${DEBUG_APPS} \ " -- cgit v1.2.3 From feba2ff72e56bde08e63f2ddb102fbe40640f544 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:41:34 +0000 Subject: task boot/base: bump PR --- packages/tasks/task-base.bb | 2 +- packages/tasks/task-boot.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb index e940038453..9c9c3e43bb 100644 --- a/packages/tasks/task-base.bb +++ b/packages/tasks/task-base.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Merge machine and distro options to create a basic machine task/package" -PR = "r69" +PR = "r70" inherit task diff --git a/packages/tasks/task-boot.bb b/packages/tasks/task-boot.bb index 5663ff5a3d..cb4db34e64 100644 --- a/packages/tasks/task-boot.bb +++ b/packages/tasks/task-boot.bb @@ -1,5 +1,5 @@ DESCRIPTION = "Basic task to get a device booting" -PR = "r43" +PR = "r44" inherit task -- cgit v1.2.3 From 095b99761d4480e379c5fae3944913898318fdfc Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:42:41 +0000 Subject: angstrom led config: move to an earlier slot in init --- packages/angstrom/angstrom-led-config.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/angstrom/angstrom-led-config.bb b/packages/angstrom/angstrom-led-config.bb index a0a29cbb3c..83f5a1211b 100644 --- a/packages/angstrom/angstrom-led-config.bb +++ b/packages/angstrom/angstrom-led-config.bb @@ -1,11 +1,12 @@ DESCRIPTION = "Configuration files for runtime LED configuration" #PV = "${DISTRO_VERSION}" -PR = "r0" +PR = "r1" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit update-rc.d INITSCRIPT_NAME = "led-config" +INITSCRIPT_PARAMS = "defaults 05" SRC_URI = "file://led-config \ file://leds \ -- cgit v1.2.3 From 171f351e8305b1e88f08becef67454db45f818f5 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:42:53 +0000 Subject: beagleboard demo image: ship led config --- packages/images/beagleboard-demo-image.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/images/beagleboard-demo-image.bb b/packages/images/beagleboard-demo-image.bb index 6ac22916dd..e4b2427063 100644 --- a/packages/images/beagleboard-demo-image.bb +++ b/packages/images/beagleboard-demo-image.bb @@ -15,7 +15,8 @@ IMAGE_INSTALL = "\ angstrom-gpe-task-settings \ ${ANGSTROM_EXTRA_INSTALL} \ angstrom-zeroconf-audio \ - gpe-scap \ + angstrom-led-config \ + gpe-scap \ psplash \ e-wm exhibit \ xterm xmms epiphany-firefox-replacement \ -- cgit v1.2.3 From 508bc941a88d1c313d1086f73d45bdb05ba0bdfd Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 09:49:12 +0000 Subject: gnome-icon-theme: icon-naming-utils -> icon-naming-utils-native --- packages/gnome/gnome-icon-theme_2.22.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gnome/gnome-icon-theme_2.22.0.bb b/packages/gnome/gnome-icon-theme_2.22.0.bb index 9b6828ac73..d458d9ba74 100644 --- a/packages/gnome/gnome-icon-theme_2.22.0.bb +++ b/packages/gnome/gnome-icon-theme_2.22.0.bb @@ -1,6 +1,6 @@ LICENSE = "GPL" SECTION = "x11/gnome" -DEPENDS = "icon-naming-utils glib-2.0 intltool-native" +DEPENDS = "icon-naming-utils-native glib-2.0 intltool-native" RDEPENDS = "hicolor-icon-theme" FILES_${PN} += "${datadir}/*" -- cgit v1.2.3 From d348ab98fd09c808bf208b4d1de41ae229a3b66e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 11:00:41 +0000 Subject: poppler: add 0.8.4 --- packages/poppler/poppler_0.8.4.bb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/poppler/poppler_0.8.4.bb diff --git a/packages/poppler/poppler_0.8.4.bb b/packages/poppler/poppler_0.8.4.bb new file mode 100644 index 0000000000..3c1ec00183 --- /dev/null +++ b/packages/poppler/poppler_0.8.4.bb @@ -0,0 +1,6 @@ +require poppler.inc + +PR = "r0" + +EXTRA_OECONF_append = " --disable-abiword-output " + -- cgit v1.2.3 From cec0c607a1ac0fff61c4c8abb73a501736191f8b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 11:01:20 +0000 Subject: epdfview: apply fixes, clean out old versions --- packages/epdfview/epdfview_0.1.2.bb | 15 - packages/epdfview/epdfview_0.1.3.bb | 15 - packages/epdfview/epdfview_0.1.4.bb | 15 - packages/epdfview/epdfview_0.1.5.bb | 15 - packages/epdfview/epdfview_0.1.6.bb | 6 +- packages/epdfview/files/.mtn2git_empty | 0 packages/epdfview/files/poppler8.diff | 10395 +++++++++++++++++++++++++++++++ 7 files changed, 10399 insertions(+), 62 deletions(-) delete mode 100644 packages/epdfview/epdfview_0.1.2.bb delete mode 100644 packages/epdfview/epdfview_0.1.3.bb delete mode 100644 packages/epdfview/epdfview_0.1.4.bb delete mode 100644 packages/epdfview/epdfview_0.1.5.bb create mode 100644 packages/epdfview/files/.mtn2git_empty create mode 100644 packages/epdfview/files/poppler8.diff diff --git a/packages/epdfview/epdfview_0.1.2.bb b/packages/epdfview/epdfview_0.1.2.bb deleted file mode 100644 index 92d4e4c30c..0000000000 --- a/packages/epdfview/epdfview_0.1.2.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "A minimal PDF viewer based on gtk and poppler" -HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/" -LICENSE = "GPLv2" -SECTION = "x11/applications" -DEPENDS = "poppler gtk+" -PR="r3" - -SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2" - -inherit autotools - -do_compile_append () { - sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop -} - diff --git a/packages/epdfview/epdfview_0.1.3.bb b/packages/epdfview/epdfview_0.1.3.bb deleted file mode 100644 index 397bef6fe8..0000000000 --- a/packages/epdfview/epdfview_0.1.3.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "A minimal PDF viewer based on gtk and poppler" -HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/" -LICENSE = "GPLv2" -SECTION = "x11/applications" -DEPENDS = "poppler gtk+" -PR="r2" - -SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2" - -inherit autotools - -do_compile_append () { - sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop -} - diff --git a/packages/epdfview/epdfview_0.1.4.bb b/packages/epdfview/epdfview_0.1.4.bb deleted file mode 100644 index 397bef6fe8..0000000000 --- a/packages/epdfview/epdfview_0.1.4.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "A minimal PDF viewer based on gtk and poppler" -HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/" -LICENSE = "GPLv2" -SECTION = "x11/applications" -DEPENDS = "poppler gtk+" -PR="r2" - -SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2" - -inherit autotools - -do_compile_append () { - sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop -} - diff --git a/packages/epdfview/epdfview_0.1.5.bb b/packages/epdfview/epdfview_0.1.5.bb deleted file mode 100644 index dee0e3aca1..0000000000 --- a/packages/epdfview/epdfview_0.1.5.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "A minimal PDF viewer based on gtk and poppler" -HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/" -LICENSE = "GPLv2" -SECTION = "x11/applications" -DEPENDS = "poppler gtk+ cups" -PR="r2" - -SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2" - -inherit autotools - -do_compile_append () { - sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop -} - diff --git a/packages/epdfview/epdfview_0.1.6.bb b/packages/epdfview/epdfview_0.1.6.bb index dee0e3aca1..3cf2e5f026 100644 --- a/packages/epdfview/epdfview_0.1.6.bb +++ b/packages/epdfview/epdfview_0.1.6.bb @@ -3,9 +3,11 @@ HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/" LICENSE = "GPLv2" SECTION = "x11/applications" DEPENDS = "poppler gtk+ cups" -PR="r2" +PR = "r3" -SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2" +SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2 \ + file://poppler8.diff;patch=1 \ + " inherit autotools diff --git a/packages/epdfview/files/.mtn2git_empty b/packages/epdfview/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/epdfview/files/poppler8.diff b/packages/epdfview/files/poppler8.diff new file mode 100644 index 0000000000..e4c4790c6d --- /dev/null +++ b/packages/epdfview/files/poppler8.diff @@ -0,0 +1,10395 @@ +diff -Nurd epdfview-0.1.6-svn/configure.ac epdfview/configure.ac +--- epdfview-0.1.6-svn/configure.ac 2008-07-13 12:57:47.593198000 +0200 ++++ epdfview/configure.ac 2008-07-13 12:55:55.143198000 +0200 +@@ -27,7 +27,7 @@ + + dnl Check for libraries + POPPLER_REQUIRED=0.5.0 +-GLIB_REQUIRED=2.6.0 ++GLIB_REQUIRED=2.8.0 + GTK2_REQUIRED=2.6.0 + + PKG_CHECK_MODULES([GLIB], [gthread-2.0 >= $GLIB_REQUIRED]) +@@ -44,6 +44,14 @@ + if test "x$have_poppler_052" = "xyes"; then + AC_DEFINE([HAVE_POPPLER_0_5_2], [1], [Define to 1 if you have Poppler version 0.5.2 or higher.]) + fi ++PKG_CHECK_EXISTS([poppler-glib >= 0.6], [have_poppler_060=yes]) ++if test "x$have_poppler_060" = "xyes"; then ++ AC_DEFINE([HAVE_POPPLER_0_6_0], [1], [Define to 1 if you have Poppler version 0.6.0 or higher.]) ++fi ++PKG_CHECK_EXISTS([poppler-glib >= 0.8], [have_poppler_080=yes]) ++if test "x$have_poppler_080" = "xyes"; then ++ AC_DEFINE([HAVE_POPPLER_0_8_0], [1], [Define to 1 if you have Poppler version 0.8.0 or higher.]) ++fi + + EPDFVIEW_PATH_CUPS([CUPS], [have_cups=yes]) + AM_CONDITIONAL(cups_printing, test "x$have_cups" = "xyes") +diff -Nurd epdfview-0.1.6-svn/data/epdfview-ui.xml epdfview/data/epdfview-ui.xml +--- epdfview-0.1.6-svn/data/epdfview-ui.xml 2008-07-13 12:57:47.093198000 +0200 ++++ epdfview/data/epdfview-ui.xml 2008-07-13 12:55:54.263198000 +0200 +@@ -11,6 +11,9 @@ + + + ++ ++ ++ + + + +@@ -38,7 +41,7 @@ + + + +- ++ + + + +@@ -49,7 +52,12 @@ + + + ++ ++ ++ + + + ++ ++ + +diff -Nurd epdfview-0.1.6-svn/m4/Makefile.am epdfview/m4/Makefile.am +--- epdfview-0.1.6-svn/m4/Makefile.am 2008-07-13 12:57:43.883198000 +0200 ++++ epdfview/m4/Makefile.am 2008-07-13 12:55:50.603198000 +0200 +@@ -1,2 +1,2 @@ + # Process this file with automake to produce a Makefile.in file. +-EXTRA_DIST = codeset.m4 gettext.m4 glibc2.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 cppunit.m4 cups.m4 ++EXTRA_DIST = codeset.m4 gettext.m4 glibc2.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 pkg.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 cppunit.m4 cups.m4 +diff -Nurd epdfview-0.1.6-svn/m4/pkg.m4 epdfview/m4/pkg.m4 +--- epdfview-0.1.6-svn/m4/pkg.m4 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/m4/pkg.m4 2008-07-13 12:55:50.593198000 +0200 +@@ -0,0 +1,157 @@ ++# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- ++# ++# Copyright © 2004 Scott James Remnant . ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++# General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++# ++# As a special exception to the GNU General Public License, if you ++# distribute this file as part of a program that contains a ++# configuration script generated by Autoconf, you may include it under ++# the same distribution terms that you use for the rest of that program. ++ ++# PKG_PROG_PKG_CONFIG([MIN-VERSION]) ++# ---------------------------------- ++AC_DEFUN([PKG_PROG_PKG_CONFIG], ++[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) ++m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) ++AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl ++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then ++ AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) ++fi ++if test -n "$PKG_CONFIG"; then ++ _pkg_min_version=m4_default([$1], [0.9.0]) ++ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) ++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ PKG_CONFIG="" ++ fi ++ ++fi[]dnl ++])# PKG_PROG_PKG_CONFIG ++ ++# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) ++# ++# Check to see whether a particular set of modules exists. Similar ++# to PKG_CHECK_MODULES(), but does not set variables or print errors. ++# ++# ++# Similar to PKG_CHECK_MODULES, make sure that the first instance of ++# this or PKG_CHECK_MODULES is called, or make sure to call ++# PKG_CHECK_EXISTS manually ++# -------------------------------------------------------------- ++AC_DEFUN([PKG_CHECK_EXISTS], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl ++if test -n "$PKG_CONFIG" && \ ++ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then ++ m4_ifval([$2], [$2], [:]) ++m4_ifvaln([$3], [else ++ $3])dnl ++fi]) ++ ++ ++# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) ++# --------------------------------------------- ++m4_define([_PKG_CONFIG], ++[if test -n "$PKG_CONFIG"; then ++ if test -n "$$1"; then ++ pkg_cv_[]$1="$$1" ++ else ++ PKG_CHECK_EXISTS([$3], ++ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], ++ [pkg_failed=yes]) ++ fi ++else ++ pkg_failed=untried ++fi[]dnl ++])# _PKG_CONFIG ++ ++# _PKG_SHORT_ERRORS_SUPPORTED ++# ----------------------------- ++AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi[]dnl ++])# _PKG_SHORT_ERRORS_SUPPORTED ++ ++ ++# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], ++# [ACTION-IF-NOT-FOUND]) ++# ++# ++# Note that if there is a possibility the first call to ++# PKG_CHECK_MODULES might not happen, you should be sure to include an ++# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac ++# ++# ++# -------------------------------------------------------------- ++AC_DEFUN([PKG_CHECK_MODULES], ++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl ++AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl ++AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl ++ ++pkg_failed=no ++AC_MSG_CHECKING([for $1]) ++ ++_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) ++_PKG_CONFIG([$1][_LIBS], [libs], [$2]) ++ ++m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS ++and $1[]_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details.]) ++ ++if test $pkg_failed = yes; then ++ _PKG_SHORT_ERRORS_SUPPORTED ++ if test $_pkg_short_errors_supported = yes; then ++ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` ++ else ++ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ++ ++ ifelse([$4], , [AC_MSG_ERROR(dnl ++[Package requirements ($2) were not met: ++ ++$$1_PKG_ERRORS ++ ++Consider adjusting the PKG_CONFIG_PATH environment variable if you ++installed software in a non-standard prefix. ++ ++_PKG_TEXT ++])], ++ [AC_MSG_RESULT([no]) ++ $4]) ++elif test $pkg_failed = untried; then ++ ifelse([$4], , [AC_MSG_FAILURE(dnl ++[The pkg-config script could not be found or is too old. Make sure it ++is in your PATH or set the PKG_CONFIG environment variable to the full ++path to pkg-config. ++ ++_PKG_TEXT ++ ++To get pkg-config, see .])], ++ [$4]) ++else ++ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS ++ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS ++ AC_MSG_RESULT([yes]) ++ ifelse([$3], , :, [$3]) ++fi[]dnl ++])# PKG_CHECK_MODULES +diff -Nurd epdfview-0.1.6-svn/po/ca.po epdfview/po/ca.po +--- epdfview-0.1.6-svn/po/ca.po 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/ca.po 2008-07-13 12:55:55.073198000 +0200 +@@ -8,7 +8,7 @@ + msgstr "" + "Project-Id-Version: ePDFView 0.1.4\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" + "PO-Revision-Date: 2006-04-12 21:17+0200\n" + "Last-Translator: Jordi Fita \n" + "Language-Team: Catalan \n" +@@ -76,11 +76,11 @@ + msgid "Unknown error (%d)." + msgstr "Error desconegut (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[FITXER] - mostra documents PDF" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "Viso de PDF" + +@@ -94,7 +94,7 @@ + msgid "Loading file %s..." + msgstr "Obrint fitxer %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "de %d" +@@ -104,39 +104,47 @@ + msgid "Saving document to %s..." + msgstr "Desant el document a %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "Error carregant fitxer" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "La contrsenya que heu donat no és vàlida per aquest fitxer." + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" + msgstr "Error desant fitxer" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Carregant..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "Escala de gris" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "Desocupada" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "Parada" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "Processada" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "Desconegut" + +@@ -153,246 +161,262 @@ + msgid "Find:" + msgstr "Cercar:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_Fitxer" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_Edita" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_Visualitza" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "Vé_s" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "A_juda" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "_Obre" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Obre un document PDF" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "_Actualitza" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "Torna a obrir el document actual" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "_Desa una còpia..." + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" + msgstr "Desa una còpia del document actual" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "_Imprimeix" + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" + msgstr "Imprimeix el document actual" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "_Tanca" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Tanca aquesta finestra" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_Cerca" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "Cerca una paraula en el document" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "Preferències" + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "Canvia les preferències de l'aplicació" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" + msgstr "_Amplia" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "Amplia el document" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" + msgstr "_Redueix" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "Redueix el document" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" + msgstr "Gira a la _dreta" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "Gira el document 90 graus en el sentit de les agulles del rellotge" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" + msgstr "Gira a l'es_querra" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "" + "Gira el document 90 grays en el sentit contrari al de les agulles del " + "rellotge" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "_Primera pàgina" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Va a la primera pàgina" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "_Següent pàgina" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Va a la següent pàgina" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "Pàgina _anterior" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Va a la pàgina anterior" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "_Darreta pàgina" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Va a la darrera pàgina" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_Quant a" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Mostra els crèdits de l'aplicació" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" + msgstr "" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" + msgstr "" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "Mostra la barra d'_eines" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Mostra o amaga la barra d'eines" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" + msgstr "Mostra la barra d'e_stat" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Mostra o amaga la barra d'estat" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "Mostra l'í_ndex" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "Mostra o amaga l'índex del document" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "En_caixa" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "Fa que el document ompli la finestra" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "Encaixa l'a_mplada" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "Fa que el document ompli l'amplada de la finestra" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "Obre un fitxer PDF" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "Fitxers en Format de Document Portable (PDF)" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "Tots els fitxers" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "Contrasenya" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" + msgstr "Desa un fitxer PDF" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Pàgina" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "de 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Ãndex" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "Error construïnt l'administrado de UI: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "Un visor de PDF lleuger" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -404,7 +428,7 @@ + "publicada per la Free Software Foundation; ja sigui la versió 2 de la\n" + "Llicència o bé (si ho preferiu) qualsevol altra versió posterior.\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -416,7 +440,7 @@ + "COMERCIABILITAT o ADEQUACIÓ PER UN PROPÃ’SIT PARTICULAR. Vegeu la\n" + "Llicència Pública General GNU per obtenir-ne més detalls.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -426,11 +450,11 @@ + "juntament amb ePDFView; en cas contrari, escriviu a la Free Software\n" + "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "Jordi Fita " + +diff -Nurd epdfview-0.1.6-svn/po/cs.po epdfview/po/cs.po +--- epdfview-0.1.6-svn/po/cs.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/cs.po 2008-07-13 12:55:55.043198000 +0200 +@@ -0,0 +1,604 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR Emma's Software ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: ePDFView 0.1.6\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2008-04-09 14:06+0100\n" ++"Last-Translator: Dragonlord \n" ++"Language-Team: Czech \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=utf-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "Nebyly nalezeny žádné výsledky!" ++ ++#: src/FindPter.cxx:195 ++#, fuzzy, c-format ++msgid "Searching in page %d of %d..." ++msgstr "Hledám na stranÄ› od %d do %d..." ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "Žádná chyba." ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "Soubor nenalezen." ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "Nelze naÄíst katalog stran." ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "PDF soubor je poÅ¡kozen a nelze jej opravit." ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "Soubor je zakódovaný a heslo nebylo správnÄ› nebo vůbec vloženo." ++ ++#: src/IDocument.cxx:97 ++#, fuzzy ++msgid "Nonexistent or invalid highlight file." ++msgstr "Soubor zvýraznÄ›ní neexistuje nebo je neplatný." ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "Neplatná tiskárna." ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "Chyba bÄ›hem tisku." ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "PDF soubor nedovoluje tuto operaci." ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "Chybný poÄet stran." ++ ++#: src/IDocument.cxx:112 ++#, fuzzy ++msgid "File I/O error." ++msgstr "I/O chyba souboru." ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "Neznámá chyba (%d)." ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[SOUBOR] - prohlížet PDF dokumenty" ++ ++#: src/main.cxx:72 src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "ProhlížeÄ PDF souborů" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "Nahrávám znovu soubor %s..." ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "NaÄítám soubor %s..." ++ ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, fuzzy, c-format ++msgid "of %d" ++msgstr "z %d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "Ukládám soubor do %s..." ++ ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "Chyba naÄítání souboru" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "Vložené heslo není platné pro tento soubor." ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "Chyba ukládání souboru" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "NaÄítám..." ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "Odstíny Å¡edi" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "Zahálející" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "Zastavený" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "Zpracovávám" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "Neznámý" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"Chyba naÄítání dokumentu '%s'.\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "Hledat:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "_Soubor" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "_Editovat" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "_Pohled" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "_Jít na" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "_NápovÄ›da" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "_Otevřít" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "Otevřít PDF dokument" ++ ++#: src/gtk/MainView.cxx:99 ++#, fuzzy ++msgid "_Reload" ++msgstr "_Aktualizovat" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "Aktualizuje souÄasný dokument" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "_Uložit jako..." ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "Uloží kopii souÄasného dokumentu" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "_Tisk..." ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "Vytiskne souÄasný dokument" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "_Zavřít" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "ZavÅ™e toto okno" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "_Hledat" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "Hledání zadaných výrazů v dokumentu" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "Nastavení..." ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "ZmÄ›ny v nastavení aplikace" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "Z_vÄ›tÅ¡it" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "ZvÄ›tší náhled dokumentu" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "Z_menÅ¡it" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "Zmenší náhled dokumentu" ++ ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "OtoÄit vp_ravo" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "OtoÄí dokument o 90 stupňů po smÄ›ru hodinových ruÄiÄek" ++ ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "OtoÄit v_levo" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "OtoÄí dokument o 90 stupňů proti smÄ›ru hodinových ruÄiÄek" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "_První stranu" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "PÅ™eskoÄit na první stranu" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "_Další stranu" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "PÅ™ejde na další stranu" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "PÅ™_edchozí stranu" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "PÅ™ejde na pÅ™edchozí stranu" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "Po_slední stranu" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "PÅ™eskoÄí na poslední stranu" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "_O programu" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "Zobrazí informace o aplikaci" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "Na celou obrazovku" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "PÅ™epne použití celé obrazovky" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "Zobrazit panel i_kon" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "Zobrazí nebo skryje panel s ikonami" ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "Zobrazit _informaÄní panel" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "Zobrazí nebo skryje spodní informaÄní panel" ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "Zobrazit os_novu" ++ ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "Zobrazí nebo skryje osnovu dokumentu" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "PÅ™izpůsobit _do okna" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "PÅ™izpůsobí zvÄ›tÅ¡ení dokumentu velikosti okna" ++ ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "PÅ™izpůsobit šíř_ce okna" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "PÅ™izpůsobí zvÄ›tÅ¡ení dokumentu šířce okna" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "Otevřít PDF soubor" ++ ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "Soubory PDF (Portable Document Format)" ++ ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "VÅ¡echny soubory" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "Heslo" ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "Uložit PDF soubor" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "Strana" ++ ++#: src/gtk/MainView.cxx:868 ++#, fuzzy ++msgid "of 0" ++msgstr "z 0" ++ ++#: src/gtk/MainView.cxx:921 ++#, fuzzy ++msgid "Index" ++msgstr "Osnova" ++ ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 ++#, fuzzy, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "Chyba sestavení UI manažera: %s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "NenároÄný prohlížeÄ PDF souborů" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "" ++"ePDFView je svobodný software; může být distribuován a/nebo modifikován\n" ++"za podmínek GNU vÅ¡eobecné veÅ™ejné licence podle znÄ›ní publikovaného\n" ++"Free Software Foundation; buÄ ve verzi 2 této licence, nebo\n" ++"(podle vlastního uvážení) jakékoliv novÄ›jší verze.\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "" ++"ePDFView je distribuován s úmyslem být užiteÄný,\n" ++"ovÅ¡em BEZ JAKÉKOLI ZÃRUKY; stejnÄ› tak bez zahrnuté záruky\n" ++"PRODEJNOSTI nebo VHODNOSTI NA URÄŒITà ÚKOL. Podrobnosti\n" ++"lze nalézt v GNU vÅ¡eobecné veÅ™ejné licenci.\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "" ++"S ePDFView musí být dodávána kopie GNU vÅ¡eobecné veÅ™ejné licence;\n" ++"pokud tomu tak není, obraÅ¥te se na Free Software Foundation,Inc.,\n" ++"59 temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++#, fuzzy ++msgid "translator-credits" ++msgstr "Dragonlord " ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "Konfigurace" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "Externí příkazy" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "We_bový prohlížeÄ:" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "Poznámka: %s bude nahrazeno URI." ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "Tisk" ++ ++#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "Tiskárna" ++ ++#: src/gtk/PrintView.cxx:74 ++#, fuzzy ++msgid "Job" ++msgstr "Úkol" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "Papír" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "Tisk oblasti" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "VÅ¡_e" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "VýbÄ›_r:" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "Sada stran" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "VÅ¡ech_ny" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "L_iché strany" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "S_udé strany" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "Kopie" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "_PoÄet kopií:" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "SeÅ™adi_t" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "Papír a rozmístÄ›ní" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "_Velikost papíru:" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "_Orientace strany:" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "Ro_zmístÄ›ní:" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "Výstup" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "_Mód:" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "_RozliÅ¡ení:" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "Stav" ++ ++#: src/gtk/PrintView.cxx:677 ++#, fuzzy ++msgid "Jobs" ++msgstr "Úkoly" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "UmístÄ›ní" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "Jednoduché" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "2 strany na list" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "4 strany na list" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "Najít _další" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "Najít _pÅ™edchozí" +diff -Nurd epdfview-0.1.6-svn/po/de.po epdfview/po/de.po +--- epdfview-0.1.6-svn/po/de.po 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/de.po 2008-07-13 12:55:55.083198000 +0200 +@@ -2,15 +2,16 @@ + # Copyright (C) 2006 Emma's Software + # This file is distributed under the same license as the epdfview package. + # Moritz Heiber , 2006. ++# Enrico Tröger , 2007. + # + msgid "" + msgstr "" +-"Project-Id-Version: ePDFView 0.1.4\n" ++"Project-Id-Version: ePDFView 0.1.6\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" +-"PO-Revision-Date: 2006-05-13 00:40+0100\n" +-"Last-Translator: Moritz Heiber \n" +-"Language-Team: German \n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2007-04-16 15:33+0100\n" ++"Last-Translator: Enrico Tröger \n" ++"Language-Team: German\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +@@ -75,11 +76,11 @@ + msgid "Unknown error (%d)." + msgstr "Unbekannter Fehler (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[DATEI] - PDF Dateien anschauen" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "PDF Betrachter" + +@@ -93,53 +94,59 @@ + msgid "Loading file %s..." + msgstr "Lade Datei %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 +-#, fuzzy, c-format ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, c-format + msgid "of %d" +-msgstr "%d von %d" ++msgstr "von %d" + + #: src/MainPter.cxx:588 + #, c-format + msgid "Saving document to %s..." +-msgstr "" ++msgstr "Speiche Dokument als %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "Fehler beim Laden der Datei" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "Das angegebene Passwort ist ungültig für dieses Dokument." + +-#: src/MainPter.cxx:947 +-#, fuzzy ++#: src/MainPter.cxx:953 + msgid "Error Saving File" +-msgstr "Fehler beim Laden der Datei" ++msgstr "Fehler beim Speichern der Datei." + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Lade..." + +-#: src/PrintPter.cxx:295 +-msgid "Grayscale" ++#: src/PrintPter.cxx:252 ++msgid "A4" + msgstr "" + +-#: src/PrintPter.cxx:395 +-#, fuzzy ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "Graustufen" ++ ++#: src/PrintPter.cxx:409 + msgid "Idle" +-msgstr "Inhalt" ++msgstr "Untätig" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" +-msgstr "" ++msgstr "Angehalten" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" +-msgstr "" ++msgstr "Drucke" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" +-msgstr "" ++msgstr "Unbekannt" + + #: src/PDFDocument.cxx:272 + #, c-format +@@ -154,248 +161,260 @@ + msgid "Find:" + msgstr "Suche:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_Datei" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_Bearbeiten" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_Ansicht" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "_Gehe zu" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "_Hilfe" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "_Öffnen" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Öffne ein PDF Dokument" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "_Neu laden" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "Lade das Dokument neu" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." +-msgstr "" ++msgstr "_Kopie speichern unter" + +-#: src/gtk/MainView.cxx:102 +-#, fuzzy ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" +-msgstr "Lade das Dokument neu" ++msgstr "Speichert eine Kopie des Dokuments" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." +-msgstr "" ++msgstr "_Drucken..." + +-#: src/gtk/MainView.cxx:107 +-#, fuzzy ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" +-msgstr "Lade das Dokument neu" ++msgstr "Druckt das Dokument" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "_Schließen" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Schließe dieses Fenster" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_Suche" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "Sucht im Dokument nach einem Wort" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." +-msgstr "" ++msgstr "Einstellungen..." + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" +-msgstr "" ++msgstr "Ändert die Programmeinstellungen" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" +-msgstr "Heranzoomen" ++msgstr "Hera_nzoomen" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "Dokument vergrößern" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" +-msgstr "Herauszoomen" ++msgstr "Hera_uszoomen" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "Dokument verkleinern" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" +-msgstr "Nach rechts rotieren" ++msgstr "Nach _rechts rotieren" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "Das Dokument um 90 Grad im Uhrzeigersinn drehen" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" +-msgstr "Nach links rotieren" ++msgstr "Nach _links rotieren" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "Das Dokument um 90 Grad gegen den Uhrzeigersinn drehen" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "_Erste Seite" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Gehe zur ersten Seite" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "_Nächste Seite" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Gehe zur ersten Seite" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "_Vorherige Seite" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Gehe zur vorherigen Seite" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "_Letzte Seite" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Gehe zur letzten Seite" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_Ãœber" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Credits anzeigen" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" +-msgstr "" ++msgstr "_Vollbild" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" +-msgstr "" ++msgstr "In Vollbildmodus umschalten" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" +-msgstr "Werkzeugleiste anzeigen" ++msgstr "_Werkzeugleiste anzeigen" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Werkzeugleiste anzeigen oder verstecken" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" +-msgstr "Statusleiste anzeigen" ++msgstr "_Statusleiste anzeigen" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Statusleiste anzeigen oder verstecken" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" +-msgstr "Ãœbersicht anzeigen" ++msgstr "Ãœ_bersicht anzeigen" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "Ãœbersicht des Dokuments anzeigen oder verstecken" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" +-msgstr "Zoom zur Fenstergröße" ++msgstr "Zoom zur _Fenstergröße" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "Zoome das Dokument bis zur Größe des Fensters heran" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" +-msgstr "Zoom zur Fensterweite" ++msgstr "Zoom zur F_ensterweite" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "Zoome das Dokument heran, bis es die Fensterbreite füllt" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "PDF Datei öffnen" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" +-msgstr "" ++msgstr "Portable Document Format (PDF) Dateien" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" +-msgstr "" ++msgstr "Alle Dateien" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "Passwort" + +-#: src/gtk/MainView.cxx:386 +-#, fuzzy ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" +-msgstr "PDF Datei öffnen" ++msgstr "PDF Datei speichern" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Seite" + +-#: src/gtk/MainView.cxx:826 +-#, fuzzy ++#: src/gtk/MainView.cxx:868 + msgid "of 0" +-msgstr "0 von 0" ++msgstr "von 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Inhalt" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "Fehler beim Erstellen des UI Managers: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "Ein kleiner, schneller PDF Betrachter" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -407,7 +426,7 @@ + "Lizenz, wie von der Free Software Foundation herausgegeben,\n" + "beachten; Entweder Version 2 oder jede nächsthöhere Version.\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -420,7 +439,7 @@ + "FUNKTION mit ein. Für Details wird auf die GNU General Public Lizenz\n" + "verwiesen.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -434,152 +453,153 @@ + "Boston, MA 02111-1307\n" + "USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" +-msgstr "Moritz Heiber " ++msgstr "" ++"Moritz Heiber ,\n" ++"Enrico Tröger " + + #: src/gtk/PreferencesView.cxx:32 + msgid "Preferences" +-msgstr "" ++msgstr "Einstellungen" + + #: src/gtk/PreferencesView.cxx:46 + msgid "External Commands" +-msgstr "" ++msgstr "Externe Befehle" + + #: src/gtk/PreferencesView.cxx:105 + msgid "Web _Browser:" +-msgstr "" ++msgstr "_Webbrowser:" + + #: src/gtk/PreferencesView.cxx:118 + #, c-format + msgid "Note: %s will be replaced by the URI." +-msgstr "" ++msgstr "Hinweis: %s wird durch die URL ersetzt." + + #: src/gtk/PrintView.cxx:51 + msgid "Print" +-msgstr "" ++msgstr "Drucken" + + #: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 + msgid "Printer" +-msgstr "" ++msgstr "Drucker" + + #: src/gtk/PrintView.cxx:74 + msgid "Job" +-msgstr "" ++msgstr "Auftrag" + + #: src/gtk/PrintView.cxx:79 +-#, fuzzy + msgid "Paper" +-msgstr "Seite" ++msgstr "Papier" + + #: src/gtk/PrintView.cxx:359 + msgid "Print Range" +-msgstr "" ++msgstr "Druckbereich" + + #: src/gtk/PrintView.cxx:377 + msgid "_All pages" +-msgstr "" ++msgstr "_Alle Seiten" + + #: src/gtk/PrintView.cxx:380 + msgid "_Range:" +-msgstr "" ++msgstr "_Bereich:" + + #: src/gtk/PrintView.cxx:392 + msgid "Page Set" +-msgstr "" ++msgstr "Seiteneinstellungen" + + #: src/gtk/PrintView.cxx:408 + msgid "A_ll pages" +-msgstr "" ++msgstr "A_lle Seiten" + + #: src/gtk/PrintView.cxx:412 + msgid "O_dd pages" +-msgstr "" ++msgstr "_Ungerade Seiten" + + #: src/gtk/PrintView.cxx:416 + msgid "_Even pages" +-msgstr "" ++msgstr "_Gerade Seiten" + + #: src/gtk/PrintView.cxx:420 + msgid "Copies" +-msgstr "" ++msgstr "Kopien" + + #: src/gtk/PrintView.cxx:437 + msgid "N_umber of copies:" +-msgstr "" ++msgstr "An_zahl der Kopien:" + + #: src/gtk/PrintView.cxx:444 + msgid "C_ollate" +-msgstr "" ++msgstr "Kopien _sortieren" + + #: src/gtk/PrintView.cxx:465 + msgid "Paper and Layout" +-msgstr "" ++msgstr "Papier und Anordnung" + + #: src/gtk/PrintView.cxx:482 + msgid "Paper _Size:" +-msgstr "" ++msgstr "_Papiergröße:" + + #: src/gtk/PrintView.cxx:508 + msgid "Page _orientation:" +-msgstr "" ++msgstr "_Seitenausrichtung:" + + #: src/gtk/PrintView.cxx:539 + msgid "_Layout:" +-msgstr "" ++msgstr "A_nordnung:" + + #: src/gtk/PrintView.cxx:568 + msgid "Output" +-msgstr "" ++msgstr "Ausgabe" + + #: src/gtk/PrintView.cxx:585 + msgid "_Mode:" +-msgstr "" ++msgstr "_Modus: " + + #: src/gtk/PrintView.cxx:613 + msgid "_Resolution:" +-msgstr "" ++msgstr "A_uflösung:" + + #: src/gtk/PrintView.cxx:668 + msgid "State" +-msgstr "" ++msgstr "Status" + + #: src/gtk/PrintView.cxx:677 + msgid "Jobs" +-msgstr "" ++msgstr "Aufträge" + + #: src/gtk/PrintView.cxx:686 + msgid "Location" +-msgstr "" ++msgstr "Standort" + + #: src/gtk/PrintView.cxx:717 + msgid "Plain" +-msgstr "" ++msgstr "Einfach" + + #: src/gtk/PrintView.cxx:723 + msgid "2 pages in 1" +-msgstr "" ++msgstr "2 Seiten auf Eine" + + #: src/gtk/PrintView.cxx:729 + msgid "4 pages in 1" +-msgstr "" ++msgstr "4 Seiten auf Eine" + + #: src/gtk/PrintView.cxx:744 + msgid "Portrait" +-msgstr "" ++msgstr "Hochformat" + + #: src/gtk/PrintView.cxx:750 + msgid "Landscape" +-msgstr "" ++msgstr "Querformat" + + #: src/gtk/StockIcons.cxx:40 + msgid "Find _Next" +-msgstr "Suche vorwärts" ++msgstr "Suche _vorwärts" + + #: src/gtk/StockIcons.cxx:41 + msgid "Find _Previous" +-msgstr "Suche rückwärts" ++msgstr "Suche _rückwärts" +diff -Nurd epdfview-0.1.6-svn/po/el.po epdfview/po/el.po +--- epdfview-0.1.6-svn/po/el.po 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/el.po 2008-07-13 12:55:55.083198000 +0200 +@@ -7,7 +7,7 @@ + msgstr "" + "Project-Id-Version: ePDFView 0.1.6\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" + "PO-Revision-Date: 2006-11-10 16:55+0200\n" + "Last-Translator: Stavros Giannouris \n" + "Language-Team: Greek \n" +@@ -77,11 +77,11 @@ + msgid "Unknown error (%d)." + msgstr "Άγνωστο σφάλμα (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[ΑΡΧΕΙΟ] - Ï€Ïοβολή εγγÏάφου PDF" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "ΕφαÏμογή ΠÏοβολής PDF" + +@@ -95,7 +95,7 @@ + msgid "Loading file %s..." + msgstr "ΦόÏτωση αÏχείου %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "από %d" +@@ -105,39 +105,47 @@ + msgid "Saving document to %s..." + msgstr "Αποθήκευση εγγÏάφου στο %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "Σφάλμα φόÏτωσης αÏχείου" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "Ο κωδικός Ï€Ïόσβασης που εισάγατε δεν είναι έγκυÏος γι' αυτό το αÏχείο." + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" + msgstr "Σφάλμα αποθήκευσης αÏχείου" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Γίνεται φόÏτωση..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "Κλίμακα του γκÏι" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "ΑδÏανής" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "Διακόπηκε" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "ΕπεξεÏγασία" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "Άγνωστο" + +@@ -154,244 +162,260 @@ + msgid "Find:" + msgstr "ΕÏÏεση:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_ΑÏχείο" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_ΕπεξεÏγασία" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_ΠÏοβολή" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "_Μετάβαση" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "_Βοήθεια" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "Άν_οιγμα" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Άνοιγμα εγγÏάφου PDF" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "Α_νανέωση" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "Ανανέωση Ï„Ïέχοντος εγγÏάφου" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "Απο_θήκευση ενός αντιγÏάφου..." + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" + msgstr "Αποθήκευση ενός αντιγÏάφου για το Ï„Ïέχον έγγÏαφο" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "_ΕκτÏπωση..." + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" + msgstr "ΕκτÏπωση Ï„Ïέχοντος εγγÏάφου" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "_Κλείσιμο" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Κλείσιμο Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… παÏαθÏÏου" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_ΕÏÏεση" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "ΕÏÏεση μια λέξης στο έγγÏαφο" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "ΠÏοτιμήσεις..." + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "Αλλαγή Ï€Ïοτιμήσεων της εφαÏμογής" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" + msgstr "_Μεγέθυνση" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "Μεγέθυνση εγγÏάφου" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" + msgstr "Σ_μίκÏυνση" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "ΣμίκÏυνση εγγÏάφου" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" + msgstr "ΠεÏιστÏοφή _δεξιά" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "ΠεÏιστÏοφή του εγγÏάφου 90 μοίÏες δεξιόστÏοφα" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" + msgstr "ΠεÏιστÏοφή _αÏιστεÏά" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "ΠεÏιστÏοφή του εγγÏάφου 90 μοίÏες αÏιστεÏόστÏοφα" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "Π_Ïώτη σελίδα" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Μετάβαση στην Ï€Ïώτη σελίδα" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "_Επόμενη Σελίδα" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Μετάβαση στην επόμενη σελίδα" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "ΠÏοη_γοÏμενη Σελίδα" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Μετάβαση στην Ï€ÏοηγοÏμενη σελίδα" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "Τε_λευταία Σελίδα" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Μετάβαση στην τελευταία σελίδα" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_ΠεÏί" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Εμφάνιση μνείας των δημιουÏγών της εφαÏμογής" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" + msgstr "_ΠλήÏης Οθόνη" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" + msgstr "Εναλλαγή της λειτουÏγία πλήÏους οθόνης" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "Εμφάνιση _εÏγαλειοθήκης" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Εμφάνιση ή απόκÏυψη της εÏγαλειοθήκης" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" + msgstr "Εμφάνιση _γÏαμμής κατάστασης" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Εμφάνιση ή απόκÏυψη της γÏαμμής κατάστασης" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "Εμφάνιση _πεÏιεχομένων" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "ΠÏοβολή ή απόκÏυψη του πεÏιγÏάμματος του εγγÏάφου" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "ΣμίκÏυνση στην _σελίδα" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "ΠÏοσαÏμογή του Ï„Ïέχοντος εγγÏάφου στο παÏάθυÏο" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "ΠÏοσαÏμογή στο _πλάτος της σελίδας" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "ΤαίÏιασμα του Ï„Ïέχοντος εγγÏάφου στο πλάτος του παÏαθÏÏου" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "Άνοιγμα αÏχείου PDF" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "ΑÏχεία PDF" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "Όλα τα αÏχεία" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "Κωδικός Ï€Ïόσβασης" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" + msgstr "Αποθήκευση αÏχείου PDF" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Σελίδα" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "από 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Κατάλογος" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "Σφάλμα δημιουÏγίας διαχειÏιστή UI: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "ΕλαφÏιά εφαÏμογή Ï€Ïοβολής PDF" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -404,7 +428,7 @@ + " Free Software Foundation, έκδοση 2 , ή \n" + "(Ï€ÏοαιÏετικά) οποιαδήποτε νεότεÏη 'έκδοση.\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -415,7 +439,7 @@ + "αλλά ΧΩΡΙΣ ΚΑΜΜΙΑ ΑΠΟΛΥΤΩΣ ΕΓΓΥΗΣΗ για συγκεκÏιμένο σκοπό.\n" + "Δείτε για πεÏισσότεÏες λεπτομέÏειες την GNU General Public License .\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -425,11 +449,11 @@ + "μαζί με το Îαυτίλο. Αν όχι γÏάψτε στο Free Software Foundation, Inc., \n" + "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "ΣταÏÏος ΓιαννοÏÏης " + +diff -Nurd epdfview-0.1.6-svn/po/es.po epdfview/po/es.po +--- epdfview-0.1.6-svn/po/es.po 2008-07-13 12:57:47.523198000 +0200 ++++ epdfview/po/es.po 2008-07-13 12:55:55.043198000 +0200 +@@ -8,7 +8,7 @@ + msgstr "" + "Project-Id-Version: ePDFView 0.1.4\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" + "PO-Revision-Date: 2006-04-12 21:17+0200\n" + "Last-Translator: Jordi Fita \n" + "Language-Team: Spanish \n" +@@ -76,11 +76,11 @@ + msgid "Unknown error (%d)." + msgstr "Error desconocido (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[ARCHIVO] - muestra documentos PDF" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "Visor de PDF" + +@@ -94,7 +94,7 @@ + msgid "Loading file %s..." + msgstr "Abriendo archivo %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "de %d" +@@ -104,41 +104,49 @@ + msgid "Saving document to %s..." + msgstr "Guardando el documento en %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "Error Cargando el Archivo" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "" + "La contraseña que has proporcionado no es una contraseña válida para este " + "archivo." + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" + msgstr "Error Guardando el Archivo" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Cargando..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "Escala de grises" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "Desocupada" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "Parada" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "Procesando" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "Desconocido" + +@@ -155,245 +163,261 @@ + msgid "Find:" + msgstr "Buscar:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_Archivo" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_Edición" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_Ver" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "_Ir" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "A_yuda" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "_Abrir" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Abre un documento PDF" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "_Recargar" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "Abre de nuevo el documento actual" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "_Guardar una copia..." + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" + msgstr "Guarda una copia de el documento actual" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "_Imprimir" + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" + msgstr "Imprime el documento actual" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "_Cerrar" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Cierra esta ventana" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_Buscar" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "Busca una palabra en el documento" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "Preferencias..." + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "Cambia las preferencia de la applicación" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" + msgstr "A_mpliar" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "Amplia el documento" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" + msgstr "_Reducir" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "Reduce el documento" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" + msgstr "Girar a la _derecha" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "Gira el document 90 grados en la dirección de las agujas del reloj" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" + msgstr "Gira a la _izquierda" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "" + "Gira el documento 90 grados en la dirección contraria a las agujas del reloj" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "_Primera página" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Va hacia la primera página" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "_Siguiente página" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Va hacia la siguiente página" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "Página _anterior" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Va hacia la página anterior" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "Ú_ltima página" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Va hacia la última página" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_Acerca de" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Muestra los créditos de la aplicación" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" + msgstr "" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" + msgstr "" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "Muestr al barra de _herramientas" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Muestra o esconda la barra de herramientas" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" + msgstr "Muestra la barra de _estado" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Muestra o esconde la barra de estado" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "Muestra el í_ndice" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "Muestra o esconde el índice del documento" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "Ajuste ó_ptimo" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "Hace que el documento llene la ventana" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "Ajustar al _ancho de página" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "Hace que el documento llene el ancho de la ventana" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "Abre un archivo PDF" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "Archivos en Formato de Documento Transportable (PDF)" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "Todos los archivos" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "Contraseña" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" + msgstr "Guarda un archivo PDF" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Página" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "de 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Ãndice" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "Error construiendo el administrador de IU: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "Un visor de PDF ligero" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -405,7 +429,7 @@ + "la Free Software Foundation; ya sea en su versión 2 ó (a su criterio)\n" + "en una versión posterior.\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -417,7 +441,7 @@ + "COMERCIALIDAD o IDONEIDAD PARA UN FIN DETERMINADO. Mire la \n" + "Licencia General GNU para más detalles.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -428,11 +452,11 @@ + "Inc.,\n" + "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "Jordi Fita " + +diff -Nurd epdfview-0.1.6-svn/po/fr.po epdfview/po/fr.po +--- epdfview-0.1.6-svn/po/fr.po 2008-07-13 12:57:47.523198000 +0200 ++++ epdfview/po/fr.po 2008-07-13 12:55:55.043198000 +0200 +@@ -8,7 +8,7 @@ + msgstr "" + "Project-Id-Version: ePDFView 0.1.4\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" + "PO-Revision-Date: 2006-04-19 02:00+0200\n" + "Last-Translator: \n" + "Language-Team: French <@>\n" +@@ -74,11 +74,11 @@ + msgid "Unknown error (%d)." + msgstr "Erreur inconnue (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[FICHIER] - Visualiser des documents PDF" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "Visualisateur de PDF" + +@@ -92,7 +92,7 @@ + msgid "Loading file %s..." + msgstr "Chargement du fichier %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "sur %d" +@@ -102,39 +102,47 @@ + msgid "Saving document to %s..." + msgstr "Enregistrement du document sous %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "Erreur au chargement du fichier" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "Le mot de passe que vous avez fourni est incorrect pour ce fichier." + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" +-msgstr "Erreur au chargement du fichier" ++msgstr "Erreur pendant la sauvegarde du fichier" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Chargement..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "Niveau de gris" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "En attente" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "Arrêté" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "Traitement en cours" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "Inconnu" + +@@ -151,244 +159,260 @@ + msgid "Find:" + msgstr "Rechercher :" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_Fichier" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_Edition" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_Afficher" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "A_ller à" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "Ai_de" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "_Ouvrir" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Ouvrir un document PDF" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "_Recharger" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "Recharger le document courant" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "_Enregistrer sous..." + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" +-msgstr "Recharger le document courant" ++msgstr "Sauvegarder le document courant" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "_Imprimer" + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" +-msgstr "Recharger le document courant" ++msgstr "Imprimer le document courant" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "_Fermer" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Fermer cette fenêtre" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_Rechercher" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "Rechercher un mot dans le document" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "Préférences" + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "Changer les préférences de l'application" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" + msgstr "_Agrandir" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "Elargir le document" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" + msgstr "_Réduire" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "Réduire le document" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" + msgstr "Rotation à _droite" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "Rotation de 90 degrés dans le sens horaire" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" + msgstr "Rotation à _gauche" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "Rotation de 90 degrés dans le anti-horaire" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "_Première page" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Aller à la première page" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "Page _suivante" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Aller à la page suivante" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "Page p_récédente" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Aller à la page précédente" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "_Dernière page" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Aller à la dernière page" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_A propos" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Afficher les informations sur l'application" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" + msgstr "" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" + msgstr "" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "Afficher la barre d'_outils" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Afficher/Cacher la barre d'outils" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" + msgstr "Afficher la _barre d'état" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Afficher/Cacher la barre d'état" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "Afficher l'_index" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "Afficher/Cacher l'index du document" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "Ajuster le document _dans la fenêtre" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "Ajuster le document dans la fenêtre" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "Ajuster à la largeur de la _fenêtre" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "Ajuster à la largeur de la fenêtre" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "Ouvrir un fichier PDF" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "Fichiers Portable Document Format (PDF)" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "Tous les fichiers" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "Mot de passe" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" +-msgstr "Ouvrir un fichier PDF" ++msgstr "Enregistrer un fichier PDF" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Page" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "sur 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Index" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "Erreur à la création du gestionnaire d'UI: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "Un visualisateur léger de PDF" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -401,7 +425,7 @@ + "Free Software Foundation; (version 2 ou bien toute autre version ultérieure\n" + "choisie par vous).\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -414,7 +438,7 @@ + "spécifique. Reportez-vous à la Licence Publique Générale GNU pour\n" + "plus de détails.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -425,11 +449,11 @@ + "Free Software Foundation, Inc.\n" + "59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis.\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "Mr_Moustache " + +diff -Nurd epdfview-0.1.6-svn/po/it.po epdfview/po/it.po +--- epdfview-0.1.6-svn/po/it.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/it.po 2008-07-13 12:55:55.073198000 +0200 +@@ -0,0 +1,592 @@ ++msgid "" ++msgstr "" ++"Project-Id-Version: ePDFView 0.1.6\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-03-18 20:33+0100\n" ++"PO-Revision-Date: 2008-03-18 00:00+0100\n" ++"Last-Translator: Fabio Vergnani \n" ++"Language-Team: Italian\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "Nessuna corrispondenza trovata!" ++ ++#: src/FindPter.cxx:195 ++#, c-format ++msgid "Searching in page %d of %d..." ++msgstr "Ricerca in corso in pagina %d di %d..." ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "Nessun errore." ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "File non trovato" ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "Non riesco a leggere il catalogo della pagina." ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "Il file PDF è danneggiato e non può essere recuperato." ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "" ++"Il file è criptato e la password è sbagliata oppure non è stata fornita" ++ ++#: src/IDocument.cxx:97 ++msgid "Nonexistent or invalid highlight file." ++msgstr "Il file highlight non esiste oppure non è valido" ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "Stampante non valida." ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "Errore durante la stampa" ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "Il file PDF non permette questa operazione." ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "Numero di pagina non valido." ++ ++#: src/IDocument.cxx:112 ++msgid "File I/O error." ++msgstr "Errore di Input/Output nel file." ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "Errore sconosciuto (%d)." ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[FILE] - visualizza documenti PDF" ++ ++#: src/main.cxx:72 src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "Visualizzatore PDF" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "Ricaricamento file %s..." ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "Caricamento file %s..." ++ ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, c-format ++msgid "of %d" ++msgstr "di %d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "Salvataggio documento in %s..." ++ ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "Errore nel caricamento del file" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "La password fornita non è corretta per questo file." ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "Errore nel salvataggio del file" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "Caricamento in corso..." ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "Scala di grigi" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "In attesa" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "Fermata" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "Stampa in corso" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "Sconosciuto" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"Errore nel caricamento del documento '%s'.\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "Trova:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "_File" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "_Modifica" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "_Visualizza" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "V_ai" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "A_iuto" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "_Apri" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "Apre un documento PDF" ++ ++#: src/gtk/MainView.cxx:99 ++msgid "_Reload" ++msgstr "_Ricarica" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "Ricarica il documento corrente" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "_Salva una copia..." ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "Salva una copia del documento corrente" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "Stam_pa..." ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "Stampa il documento corrente" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "_Chiudi" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "Chiudi questa finestra" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "_Trova" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "Trova una parola nel documento" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "Preferenze..." ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "Cambia le preferenze dell'applicazione" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "_Aumenta" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "Ingrandisci il documento" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "_Riduci" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "Rimpicciolisci il documento" ++ ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "Ruota a _destra" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "Ruota il documento di 90 gradi in senso orario" ++ ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "Ruota a _sinistra" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "Ruota il documento di 90 gradi in senso antiorario" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "_Prima Pagina" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "Va alla prima pagina" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "P_rossima Pagina" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "Va alla prossima pagina" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "P_agina Precedente" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "Va alla pagina precedente" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "_Ultima Pagina" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "Va all'ultima pagina" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "I_nformazioni" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "Crediti" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "S_chermo intero" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "Visualizza a schermo intero" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "Mostra _barra degli strumenti" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "Mostra o nasconde la barra degli strumenti" ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "_Mostra barra di stato" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "Mostra o nasconde la barra di stato" ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "Mostra _indice" ++ ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "Mostra o nasconde l'indice del documento" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "Zoom ada_tta" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "Adatta il documento alla grandezza della finestra" ++ ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "Zoom _larghezza" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "Adatta il documento alla larghezza della finestra" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "Scorri" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "Mouse scorre la pagina" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "Seleziona testo" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "Mouse seleziona testo" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "Apri file PDF" ++ ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "Portable Document Format (PDF) Files" ++ ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "Tutti i file" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "Password" ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "Salva file PDF" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "Pagina" ++ ++#: src/gtk/MainView.cxx:868 ++msgid "of 0" ++msgstr "di 0" ++ ++#: src/gtk/MainView.cxx:921 ++msgid "Index" ++msgstr "Indice" ++ ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 ++#, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "Errore nella costruzione del gestore UI: %s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "Un visualizzatore PDF semplice e leggero" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "" ++"ePDFView è software libero; è possibile redistribuirlo e/o modificarlo\n" ++"entro i termini della licenza GNU General Public License come pubblicata\n" ++"dalla Free Software Foundation; versione 2 della Licenza, o\n" ++"(a propria scelta) ogni versione successiva.\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "" ++"ePDFView è distribuito nella speranza che possa essere utile,\n" ++"ma SENZA ALCUNA GARANZIA; senza neanche l'implicita garanzia di\n" ++"COMMERCIABILITÀ o IDONEITÀ AD UNO SCOPO PARTICOLARE. Consultare la\n" ++"GNU General Public License per maggiori dettagli.\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "" ++"Insieme a ePDFView dovreste aver ricevuto una copia della GNU\n" ++"General Public License; in caso contrario scrivete a: Free Software " ++"Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++msgid "translator-credits" ++msgstr "Fabio Vergnani " ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "Preferenze" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "Comandi Esterni" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "_Navigatore Web" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "Nota: %s sarà rimpiazzato dall'URI" ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "Stampa" ++ ++#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "Stampante" ++ ++#: src/gtk/PrintView.cxx:74 ++msgid "Job" ++msgstr "Lavoro" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "Carta" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "Intervallo di stampa" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "_Tutte le pagine" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "_Intervallo:" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "Gruppi di pagine" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "T_utte le pagine" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "Pagine _dispari" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "Pagine p_ari" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "Copie" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "Nu_mero di copie:" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "Ra_gruppa" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "Carta e disposizione" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "_Dimensione carta" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "_Orientamento pagina" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "D_isposizione_" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "Uscita" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "_Metodo" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "_Risoluzione" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "Stato" ++ ++#: src/gtk/PrintView.cxx:677 ++msgid "Jobs" ++msgstr "Lavori" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "Posizione" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "Normale" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "2 pagine in 1" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "4 pagine in 1" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "Verticale" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "Orizzontale" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "Trova _Prossimo" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "Trova P_recedente" +diff -Nurd epdfview-0.1.6-svn/po/ja.po epdfview/po/ja.po +--- epdfview-0.1.6-svn/po/ja.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/ja.po 2008-07-13 12:55:55.083198000 +0200 +@@ -0,0 +1,597 @@ ++# Japanese translations for ePDFView package ++# ++# Copyright (C) 2006 Emma's Software ++# This file is distributed under the same license as the ePDFView package. ++# , 2006. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: ePDFView 0.1.6\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2006-04-12 21:17+0200\n" ++"Last-Translator: Jonny \n" ++"Language-Team: nyu \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ!" ++ ++#: src/FindPter.cxx:195 ++#, c-format ++msgid "Searching in page %d of %d..." ++msgstr "%d/%d を検索中..." ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "エラーã¯ã‚ã‚Šã¾ã›ã‚“。" ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "ページカタログを読ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚" ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "PDF ファイルãŒå£Šã‚Œã¦ã„ã¦ä¿®æ­£ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "ファイルã¯æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™ãŒã€æ­£ã—ã„パスワードãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。" ++ ++#: src/IDocument.cxx:97 ++msgid "Nonexistent or invalid highlight file." ++msgstr "ãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯å­˜åœ¨ã—ã¦ã„ãªã„ã‹ä¸é©å½“ã§ã™ã€‚" ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "プリンタãŒä¸é©å½“ã§ã™ã€‚" ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "å°åˆ·ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "PDF ファイルã¯ã“ã®æ“作を許å¯ã—ã¦ã„ã¾ã›ã‚“。" ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "ページ番å·ãŒä¸é©å½“ã§ã™ã€‚" ++ ++#: src/IDocument.cxx:112 ++msgid "File I/O error." ++msgstr "ファイル I/O エラー。" ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ (%d)." ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[ファイル] - PDF ドキュメントを表示ã™ã‚‹" ++ ++#: src/main.cxx:72 src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "PDF ビューア" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "ファイル %s ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™..." ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "ファイル %s を読ã¿è¾¼ã‚“ã§ã„ã¾ã™..." ++ ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, c-format ++msgid "of %d" ++msgstr "/%d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "ドキュメントを %s ã«ä¿å­˜ã—ã¦ã„ã¾ã™..." ++ ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "ファイル読ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "入力ã—ãŸãƒ‘スワードã¯ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ç”¨ã®ãƒ‘スワードã§ã¯ãªã„よã†ã§ã™ã€‚" ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "ファイルä¿å­˜ä¸­ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "読ã¿è¾¼ã¿ä¸­..." ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "A4" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "300 DPI" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "グレースケール" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "アイドリング" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "中止" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "処ç†ä¸­" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "ä¸æ˜Ž" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"ドキュメント '%s' ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "検索:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "ファイル(_F)" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "編集(_E)" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "表示(_V)" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "移動(_G)" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "ヘルプ(_H)" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "é–‹ã(_O)" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "PDF ドキュメントを開ã" ++ ++#: src/gtk/MainView.cxx:99 ++msgid "_Reload" ++msgstr "æ›´æ–°(_R)" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "ドキュメントを更新ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "別åã§ä¿å­˜(_S)..." ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "ドキュメントã®ã‚³ãƒ”ーをä¿å­˜ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "å°åˆ·(_P)..." ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "ドキュメントをå°åˆ·ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "é–‰ã˜ã‚‹(_C)" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "ウィンドウを閉ã˜ã‚‹" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "検索(_F)" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "ドキュメント中ã®å˜èªžã‚’検索ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "設定..." ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "アプリケーションã®è¨­å®šã‚’変更ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "拡大(_I)" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "ドキュメントã®è¡¨ç¤ºã‚’拡大ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "縮å°(_O)" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "ドキュメントã®è¡¨ç¤ºã‚’縮å°ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "å³ã«å›žè»¢(_R)" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "ドキュメントã®è¡¨ç¤ºã‚’時計回り㫠90°回転ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "å·¦ã«å›žè»¢(_L)" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "ドキュメントã®è¡¨ç¤ºã‚’å時計回り㫠90°回転ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "最åˆã®ãƒšãƒ¼ã‚¸(_F)" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "次ã®ãƒšãƒ¼ã‚¸(_N)" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "次ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "å‰ã®ãƒšãƒ¼ã‚¸(_P)" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "å‰ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "最後ã®ãƒšãƒ¼ã‚¸(_L)" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "情報(_A)" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "アプリケーションã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’表示ã™ã‚‹" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "全画é¢è¡¨ç¤º(_U)" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "全画é¢è¡¨ç¤ºã‚’切り替ãˆã‚‹" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "ツールãƒãƒ¼ã‚’表示(_T)" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "ツールãƒãƒ¼ã®è¡¨ç¤ºã‚’切り替ãˆã‚‹" ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "ステータスãƒãƒ¼ã‚’表示(_S)" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "ステータスãƒãƒ¼ã®è¡¨ç¤ºã‚’切り替ãˆã‚‹" ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "インデックスを表示(_N)" ++ ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "ドキュメントアウトラインã®è¡¨ç¤ºã‚’切り替ãˆã‚‹" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "フィット(_F)" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "ドキュメントã®è¡¨ç¤ºã‚’ウィンドウ全体ã«åˆã‚ã›ã‚‹" ++ ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "å¹…ã«åˆã‚ã›ã‚‹(_W)" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "ドキュメントã®è¡¨ç¤ºã‚’ウィンドウ幅ã«åˆã‚ã›ã‚‹" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "スクロール" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "マウスã§ãƒšãƒ¼ã‚¸ã‚’スクロール" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "文字列é¸æŠž" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr " マウスã§æ–‡å­—列をé¸æŠž" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "PDF ファイルを開ã" ++ ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "ãƒãƒ¼ã‚¿ãƒ–ルドキュメントフォーマット(PDF) ファイル" ++ ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "パスワード" ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "PDF ファイルをä¿å­˜" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "ページ" ++ ++#: src/gtk/MainView.cxx:868 ++msgid "of 0" ++msgstr "/0" ++ ++#: src/gtk/MainView.cxx:921 ++msgid "Index" ++msgstr "インデックス" ++ ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 ++#, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "UI 生æˆãƒžãƒãƒ¼ã‚¸ãƒ£ã®ã‚¨ãƒ©ãƒ¼: %s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "è»½é‡ PDF ビューア" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "" ++"ePDFView ã¯ãƒ•ãƒªãƒ¼ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã™ã€‚ã‚ãªãŸã¯ã“れをã€Free Software Foundation\n" ++"ã«ã‚ˆã£ã¦ç™ºè¡Œã•ã‚ŒãŸ GNU 一般公衆利用許諾契約書 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã‹ã€å¸Œæœ›\n" ++"ã«ã‚ˆã£ã¦ã¯ãれ以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã†ã¡ã©ã‚Œã‹) ã®å®šã‚ã‚‹æ¡ä»¶ã®ä¸‹ã§å†é ’布\n" ++"ã¾ãŸã¯æ”¹å¤‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "" ++"ePDFView ã¯æœ‰ç”¨ã§ã‚ã‚‹ã“ã¨ã‚’願ã£ã¦é ’布ã•ã‚Œã¾ã™ãŒã€å…¨ãã®ç„¡ä¿è¨¼\n" ++"ã§ã™ã€‚商業å¯èƒ½æ€§ã®ä¿è¨¼ã‚„特定ã®ç›®çš„ã¸ã®é©åˆæ€§ã¯ã€è¨€å¤–ã«ç¤ºã•ã‚ŒãŸ\n" ++"ã‚‚ã®ã‚‚å«ã‚å…¨ã存在ã—ã¾ã›ã‚“。詳ã—ã㯠GNU 一般公衆利用許諾契約書\n" ++"ã‚’ã”覧ãã ã•ã„。\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "" ++"ã‚ãªãŸã¯ ePDFView ã¨å…±ã«ã€GNU 一般公衆利用許諾契約書ã®è¤‡è£½ç‰©ã‚’一部å—ã‘å–ã£" ++"ãŸ\n" ++"ã¯ãšã§ã™ã€‚ã‚‚ã—å—ã‘å–ã£ã¦ã„ãªã‘ã‚Œã°ã€the Free Software Foundation,Inc., 59\n" ++"Temple Place, Suite 330, Boston, MA 02111-1307 USA ã¾ã§è«‹æ±‚ã—ã¦ãã ã•ã„。\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++msgid "translator-credits" ++msgstr "nyu " ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "設定" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "外部コマンド" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "ウェブブラウザ(_B)" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "Note: %s 㯠URI ã§ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚" ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "å°åˆ·" ++ ++#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "プリンタ" ++ ++#: src/gtk/PrintView.cxx:74 ++msgid "Job" ++msgstr "ジョブ" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "用紙" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "å°åˆ·ã™ã‚‹ç¯„囲" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "全ページ(_A)" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "範囲(_R):" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "ページセット" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "全ページ(_L)" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "奇数ページ(_D)" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "å¶æ•°ãƒšãƒ¼ã‚¸(_E)" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "コピー" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "コピーã®æ•°(_U):" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "ページをæƒãˆã‚‹(_O)" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "用紙ã¨ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "用紙サイズ(_S):" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "用紙ã®å‘ã(_O):" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "レイアウト(_L):" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "出力" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "モード(_M):" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "解åƒåº¦(_R):" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "状態" ++ ++#: src/gtk/PrintView.cxx:677 ++msgid "Jobs" ++msgstr "ジョブ" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "場所" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "通常" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "1 ç”»é¢ã« 2 ページ" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "1 ç”»é¢ã« 4 ページ" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "縦置ã" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "横置ã" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "次を検索(_N)" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "å‰ã‚’検索(_P)" +diff -Nurd epdfview-0.1.6-svn/po/LINGUAS epdfview/po/LINGUAS +--- epdfview-0.1.6-svn/po/LINGUAS 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/LINGUAS 2008-07-13 12:55:55.073198000 +0200 +@@ -1,2 +1,2 @@ + # Set of available languages. +-ca de el es fr pl ru vi zh_TW ++ca cs de el es fr ja it pl pt_BR pt_PT ru sv vi zh_CN zh_TW +diff -Nurd epdfview-0.1.6-svn/po/pl.po epdfview/po/pl.po +--- epdfview-0.1.6-svn/po/pl.po 2008-07-13 12:57:47.523198000 +0200 ++++ epdfview/po/pl.po 2008-07-13 12:55:55.073198000 +0200 +@@ -1,19 +1,22 @@ ++# translation of pl.po to + # epdfview Polish translation + # Copyright (C) 2006 Emma's Software + # This file is distributed under the same license as the epdfview package. + # Wojciech Myrda , 2006. ++# Piotr Pacholak , 2007. + # + msgid "" + msgstr "" +-"Project-Id-Version: ePDFView 0.1.5\n" ++"Project-Id-Version: pl\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" +-"PO-Revision-Date: 2006-05-13 00:40+0100\n" +-"Last-Translator: Wojciech Myrda \n" +-"Language-Team: Polish \n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2007-06-25 16:05+0200\n" ++"Last-Translator: Piotr Pacholak \n" ++"Language-Team: \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"X-Generator: KBabel 1.11.4\n" + + #: src/FindPter.cxx:187 + msgid "No Results Found!" +@@ -38,7 +41,7 @@ + + #: src/IDocument.cxx:91 + msgid "The PDF file is damaged and can't be repaired." +-msgstr "Plik PDF jest uszkodzony i niemoże zostać naprawiony.." ++msgstr "Plik PDF jest uszkodzony i nie może zostać naprawiony.." + + #: src/IDocument.cxx:94 + msgid "The file is encrypted and the password was incorrect or not supplied." +@@ -47,7 +50,7 @@ + + #: src/IDocument.cxx:97 + msgid "Nonexistent or invalid highlight file." +-msgstr "Zaznaczony plik niestnieje lub jest nieprawidÅ‚owy." ++msgstr "Zaznaczony plik nie istnieje lub jest nieprawidÅ‚owy." + + #: src/IDocument.cxx:100 + msgid "Invalid printer." +@@ -74,11 +77,11 @@ + msgid "Unknown error (%d)." + msgstr "Nieznany bÅ‚Ä…d (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[PLIK] - przeglÄ…dnij pliki PDF" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "PrzeglÄ…darka PDF" + +@@ -92,7 +95,7 @@ + msgid "Loading file %s..." + msgstr "Wczytywanie pliku %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "z %d" +@@ -102,39 +105,47 @@ + msgid "Saving document to %s..." + msgstr "Zapisywanie dokumentu do %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "BÅ‚Ä…d w wczytywaniu pliku" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "Podane przez ciebie hasÅ‚o do tego pliku jest nieprawidÅ‚owe." + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" + msgstr "BÅ‚Ä…d w zapisywaniu pliku" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Wczytywanie..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "Skala szaroÅ›ci" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "Bezczynny" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "Zatrzymany" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "Przetwarzanie" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "Nieznany" + +@@ -144,251 +155,267 @@ + "Failed to load document '%s'.\n" + "%s\n" + msgstr "" +-"Niemożna wczytać dokumentu '%s'.\n" ++"Nie można wczytać dokumentu '%s'.\n" + "%s\n" + + #: src/gtk/FindView.cxx:51 + msgid "Find:" + msgstr "Znajdź:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_Plik" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_Edytuj" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_Widok" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" +-msgstr "_Przejdź" ++msgstr "P_rzejdź" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" +-msgstr "_Pomoc" ++msgstr "Pomo_c" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "_Otwórz" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Otwórz dokument PDF" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "_PrzeÅ‚aduj" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "PrzeÅ‚aduj obecny dokument" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "_Zapisz KopiÄ™..." + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" + msgstr "Zapisz kopiÄ™ obecnego dokumentu" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "_Drukuj..." + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" + msgstr "Wydrukuj obecny dokument" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" +-msgstr "_Zamknij" ++msgstr "Za_mknij" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Zamknij to okno" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_Znajdź" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "Znajdź sÅ‚owo w tym dokumencie" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "Ustawienia" + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "ZmieÅ„ ustawienia aplikacji" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" +-msgstr "_Zbliż" ++msgstr "Po_wiÄ™ksz" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "PowiÄ™ksz dokument" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" +-msgstr "_Oddal" ++msgstr "Po_mniejsz" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "Zmniejsz dokument" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" +-msgstr "Obruć w _prawo" ++msgstr "Obróć w _prawo" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" +-msgstr "Obruć dokument o 90 stopni zgodnie z wskazówkami zegara" ++msgstr "Obróć dokument o 90 stopni zgodnie z wskazówkami zegara" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" +-msgstr "Obruć w _lewo" ++msgstr "Obróć w _lewo" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" +-msgstr "Obruć dokument o 90 stopni przeciwnie do wskazówek zegara" ++msgstr "Obróć dokument o 90 stopni przeciwnie do wskazówek zegara" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" +-msgstr "_Pierwsza Strona" ++msgstr "Pie_rwsza Strona" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Przejdź do strony pierwszej" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "_NastÄ™pna Strona" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Przejdź do strony nastÄ™pnej" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "_Poprzednia Strona" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Przejdź do strony poprzedniej" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "_Ostatnia Strona" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Przejdź do strony ostatniej" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_O programie" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Pokaż informacjÄ™ o programie" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" +-msgstr "_PeÅ‚ny ekran" ++msgstr "PeÅ‚ny _ekran" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" + msgstr "PeÅ‚ny ekran" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "Pokaż pasek _narzÄ™dzi" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Pokaż lub ukryj pasek narzÄ™dzi" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" +-msgstr "Pokaż pasek stanu" ++msgstr "Pokaż pasek s_tanu" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Pokaż lub ukryj pasek stanu" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "Pokaż I_ndex" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "Pokaż lub ukryj Index dokumentu" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "_Dopasuj do okna" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "PowiÄ™ksza obecny dokument do rozmiaru okna" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "Dopasuj do _szerokoÅ›ci" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "PowiÄ™ksza obecny dokument do szerokoÅ›ci okna" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "Otwórz plik PDF" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "Pliki (PDF)" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "Wszystkie Pliki" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "HasÅ‚o" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" + msgstr "Zapisz Plik PDF" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Strona" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "z 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Index" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "BÅ‚Ä…d podczas wczytywania menadżera UI: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "Lekka przeglÄ…darka plików PDF" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -400,7 +427,7 @@ + "opublikowanymi poprzez Free Software Foundation; zarówno wesjÄ… drugÄ… " + "Licencji,lub (wedle wÅ‚asnego uznania) wersjami późniejszymi.\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -412,7 +439,7 @@ + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.PrzeglÄ…dnij GNU General " + "Public License by dowiedzieć siÄ™ wiÄ™cej.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -424,11 +451,11 @@ + "Boston, MA 02111-1307\n" + "USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "" + +@@ -451,7 +478,7 @@ + + #: src/gtk/PrintView.cxx:51 + msgid "Print" +-msgstr "Drukuj" ++msgstr "Wydrukuj" + + #: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 + msgid "Printer" +@@ -479,19 +506,19 @@ + + #: src/gtk/PrintView.cxx:392 + msgid "Page Set" +-msgstr "Wybrane Strony" ++msgstr "Wybrane strony" + + #: src/gtk/PrintView.cxx:408 + msgid "A_ll pages" +-msgstr "_Wszystkie strony" ++msgstr "W_szystkie strony" + + #: src/gtk/PrintView.cxx:412 + msgid "O_dd pages" +-msgstr "Strony _Nieparzyste" ++msgstr "Strony _nieparzyste" + + #: src/gtk/PrintView.cxx:416 + msgid "_Even pages" +-msgstr "Strony parzyste" ++msgstr "Strony pa_rzyste" + + #: src/gtk/PrintView.cxx:420 + msgid "Copies" +@@ -503,7 +530,7 @@ + + #: src/gtk/PrintView.cxx:444 + msgid "C_ollate" +-msgstr "" ++msgstr "_Posegregowane" + + #: src/gtk/PrintView.cxx:465 + msgid "Paper and Layout" +diff -Nurd epdfview-0.1.6-svn/po/pt_BR.po epdfview/po/pt_BR.po +--- epdfview-0.1.6-svn/po/pt_BR.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/pt_BR.po 2008-07-13 12:55:55.043198000 +0200 +@@ -0,0 +1,597 @@ ++# Spanish translations for ePDFView package ++# Traducciones al español para el paquete ePDFView. ++# Copyright (C) 2006 Emma's Software ++# This file is distributed under the same license as the ePDFView package. ++# , 2006. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: ePDFView 0.1.4\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2008-05-28 12:13-0300\n" ++"Last-Translator: \n" ++"Language-Team: Spanish \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "Não foram encontrados resultados!" ++ ++#: src/FindPter.cxx:195 ++#, c-format ++msgid "Searching in page %d of %d..." ++msgstr "Localizando na página %d de %d..." ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "Nenhum erro." ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "Arquivo não encontrado." ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "Catálogo de página não pode ser lido." ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "O arquivo PDF está corrompido e não pode ser recuperado." ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "O arquivo está encriptado e a senha incorreta" ++ ++#: src/IDocument.cxx:97 ++msgid "Nonexistent or invalid highlight file." ++msgstr "O arquivo não existe ou é inválido." ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "Impressora inválida." ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "Erro durante a impressão." ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "O arquivo PDF não permite esta operação." ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "Número de página inválido." ++ ++#: src/IDocument.cxx:112 ++msgid "File I/O error." ++msgstr "Erro I/O do arquivo." ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "Erro desconhecido (%d)." ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[ARQUIVO] - mostra documentos PDF" ++ ++#: src/main.cxx:72 ++#: src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "Visualizador de PDF" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "Recarregando arquivo %s..." ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "Carregando arquivo %s..." ++ ++#: src/MainPter.cxx:413 ++#: src/MainPter.cxx:892 ++#, c-format ++msgid "of %d" ++msgstr "de %d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "Salvando documento em %s..." ++ ++#: src/MainPter.cxx:832 ++#: src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "Erro ao carregar" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "Senha incorreta para este arquivo." ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "Erro ao Salvar Arquivo" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "Carregando..." ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "A4" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "300 DPI" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "Escala de cinza" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "Escondido" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "Parado" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "Processando" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "Desconhecido" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"Falha ao abrir o documento '%s'.\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "Localizar:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "_Arquivo" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "_Editar" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "_Ver" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "_Ir" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "A_juda" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "_Abrir" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "Abrir documento PDF" ++ ++#: src/gtk/MainView.cxx:99 ++msgid "_Reload" ++msgstr "_Recarregar" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "Recarregar arquivo PDF atual" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "_Salvar cópia..." ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "Salvar cópia do documento atual" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "_Imprimir" ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "Imprimir documento atual" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "_Fechar" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "Fechar esta janela" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "Locali_zar" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "Localizar uma palavra no documento" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "Preferências..." ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "Alterar preferências do aplicativo" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "Au_mentar" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "Aumentar o documento" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "Diminui_r" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "Diminuir o documento" ++ ++#: src/gtk/MainView.cxx:133 ++#: src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "Girar para a _direita" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "Girar o documento 90 graus em sentido horário" ++ ++#: src/gtk/MainView.cxx:137 ++#: src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "Girar para a _esquerda" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "Girar o documento 90 graus em sentido anti-horário" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "_Primeira página" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "Ir para a primeira página" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "_Próxima página" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "Ir para a próxima página" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "Página _anterior" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "Ir para a página anterior" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "Ú_ltima página" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "Ir para a última página" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "_Sobre" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "Mostrar créditos do aplicativo" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "T_ela cheia" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "Mudar para janela cheia" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "Mostrar barras de _ferramentas" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "Mostrar ou esconder a barra de ferramentas" ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "Mostrar barra de _status" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "Mostrar ou esconder a barra de status" ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "Mostrar í_ndice" ++ ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "Mostrar ou esconder o índice do documento" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "Aj_ustar à janela" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "Ajustar documento à janela" ++ ++#: src/gtk/MainView.cxx:195 ++#: src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "Ajustar à _largura da página" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "Ajustar documento à largura da página" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "Rolar" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "Mouse rolar página" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "Selecionar Texto" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr " Mouse selecionar texto" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "Abrir arquivo PDF" ++ ++#: src/gtk/MainView.cxx:340 ++#: src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "Arquivos em Portable Document Format (PDF)" ++ ++#: src/gtk/MainView.cxx:352 ++#: src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "Todos os arquivos" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "Senha" ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "Salvar arquivo PDF" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "Página" ++ ++#: src/gtk/MainView.cxx:868 ++msgid "of 0" ++msgstr "de 0" ++ ++#: src/gtk/MainView.cxx:921 ++msgid "Index" ++msgstr "Ãndice" ++ ++#: src/gtk/MainView.cxx:991 ++#: src/gtk/MainView.cxx:1001 ++#, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "Erro ao construir o administrador de IU: %s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "Visualizador leve de PDF" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "O ePDFView é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU (GPL) como publicada pela Fundação do Software Livre; seja a versão 2 da Licença ou (se preferir) qualquer versão mais recente.\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "O ePDFView é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; até mesmo sem a garantia implicada de COMERCIALIZAÇÃO ou de ADAPTAÇÃO A UM PROPÓSITO EM PARTICULAR. Veja a Licença Pública Geral GNU (GPL) para mais detalhes.\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "Você deve ter recebido uma cópia da Licença Pública Geral GNU (GPL) junto com o ePDFView; se não, escreva para a Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++msgid "translator-credits" ++msgstr "Fábio Antunes" ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "Preferências" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "Comandos Externos" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "Navegador da _Web:" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "Nota: O parámetro %s deve ser substituído pela URL." ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "Imprimir" ++ ++#: src/gtk/PrintView.cxx:69 ++#: src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "Impressora" ++ ++#: src/gtk/PrintView.cxx:74 ++msgid "Job" ++msgstr "Trabalho" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "Página" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "Escala de impressão" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "Tod_as as páginas" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "_Escala:" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "Conjunto de páginas" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "_Todas as páginas" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "Páginas _ímpares" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "Páginas pare_s" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "Cópias" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "_Número de cópias:" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "O_rganizar" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "Página e disposição" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "_Tamanho da página:" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "_Orientação:" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "_Disposição:" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "Saída" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "_Modo:" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "_Resolução:" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "Estado" ++ ++#: src/gtk/PrintView.cxx:677 ++msgid "Jobs" ++msgstr "Trabalhos" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "Local" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "Plano" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "2 páginas em 1" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "4 páginas em 1" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "Retrato" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "Paisagem" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "Localizar _Próxima" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "Localizar _Anterior" ++ +diff -Nurd epdfview-0.1.6-svn/po/pt_PT.po epdfview/po/pt_PT.po +--- epdfview-0.1.6-svn/po/pt_PT.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/pt_PT.po 2008-07-13 12:55:55.083198000 +0200 +@@ -0,0 +1,597 @@ ++# Portuguese translation for ePDFView package ++# Copyright (C) 2006 Emma's Software ++# This file is distributed under the same license as the ePDFView package. ++# , 2006. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: ePDFView 0.1.6\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2008-01-06 18:48+0100\n" ++"Last-Translator: Nuno Miguel \n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "Nenhum Resultado Encontrado!" ++ ++#: src/FindPter.cxx:195 ++#, c-format ++msgid "Searching in page %d of %d..." ++msgstr "Procurando na página %d de %d..." ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "Nenhum erro." ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "Ficheiro não encontrado." ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "Catálogo de página não pode ser lido." ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "O ficheiro PDF está corrompido e não pode ser reparado." ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "" ++"O ficheiro está encriptado e a senha está incorrecta ou não foi fornecida." ++ ++#: src/IDocument.cxx:97 ++msgid "Nonexistent or invalid highlight file." ++msgstr "O ficheiro não existe ou é inválido." ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "Impressora inválida." ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "Erro durante a impressão." ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "O ficheiro PDF não permite esta operação." ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "Número de página inválido." ++ ++#: src/IDocument.cxx:112 ++msgid "File I/O error." ++msgstr "Erro E/S do ficheiro." ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "Erro desconhecido (%d)." ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[FICHEIRO] - mostra documentos PDF" ++ ++#: src/main.cxx:72 src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "Visualizador de PDF" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "Recarregando ficheiro %s..." ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "Carregando ficheiro %s..." ++ ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, c-format ++msgid "of %d" ++msgstr "de %d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "Gravando documento em %s..." ++ ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "Erro ao Carregar Ficheiro" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "A senha que indicou não é inválida para este ficheiro." ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "Erro ao Gravar Ficheiro" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "Carregando..." ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "A4" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "300 DPI" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "Escala de cinza" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "Ocioso" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "Parado" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "Processando" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "Desconhecido" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"Falha ao abrir o documento '%s'.\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "Procurar:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "_Ficheiro" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "_Editar" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "_Ver" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "_Ir" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "_Ajuda" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "_Abrir" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "Abrir um documento PDF" ++ ++#: src/gtk/MainView.cxx:99 ++msgid "_Reload" ++msgstr "_Recarregar" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "Recarregar documento actual" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "_Gravar uma Cópia..." ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "Gravar uma cópia do documento actual" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "_Imprimir..." ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "Imprimir o documento actual" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "_Fechar" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "Fechar esta janela" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "_Procurar" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "Localizar uma palavra no documento" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "Preferências..." ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "Alterar preferências da aplicação" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "A_mpliar" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "Amplia o documento" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "_Reduzir" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "Reduz o documento" ++ ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "Girar para a _direita" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "Girar o documento 90 graus em sentido horário" ++ ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "Girar para a _esquerda" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "Girar o documento 90 graus em sentido anti-horário" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "_Primeira Página" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "Ir para a primeira página" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "_Próxima Página" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "Ir para a próxima página" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "Página _Anterior" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "Ir para a página anterior" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "Ú_ltima Página" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "Ir para a última página" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "_Sobre" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "Mostrar créditos da aplicação" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "Ecrã inteiro" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "Mudar para ecrã completo" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "Mostrar barras de _ferramentas" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "Mostra ou esconde a barra de ferramentas" ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "Mostrar barra de _estado" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "Mostra ou esconde a barra de estado" ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "Mostrar Ã_ndice" ++ ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "Mostra ou esconde o índice do documento" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "Aj_ustar à janela" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "Ajusta documento à janela" ++ ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "Ajustar à _largura da página" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "Ajusta documento à largura da página" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "Deslocamento" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "Deslocamento de página com rato" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "Seleccionar Texto" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr " Seleccionar texto com rato" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "Abrir Ficheiro PDF" ++ ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "Ficheiros em Portable Document Format (PDF)" ++ ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "Todos os Ficheiros" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "Senha" ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "Gravar ficheiro PDF" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "Página" ++ ++#: src/gtk/MainView.cxx:868 ++msgid "of 0" ++msgstr "de 0" ++ ++#: src/gtk/MainView.cxx:921 ++msgid "Index" ++msgstr "Ãndice" ++ ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 ++#, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "Erro ao construir o gestor de IU: %s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "Um visualizador leve de PDF" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "" ++"O ePDFView é software livre; pode redistribuí-lo e/ou modificá-lo\n" ++"sob os termos da Licença Pública Geral GNU (GPL) como publicada\n" ++"pela Free Software Foundation; seja a versão 2 da Licença ou\n" ++"(se preferir) qualquer versão mais recente.\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "" ++"O ePDFView é distribuído na esperança de que seja útil,\n" ++"mas SEM NENHUMA GARANTIA; até mesmo sem a garantia implicada de\n" ++"COMERCIALIZAÇÃO ou de ADAPTAÇÃO A UM PROPÓSITO EM PARTICULAR. Veja a\n" ++"Licença Pública Geral GNU (GPL) para mais detalhes.\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "" ++"Deve ter recebido uma cópia da Licença Pública Geral GNU (GPL)\n" ++"junto com o ePDFView; se não, escreva para a Free Software Foundation, Inc.\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++msgid "translator-credits" ++msgstr "Nuno Miguel " ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "Preferências" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "Comandos Externos" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "Navegador _Web:" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "Nota: O parâmetro %s deve ser substituído pelo URI." ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "Imprimir" ++ ++#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "Impressora" ++ ++#: src/gtk/PrintView.cxx:74 ++msgid "Job" ++msgstr "Trabalho" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "Página" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "Intervalo de impressão" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "_Todas as páginas" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "_Intervalo:" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "Conjunto de páginas" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "_Todas as páginas" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "Páginas í_mpares" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "Páginas _pares" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "Cópias" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "_Número de cópias:" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "O_rganizar" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "Página e Disposição" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "_Tamanho do Papel:" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "_Orientação de Página:" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "_Disposição:" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "Saída" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "_Modo:" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "_Resolução:" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "Estado" ++ ++#: src/gtk/PrintView.cxx:677 ++msgid "Jobs" ++msgstr "Trabalhos" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "Local" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "Plano" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "2 páginas em 1" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "4 páginas em 1" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "Retrato" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "Paisagem" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "Procurar _Próxima" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "Localizar _Anterior" +diff -Nurd epdfview-0.1.6-svn/po/ru.po epdfview/po/ru.po +--- epdfview-0.1.6-svn/po/ru.po 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/ru.po 2008-07-13 12:55:55.083198000 +0200 +@@ -1,144 +1,152 @@ + # Russian translations for ePDFView package +-# áÎÇÌÉÊÓËÉÅ ÐÅÒÅ×ÏÄÙ ÄÌÑ ÐÁËÅÔÁ ePDFView. ++# ÐнглийÑкие переводы Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° ePDFView. + # Copyright (C) 2006 Emma's Software + # This file is distributed under the same license as the ePDFView package. + # , 2006. + # + msgid "" + msgstr "" +-"Project-Id-Version: ePDFView 0.1.5\n" ++"Project-Id-Version: ePDFView 0.1.6\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" +-"PO-Revision-Date: 2006-07-08 13:31+0400\n" +-"Last-Translator: \n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2007-04-23 15:56+0300\n" ++"Last-Translator: Sergey Starosek \n" + "Language-Team: Russian \n" + "MIME-Version: 1.0\n" +-"Content-Type: text/plain; charset=KOI8-R\n" ++"Content-Type: text/plain; charset=utf-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" + "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + + #: src/FindPter.cxx:187 + msgid "No Results Found!" +-msgstr "òÅÚÕÌØÔÁÔÙ ÎÅ ÎÁÊÄÅÎÙ!" ++msgstr "Результаты не найдены!" + + #: src/FindPter.cxx:195 + #, c-format + msgid "Searching in page %d of %d..." +-msgstr "ðÏÉÓË ÎÁ ÓÔÒÁÎÉÃÅ %d ÉÚ %d..." ++msgstr "ПоиÑк на Ñтранице %d из %d..." + + #: src/IDocument.cxx:82 + msgid "No error." +-msgstr "âÅÚ ÏÛÉÂÏË." ++msgstr "Без ошибок." + + #: src/IDocument.cxx:85 + msgid "File not found." +-msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ." ++msgstr "Файл не найден." + + #: src/IDocument.cxx:88 + msgid "Couldn't read the page catalog." +-msgstr "ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÉÎÆÏÒÍÁÃÉÉ Ï ÓÔÒÁÎÉÃÁÈ." ++msgstr "Ошибка при чтении информации о Ñтраницах." + + #: src/IDocument.cxx:91 + msgid "The PDF file is damaged and can't be repaired." +-msgstr "PDF ÆÁÊÌ ÐÏ×ÒÅÖÄ£Î É ÎÅ ÍÏÖÅÔ ÂÙÔØ ×ÏÓÓÔÁÎÏ×ÌÅÎ." ++msgstr "PDF файл повреждён и не может быть воÑÑтановлен." + + #: src/IDocument.cxx:94 + msgid "The file is encrypted and the password was incorrect or not supplied." +-msgstr "æÁÊÌ ÚÁÛÉÆÒÏ×ÁÎ. ðÁÒÏÌØ ÎÅ×ÅÒÅÎ ÉÌÉ ÎÅ ××ÅÄ£Î." ++msgstr "Файл зашифрован. Пароль неверен или не введён." + + #: src/IDocument.cxx:97 + msgid "Nonexistent or invalid highlight file." +-msgstr "æÁÊÌ ÐÏÄÓ×ÅÔËÉ(highlight file) ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÉÌÉ × Î£Í ÏÛÉÂËÉ." ++msgstr "Файл подÑветки(highlight file) не ÑущеÑтвует или в нём ошибки." + + #: src/IDocument.cxx:100 + msgid "Invalid printer." +-msgstr "ðÒÉÎÔÅÒ ÎÅ ÎÁÊÄÅÎ" ++msgstr "Принтер не найден" + + #: src/IDocument.cxx:103 + msgid "Error during printing." +-msgstr "ïÛÉÂËÁ ÐÅÞÁÔÉ." ++msgstr "Ошибка печати." + + #: src/IDocument.cxx:106 + msgid "The PDF file doesn't allow that operation." +-msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÓÕÝÅÓÔ×ÌÅÎÁ ÄÌÑ ÜÔÏÇÏ PDF ÆÁÊÌÁ." ++msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть оÑущеÑтвлена Ð´Ð»Ñ Ñтого PDF файла." + + #: src/IDocument.cxx:109 + msgid "Invalid page number." +-msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÓÔÒÁÎÉÃÙ." ++msgstr "Ðеверный номер Ñтраницы." + + #: src/IDocument.cxx:112 + msgid "File I/O error." +-msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ" ++msgstr "Ошибка ввода/вывода." + + #: src/IDocument.cxx:115 + #, c-format + msgid "Unknown error (%d)." +-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ (%d)." ++msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" +-msgstr "[æáêì] - ÐÒÏÓÍÏÔÒ PDF ÄÏËÕÍÅÎÔÁ" ++msgstr "[ФÐЙЛ] - проÑмотр PDF документа" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" +-msgstr "ðÒÏÓÍÏÔÒ PDF" ++msgstr "ПроÑмотр PDF" + + #: src/MainPter.cxx:233 + #, c-format + msgid "Reloading file %s..." +-msgstr "ðÅÒÅÚÁÇÒÕÚËÁ ÆÁÊÌÁ %s..." ++msgstr "Перезагрузка файла %s..." + + #: src/MainPter.cxx:237 + #, c-format + msgid "Loading file %s..." +-msgstr "úÁÇÒÕÚËÁ ÆÁÌÁ %s..." ++msgstr "Загрузка фала %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" +-msgstr "ÉÚ %d" ++msgstr "из %d" + + #: src/MainPter.cxx:588 + #, c-format + msgid "Saving document to %s..." +-msgstr "äÏËÕÍÅÎÔ ÓÏÈÒÁÎÑÅÔØÓÑ × %s..." ++msgstr "Документ ÑохранÑетÑÑ Ð² %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" +-msgstr "ïÛÉÂËÁ ðÒÉ úÁÇÒÕÚËÅ æÁÊÌÁ" ++msgstr "Ошибка При Загрузке Файла" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." +-msgstr "÷×ÅÄ£ÎÙÊ ×ÁÍÉ ÐÁÒÏÌØ ÎÅ×ÅÒÅÎ ÄÌÑ ÜÔÏÇÏ ÆÁÊÌÁ" ++msgstr "Введёный вами пароль неверен Ð´Ð»Ñ Ñтого файла" + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" +-msgstr "ïÛÉÂËÁ ðÒÉ óÏÈÒÁÎÅÎÉÉ æÁÊÌÁ" ++msgstr "Ошибка При Сохранении Файла" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." +-msgstr "úÁÇÒÕÖÁÅÔØÓÑ..." ++msgstr "ЗагружаетÑÑ..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" +-msgstr "ïÔÔÅÎËÉ ÓÅÒÏÇÏ" ++msgstr "Оттенки Ñерого" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" +-msgstr "ïÖÉÄÁÎÉÅ" ++msgstr "Ожидание" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" +-msgstr "ïÓÔÁÎÏ×ÌÅÎ" ++msgstr "ОÑтановлен" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" +-msgstr "ïÂÒÁÂÏÔËÁ" ++msgstr "Обработка" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" +-msgstr "îÅÉÚ×ÅÓÔÎÏ" ++msgstr "ÐеизвеÑтно" + + #: src/PDFDocument.cxx:272 + #, c-format +@@ -146,435 +154,452 @@ + "Failed to load document '%s'.\n" + "%s\n" + msgstr "" +-"ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÄÏËÕÍÅÎÔÁ '%s'.\n" ++"Ошибка при загрузке документа '%s'.\n" + "%s\n" + + #: src/gtk/FindView.cxx:51 + msgid "Find:" +-msgstr "îÁÊÔÉ:" ++msgstr "Ðайти:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" +-msgstr "_æÁÊÌ" ++msgstr "_Файл" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" +-msgstr "_ðÒÁ×ËÁ" ++msgstr "_Правка" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" +-msgstr "_÷ÉÄ" ++msgstr "_Вид" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" +-msgstr "ð_ÅÒÅÊÔÉ" ++msgstr "П_ерейти" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" +-msgstr "ð_ÏÍÏÝØ" ++msgstr "П_омощь" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" +-msgstr "_ïÔËÒÙÔØ" ++msgstr "_Открыть" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" +-msgstr "ïÔËÒÙÔØ PDF ÄÏËÕÍÅÎÔ" ++msgstr "Открыть PDF документ" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" +-msgstr "_ðÅÒÅÚÁÇÒÕÚÉÔØ" ++msgstr "_Перезагрузить" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" +-msgstr "ðÅÒÅÚÁÇÒÕÚÉÔØ ÔÅËÕÝÉÊ ÄÏËÕÍÅÎÔ" ++msgstr "Перезагрузить текущий документ" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." +-msgstr "_óÏÈÒÁÎÉÔØ ëÏÐÉÀ" ++msgstr "_Сохранить Копию" + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" +-msgstr "óÏÈÒÁÎÉÔØ ËÏÐÉÀ ÔÅËÕÝÅÇÏ ÄÏËÕÍÅÎÔÁ" ++msgstr "Сохранить копию текущего документа" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." +-msgstr "_ðÅÞÁÔØ" ++msgstr "_Печать" + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" +-msgstr "òÁÓÐÅÞÁÔÁÔØ ÔÅËÕÝÉÊ ÄÏËÕÍÅÎÔ" ++msgstr "РаÑпечатать текущий документ" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" +-msgstr "_úÁËÒÙÔØ" ++msgstr "_Закрыть" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" +-msgstr "úÁËÒÙÔØ ÏËÎÏ" ++msgstr "Закрыть окно" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" +-msgstr "_îÁÊÔÉ" ++msgstr "_Ðайти" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" +-msgstr "îÁÊÔÉ ÓÌÏ×Ï × ÄÏËÕÍÅÎÔÅ" ++msgstr "Ðайти Ñлово в документе" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." +-msgstr "îÁÓÔÒÏÊËÉ..." ++msgstr "ÐаÑтройки..." + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" +-msgstr "òÅÄÁËÔÉÒÏ×ÁÔØ ÎÁÓÔÒÏÊËÉ ÐÒÉÌÏÖÅÎÉÑ" ++msgstr "Редактировать наÑтройки приложениÑ" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" +-msgstr "õ×ÅÌÉÞÉÔØ ÍÁÓÛÔÁÂ" ++msgstr "Увеличить" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" +-msgstr "õ×ÅÌÉÞÉÔØ ÄÏËÕÍÅÎÔ" ++msgstr "Увеличить документ" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" +-msgstr "õÍÅÎØÛÉÔØ ÍÁÓÛÔÁÂ" ++msgstr "Уменьшить" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" +-msgstr "õÍÅÎØÛÉÔØ ÄÏËÕÍÅÎÔ" ++msgstr "Уменьшить документ" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" +-msgstr "ðÏ×ÅÒÎÕÔØ ÎÁÐÒÁ×Ï" ++msgstr "Повернуть направо" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" +-msgstr "ðÏ×ÅÒÎÕÔØ ÄÏËÕÍÅÎÔ ÎÁ 90 ÇÒÁÄÕÓÏ× ÐÏ ÞÁÓÏ×ÏÊ ÓÔÒÅÌËÅ" ++msgstr "Повернуть документ на 90 градуÑов по чаÑовой Ñтрелке" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" +-msgstr "ðÏ×ÅÒÎÕÔØ ÎÁÌÅ×Ï" ++msgstr "Повернуть налево" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" +-msgstr "ðÏ×ÅÒÎÕÔØ ÄÏËÕÍÅÎÔ ÎÁ 90 ÇÒÁÄÕÓÏ× ÐÒÏÔÉ× ÞÁÓÏ×ÏÊ ÓÔÒÅÌËÉ" ++msgstr "Повернуть документ на 90 градуÑов против чаÑовой Ñтрелки" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" +-msgstr "ðÅÒ×ÁÑ ÓÔÒÁÎÉÃÁ" ++msgstr "ÐŸÐµÑ€Ð²Ð°Ñ Ñтраница" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" +-msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÅÒ×ÕÀ ÓÔÒÁÎÉÃÕ" ++msgstr "Перейти на первую Ñтраницу" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" +-msgstr "óÌÅÄÕÀÝÁÑ ÓÔÒÁÎÉÃÁ" ++msgstr "СледующаÑ" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" +-msgstr "ðÅÒÅÊÔÉ ÎÁ ÓÌÅÄÕÀÝÕÀ ÓÔÒÁÎÉÃÕ" ++msgstr "Перейти на Ñледующую Ñтраницу" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" +-msgstr "ðÒÅÄÙÄÕÝÁÑ ÓÔÒÁÎÉÃÁ" ++msgstr "ПредыдущаÑ" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" +-msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÒÅÄÙÄÕÝÕÀ ÓÔÒÁÎÉÃÕ" ++msgstr "Перейти на предыдущую Ñтраницу" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" +-msgstr "ðÏÓÌÅÄÎÑÑ ÓÔÒÁÎÉÃÁ" ++msgstr "ПоÑледнÑÑ Ñтраница" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" +-msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄΠÓÔÒÁÎÉÃÕ" ++msgstr "Перейти на поÑледнбб Ñтраницу" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" +-msgstr "ï ÐÒÏÇÒÁÍÍÅ" ++msgstr "О программе" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" +-msgstr "ðÏËÁÚÁÔØ ÏÐÉÓÁÎÉÅ ÐÒÏÇÒÁÍÍÙ" ++msgstr "Показать опиÑание программы" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" +-msgstr "" ++msgstr "Полный Ñкран" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" +-msgstr "" ++msgstr "Переключить полноÑкранный режим" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" +-msgstr "ðÏËÁÚÁÔØ ÐÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×" ++msgstr "Показать панель инÑтрументов" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" +-msgstr "ðÏËÁÚÁÔØ ÉÌÉ ÓËÒÙÔØ ÐÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×" ++msgstr "Показать или Ñкрыть панель инÑтрументов" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" +-msgstr "ðÏËÁÚÁÔØ ÓÔÒÏËÕ ÓÏÓÔÏÑÎÉÑ" ++msgstr "Показать Ñтроку ÑоÑтоÑниÑ" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" +-msgstr "ðÏËÁÚÁÔØ ÉÌÉ ÓËÒÙÔØ ÓÔÒÏËÕ ÓÏÓÔÏÑÎÉÑ" ++msgstr "Показать или Ñкрыть Ñтроку ÑоÑтоÑниÑ" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" +-msgstr "ðÏËÁÚÁÔØ ÏÇÌÁ×ÌÅÎÉÅ" ++msgstr "Показать оглавление" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" +-msgstr "ðÏËÁÚÁÔØ ÉÌÉ ÓËÒÙÔØ ÏÇÌÁ×ÌÅÎÉÅ" ++msgstr "Показать или Ñкрыть оглавление" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" +-msgstr "ðÏ ÷ÙÓÏÔÅ" ++msgstr "По Ð’Ñ‹Ñоте" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" +-msgstr "íÁÓÛÔÁ ÐÏ ÒÁÚÍÅÒÕ ÓÔÒÁÎÉÃÙ" ++msgstr "МаÑштаб по размеру Ñтраницы" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" +-msgstr "ðÏ ûÉÒÉÎÅ" ++msgstr "По Ширине" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" +-msgstr "íÁÓÛÔÁ ÐÏ ÛÉÒÉÎÅ ÓÔÒÁÎÉÃÙ" ++msgstr "МаÑштаб по ширине Ñтраницы" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" +-msgstr "ïÔËÒÙÔØ PDF ÆÁÊÌ" ++msgstr "Открыть PDF файл" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" +-msgstr "PDF ÆÁÊÌÙ" ++msgstr "PDF файлы" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" +-msgstr "÷ÓÅ æÁÊÌÙ" ++msgstr "Ð’Ñе Файлы" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" +-msgstr "ðÁÒÏÌØ" ++msgstr "Пароль" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" +-msgstr "óÏÈÒÁÎÉÔØ PDF æÁÊÌ" ++msgstr "Сохранить PDF Файл" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" +-msgstr "óÔÒÁÎÉÃÁ" ++msgstr "Страница" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" +-msgstr "ÉÚ 0" ++msgstr "из 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" +-msgstr "ïÇÌÁ×ÌÅÎÉÅ" ++msgstr "Оглавление" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" +-msgstr "ïÛÉÂËÁ ÐÒÉ ÉÎÃÉÁÌÉÚÁÃÉÉ: %s\n" ++msgstr "Ошибка при инциализации: %s\n" + +-#: src/gtk/MainView.cxx:1056 +-#, fuzzy ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" +-msgstr "ì£ÇËÁÑ ÐÒÏÇÒÁÍÍÁ ÄÌÑ ÐÒÏÓÍÏÔÒÁ PDF ÆÁÊÌÏ×" ++msgstr "БыÑÑ‚Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра PDF файлов" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" + "the Free Software Foundation; either version 2 of the License, or\n" + "(at your option) any later version.\n" + msgstr "" +-"ePDFView Ñ×ÌÑÅÔÓÑ Ó×ÏÂÏÄÎÙÍ ÐÒÏÇÒÁÍÍÎÙÍ ÏÂÅÓÐÅÞÅÎÉÅÍ. \n" +-"÷Ù ×ÐÒÁ×Å ÒÁÓÐÒÏÓÔÒÁÎÑÔØ Å£ É/ÉÌÉ ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó\n" +-"ÕÓÌÏ×ÉÑÍÉ ×ÅÒÓÉÉ 2 ÌÉÂÏ ÐÏ ×ÁÛÅÍÕ ×ÙÂÏÒÕ Ó ÕÓÌÏ×ÉÑÍÉ ÂÏÌÅÅ ÐÏÚÄÎÅÊ\n" +-"×ÅÒÓÉÉ óÔÁÎÄÁÒÔÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU, ÏÐÕÂÌÉËÏ×ÁÎÎÏÊ\n" ++"ePDFView ÑвлÑетÑÑ Ñвободным программным обеÑпечением. \n" ++"Ð’Ñ‹ вправе раÑпроÑтранÑÑ‚ÑŒ её и/или модифицировать в ÑоответÑтвии Ñ\n" ++"уÑловиÑми верÑии 2 либо по вашему выбору Ñ ÑƒÑловиÑми более поздней\n" ++"верÑии Стандартной ОбщеÑтвенной Лицензии GNU, опубликованной\n" + "Free Software Foundation. \n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "GNU General Public License for more details.\n" + msgstr "" +-"íÙ ÒÁÓÐÒÏÓÔÒÁÎÑÅÍ ÄÁÎÎÕÀ ÐÒÏÇÒÁÍÍÕ × ÎÁÄÅÖÄÅ ÎÁ ÔÏ, ÞÔÏ ÏÎÁ\n" +-"ÂÕÄÅÔ ×ÁÍ ÐÏÌÅÚÎÏÊ, ÏÄÎÁËÏ îå ðòåäïóôá÷ìñåí îá îå³\n" +-"îéëáëéè çáòáîôéê, × ÔÏÍ ÞÉÓÌÅ çáòáîôéé ôï÷áòîïçï\n" +-"óïóôïñîéñ ðòé ðòïäáöå É ðòéçïäîïóôé äìñ\n" +-"éóðïìøúï÷áîéñ ÷ ëïîëòåôîùè ãåìñè. äÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ\n" +-"ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÏÚÎÁËÏÍØÔÅÓØ ÓÏ óÔÁÎÄÁÒÔÎÏÊ\n" +-"ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÅÊ GNU.\n" ++"Мы раÑпроÑтранÑем данную программу в надежде на то, что она\n" ++"будет вам полезной, однако ÐЕ ПРЕДОСТÐВЛЯЕМ ÐÐ ÐЕÐ\n" ++"ÐИКÐКИХ ГÐРÐÐТИЙ, в том чиÑле ГÐРÐÐТИИ ТОВÐРÐОГО\n" ++"СОСТОЯÐИЯ ПРИ ПРОДÐЖЕ и ПРИГОДÐОСТИ ДЛЯ\n" ++"ИСПОЛЬЗОВÐÐИЯ Ð’ КОÐКРЕТÐЫХ ЦЕЛЯХ. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ\n" ++"подробной информации ознакомьтеÑÑŒ Ñо Стандартной\n" ++"ОбщеÑтвенной Лицензией GNU.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" + "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + msgstr "" +-"÷Ù ÄÏÌÖÎÙ ÂÙÌÉ ÐÏÌÕÞÉÔØ ËÏÐÉÀ óÔÁÎÄÁÒÔÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU\n" +-"×ÍÅÓÔÅ Ó ePDFView; ÅÓÌÉ ÎÅÔ, ÎÁÐÉÛÉÔÅ ÐÉÓØÍÏ × Free Software Foundation," ++"Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n" ++"вмеÑте Ñ ePDFView; еÑли нет, напишите пиÑьмо в Free Software Foundation," + "Inc.,\n" +-"ÎÁ ÁÄÒÅÓ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++"на Ð°Ð´Ñ€ÐµÑ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" +-msgstr "" ++msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" +-msgstr "Igor Vagulin " ++msgstr "" ++"Igor Vagulin \n" ++"Sergey Starosek " + + #: src/gtk/PreferencesView.cxx:32 + msgid "Preferences" +-msgstr "îÁÓÔÒÏÊËÉ" ++msgstr "ÐаÑтройки" + + #: src/gtk/PreferencesView.cxx:46 + msgid "External Commands" +-msgstr "÷ÎÅÛÎÉÅ ðÒÏÇÒÁÍÍÙ" ++msgstr "Внешние Программы" + + #: src/gtk/PreferencesView.cxx:105 + msgid "Web _Browser:" +-msgstr "éÎÔÅÒÎÅÔ âÒÁÕÚÅÒ" ++msgstr "Интернет Браузер" + + #: src/gtk/PreferencesView.cxx:118 + #, c-format + msgid "Note: %s will be replaced by the URI." +-msgstr "úÁÍÅÔËÁ: %s ÂÕÄÅÔ ÚÁÍÅÎÅÎÏ ÎÁ URI." ++msgstr "Заметка: %s будет заменено на URI." + + #: src/gtk/PrintView.cxx:51 + msgid "Print" +-msgstr "ðÅÞÁÔØ" ++msgstr "Печать" + + #: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 + msgid "Printer" +-msgstr "ðÒÉÎÔÅÒ" ++msgstr "Принтер" + + #: src/gtk/PrintView.cxx:74 + msgid "Job" +-msgstr "úÁÄÁÎÉÅ" ++msgstr "Задание" + + #: src/gtk/PrintView.cxx:79 + msgid "Paper" +-msgstr "âÕÍÁÇÁ" ++msgstr "Бумага" + + #: src/gtk/PrintView.cxx:359 + msgid "Print Range" +-msgstr "äÉÁÐÁÚÏÎ ðÅÞÁÔÉ" ++msgstr "Диапазон Печати" + + #: src/gtk/PrintView.cxx:377 + msgid "_All pages" +-msgstr "_÷ÓÅ ÓÔÒÁÎÉÃÙ" ++msgstr "_Ð’Ñе Ñтраницы" + + #: src/gtk/PrintView.cxx:380 + msgid "_Range:" +-msgstr "_äÉÁÐÁÚÏÎ" ++msgstr "_Диапазон" + + #: src/gtk/PrintView.cxx:392 + msgid "Page Set" +-msgstr "" ++msgstr "Ðабор Ñтраниц" + + #: src/gtk/PrintView.cxx:408 + msgid "A_ll pages" +-msgstr "" ++msgstr "Ð’Ñе Ñтраницы" + + #: src/gtk/PrintView.cxx:412 + msgid "O_dd pages" +-msgstr "" ++msgstr "Ðечетные" + + #: src/gtk/PrintView.cxx:416 + msgid "_Even pages" +-msgstr "" ++msgstr "Четные" + + #: src/gtk/PrintView.cxx:420 + msgid "Copies" +-msgstr "ëÏÐÉÉ" ++msgstr "Копии" + + #: src/gtk/PrintView.cxx:437 + msgid "N_umber of copies:" +-msgstr "ëÏÌÉÞÅÓÔ×Ï ËÏÐÉÊ:" ++msgstr "КоличеÑтво копий:" + + #: src/gtk/PrintView.cxx:444 + msgid "C_ollate" +-msgstr "" ++msgstr "УпорÑдочить" + + #: src/gtk/PrintView.cxx:465 + msgid "Paper and Layout" +-msgstr "óÔÒÁÎÉÃÁ É ÒÁÚÍÅÝÅÎÉÅ" ++msgstr "Страница и макет" + + #: src/gtk/PrintView.cxx:482 + msgid "Paper _Size:" +-msgstr "òÁÚÍÅÒ ÂÕÍÁÇÉ" ++msgstr "Размер бумаги" + + #: src/gtk/PrintView.cxx:508 + msgid "Page _orientation:" +-msgstr "" ++msgstr "ОриентациÑ:" + + #: src/gtk/PrintView.cxx:539 + msgid "_Layout:" +-msgstr "òÁÚÍÅÔËÁ:" ++msgstr "Макет:" + + #: src/gtk/PrintView.cxx:568 + msgid "Output" +-msgstr "÷Ù×ÏÄ" ++msgstr "Вывод" + + #: src/gtk/PrintView.cxx:585 + msgid "_Mode:" +-msgstr "òÅÖÉÍ:" ++msgstr "Режим:" + + #: src/gtk/PrintView.cxx:613 + msgid "_Resolution:" +-msgstr "òÁÚÒÅÛÅÎÉÅ" ++msgstr "Разрешение" + + #: src/gtk/PrintView.cxx:668 + msgid "State" +-msgstr "óÏÓÔÏÑÎÉÅ" ++msgstr "СоÑтоÑние" + + #: src/gtk/PrintView.cxx:677 + msgid "Jobs" +-msgstr "úÁÄÁÎÉÑ" ++msgstr "ЗаданиÑ" + + #: src/gtk/PrintView.cxx:686 + msgid "Location" +-msgstr "" ++msgstr "РаÑположение" + + #: src/gtk/PrintView.cxx:717 + msgid "Plain" +-msgstr "" ++msgstr "Обычный" + + #: src/gtk/PrintView.cxx:723 + msgid "2 pages in 1" +-msgstr "2 ÓÔÒÁÎÉÃÙ ÎÁ 1" ++msgstr "2 Ñтраницы на 1" + + #: src/gtk/PrintView.cxx:729 + msgid "4 pages in 1" +-msgstr "2 ÓÔÒÁÎÉÃÙ ÎÁ 1" ++msgstr "4 Ñтраницы на 1" + + #: src/gtk/PrintView.cxx:744 + msgid "Portrait" +-msgstr "ëÎÉÖÎÙÊ" ++msgstr "Книга" + + #: src/gtk/PrintView.cxx:750 + msgid "Landscape" +-msgstr "áÌØÂÏÍÎÙÊ" ++msgstr "Ðльбом" + + #: src/gtk/StockIcons.cxx:40 + msgid "Find _Next" +-msgstr "îÁÊÔÉ _ÓÌÅÄÕÀÝÅÅ" ++msgstr "Ðайти _Ñледующее" + + #: src/gtk/StockIcons.cxx:41 + msgid "Find _Previous" +-msgstr "îÁÊÔÉ _ÐÒÅÄÙÄÕÝÅÅ" ++msgstr "Ðайти _предыдущее" +diff -Nurd epdfview-0.1.6-svn/po/sv.po epdfview/po/sv.po +--- epdfview-0.1.6-svn/po/sv.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/sv.po 2008-07-13 12:55:55.083198000 +0200 +@@ -0,0 +1,597 @@ ++# Swedish translation for ePDFView. ++# Copyright (C) 2007 Free Software Foundation, Inc. ++# This file is distributed under the same license as the epdfview package. ++# Daniel Nylander , 2007. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: ePDFviewer\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2007-06-10 16:45+0100\n" ++"Last-Translator: Daniel Nylander \n" ++"Language-Team: Swedish \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=utf-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "Inga sökträffar hittades!" ++ ++#: src/FindPter.cxx:195 ++#, c-format ++msgid "Searching in page %d of %d..." ++msgstr "Söker pÃ¥ sida %d av %d..." ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "Inga fel." ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "Filen hittades inte." ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "Kunde inte läsa sidkatalogen." ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "PDF-filen är skadad och kan inte repareras." ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "Filen är krypterad och lösenordet var felaktigt eller angavs inte." ++ ++#: src/IDocument.cxx:97 ++msgid "Nonexistent or invalid highlight file." ++msgstr "Icke-existerande eller ogiltig markeringsfil." ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "Ogiltig skrivare." ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "Fel vid utskrift." ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "PDF-filen tillÃ¥ter inte den Ã¥tgärden." ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "Ogiltigt sidnummer." ++ ++#: src/IDocument.cxx:112 ++msgid "File I/O error." ++msgstr "In/ut-fel." ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "Okänt fel (%d)." ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[FIL] - visa PDF-dokument" ++ ++#: src/main.cxx:72 src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "PDF-visare" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "Läser om filen %s..." ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "Läs in filen %s..." ++ ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, c-format ++msgid "of %d" ++msgstr "av %d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "Sparar dokumentet till %s..." ++ ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "Fel vid inläsning av fil" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "" ++"Lösenordet som du angav är inte ett giltigt lösenord för den här filen." ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "Fel vid sparning av fil" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "Läser in..." ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "GrÃ¥skala" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "Inaktiv" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "Stoppad" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "Behandlar" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "Okänt" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"Misslyckades med att läsa in dokumentet \"%s\".\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "Sök:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "_Arkiv" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "R_edigera" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "_Visa" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "_GÃ¥" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "_Hjälp" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "_Öppna" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "Öppna ett PDF-dokument" ++ ++#: src/gtk/MainView.cxx:99 ++msgid "_Reload" ++msgstr "_Uppdatera" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "Läs in det aktuella dokumentet igen" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "_Spara en kopia..." ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "Spara en kopia av det aktuella dokumentet" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "Skriv _ut..." ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "Skriv ut aktuellt dokument" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "_Stäng" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "Stäng det här fönstret" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "_Sök" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "Hitta ett ord i dokumentet" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "Inställningar..." ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "Ändra programmets inställningar" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "Zooma _in" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "Förstora dokumentet" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "Zooma _ut" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "Förminska dokumentet" ++ ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "Rotera Ã¥t _höger" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "Rotera dokumentet 90 grader medsols" ++ ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "Rotera Ã¥t _vänster" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "Rotera dokumentet 90 grader motsols" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "_Första sidan" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "GÃ¥ till första sidan" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "_Nästa sida" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "GÃ¥ till nästa sida" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "_FöregÃ¥ende sida" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "GÃ¥ till föregÃ¥ende sida" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "_Sista sidan" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "GÃ¥ till sista sidan" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "_Om" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "Visa information om programmet" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "_Helskärm" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "Växla helskärmsläge" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "Visa _verktygsrad" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "Visa eller dölj verktygsraden" ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "Visa _statusrad" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "Visa eller dölj statusraden" ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "Visa i_ndex" ++ ++# Kontur? ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "Visa eller dölj dokumentets sammandrag" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "Zooma till hela _fönstret" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "Gör sÃ¥ att det aktuella dokumentet fyller fönstret" ++ ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "Zooma till hela fönstrets _bredd" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "Gör sÃ¥ att det aktuella dokumentet fyller fönstrets bredd" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "Öppna PDF-fil" ++ ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "Portable Document Format-filer (PDF)" ++ ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "Alla filer" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "Lösenord" ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "Spara PDF-fil" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "Sida" ++ ++#: src/gtk/MainView.cxx:868 ++msgid "of 0" ++msgstr "av 0" ++ ++#: src/gtk/MainView.cxx:921 ++msgid "Index" ++msgstr "Index" ++ ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 ++#, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "Fel vid byggandet av gränssnittshanteraren: %s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "En resurssnÃ¥l PDF-visare" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "" ++"ePDFView är fri programvara. Du kan distribuera det och/eller\n" ++"modifiera det under villkoren i GNU General Public License, publicerad\n" ++"av Free Software Foundation, antingen version 2 eller (om du sÃ¥ vill)\n" ++"nÃ¥gon senare version.\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "" ++"ePDFView distribueras i hopp om att det ska vara användbart,\n" ++"men UTAN NÃ…GON SOM HELST GARANTI, även utan underförstÃ¥dd garanti\n" ++"om SÄLJBARHET eller LÄMPLIGHET FÖR NÃ…GOT SPECIELLT ÄNDAMÃ…L. Se GNU\n" ++"General Public License för ytterligare information.\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "" ++"Du bör ha fÃ¥tt en kopia av GNU General Public License tillsammans\n" ++"med detta program. Om inte, skriv till Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++msgid "translator-credits" ++msgstr "Daniel Nylander " ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "Inställningar" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "Externa kommandon" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "Webb_läsare:" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "Observera: %s kommer att ersättas av URI:n." ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "Skriv ut" ++ ++#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "Skrivare" ++ ++#: src/gtk/PrintView.cxx:74 ++msgid "Job" ++msgstr "Jobb" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "Papper" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "Utskriftsintervall" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "_Alla sidor" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "_Intervall:" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "Sidinställningar" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "A_lla sidor" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "U_dda sidnummer" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "_Jämna sidnummer" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "Kopior" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "An_tal kopior:" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "S_ortera" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "Papper och layout" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "Pappersto_rlek:" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "Sid_orientering:" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "_Layout:" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "Utmatning" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "_Läge:" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "_Upplösning:" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "TillstÃ¥nd" ++ ++#: src/gtk/PrintView.cxx:677 ++msgid "Jobs" ++msgstr "Jobb" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "Plats" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "Vanligt" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "2 sidor pÃ¥ 1" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "4 sidor pÃ¥ 1" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "StÃ¥ende" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "Liggande" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "Sök _nästa" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "Sök _föregÃ¥ende" +diff -Nurd epdfview-0.1.6-svn/po/vi.po epdfview/po/vi.po +--- epdfview-0.1.6-svn/po/vi.po 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/vi.po 2008-07-13 12:55:55.073198000 +0200 +@@ -7,7 +7,7 @@ + msgstr "" + "Project-Id-Version: ePDFView 0.1.5\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" + "PO-Revision-Date: 2006-06-14 20:11+0100\n" + "Last-Translator: VnPenguin \n" + "Language-Team: Vietnamese \n" +@@ -74,11 +74,11 @@ + msgid "Unknown error (%d)." + msgstr "Lá»—i không xác định (%d)." + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[FILE] - xem tài liệu PDF" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "Trình xem PDF" + +@@ -92,7 +92,7 @@ + msgid "Loading file %s..." + msgstr "Tải file %s..." + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "của %d" +@@ -102,39 +102,47 @@ + msgid "Saving document to %s..." + msgstr "Äang ghi tài liệu vào %s..." + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "Lá»—i tải file" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "Mật mã mà bạn cung cấp là không hợp lệ cho file này." + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" + msgstr "Lá»—i ghi file" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "Äang tải ..." + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "Kiểu Ä‘en trắng" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "Nghỉ" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "Dừng" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "Äang xá»­ lý" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "Không xác định" + +@@ -151,244 +159,260 @@ + msgid "Find:" + msgstr "Tìm kiếm:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "_File" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "_Sá»­a đổi" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "_Xem" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "_Chuyển trang" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "_Trợ giúp" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "_Mở file" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "Mở má»™t tài liệu PDF" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "_Tải lại" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "Tải lại tài liệu hiện tại" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "_LÆ°u má»™t bản..." + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" + msgstr "LÆ°u má»™t bản của tài liệu hiện tại" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "_In ra..." + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" + msgstr "In tài liệu hiện tại" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "_Äóng" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "Äóng cá»­a sổ này" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "_Tìm" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "Tìm má»™t từ trong tài liệu" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "Xác lập..." + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "Thay đổi các xác lập của ứng dụng" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" + msgstr "Phóng _to" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "Phóng to tài liệu" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" + msgstr "Thu _nhá»" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "Thu nhá» tài liệu" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" + msgstr "Quay _phải" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "Quay tài liệu hiện tại 90 Ä‘á»™ theo chiá»u kim đồng hồ" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" + msgstr "Quay _trái" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "Quay tài liệu hiện tại 90 Ä‘á»™ theo ngược chiá»u kim đồng hồ" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "_Trang đầu tiên" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "Äi đến trang đầu tiên" + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "Trang _kế" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "Äi đến trang kế tiếp" + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "Trang trÆ°á»›c" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "Äi đến trang trÆ°á»›c" + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "Trang cuối" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "Äi đến trang cuối" + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "_Vá»..." + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "Hiển thị danh sách đóng góp" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" + msgstr "" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" + msgstr "" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "Hiển thị thanh công cụ" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "Hiển thị hoặc dấu thanh công cụ" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" + msgstr "Hiển thị thanh trạng thái" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "Hiển thị hoặc dấu thanh trạng thái" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "Hiển thị chỉ mục" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "Hiển thị hoặc dấu hình dáng bên ngoài của tài liệu" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "Hiệu chỉnh _hợp vá»›i cá»­a sổ" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "Hiệu chỉnh tài liệu hiện tại lấp đầy cá»­a sổ" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "Hiệu chỉnh theo bá» _rá»™ng trang" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "Hiệu chỉnh tài liệu hiện tại hợp vá»›i bá» rá»™ng trang" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "Mở file PDF" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "file PDF" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "Tất cả các file" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "Mật mã" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" + msgstr "LÆ°u file PDF" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "Trang" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "0/0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "Chỉ mục" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "Lá»—i khi tạo quản lý giao diện ngÆ°á»i dùng: %s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "Má»™t trình xem PDF nhá» gá»n" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -400,7 +424,7 @@ + "bởi Free Software Foundation; phiên bản 2 hoặc (theo lá»±a chá»n của bạn)\n" + " bất kì phiên bản má»›i nào.\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -412,7 +436,7 @@ + "ngay cả cho MERCHANTABILITY hoặc FITNESS FOR A PARTICULAR PURPOSE.\n" + " Xem giấy phép GNU GPL để biết thêm chi tiết.\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -422,11 +446,11 @@ + "ePDFView; nếu không, thì hãy liên lạc Free Software Foundation, Inc., 59 " + "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "VnPenguin " + +diff -Nurd epdfview-0.1.6-svn/po/zh_CN.po epdfview/po/zh_CN.po +--- epdfview-0.1.6-svn/po/zh_CN.po 1970-01-01 01:00:00.000000000 +0100 ++++ epdfview/po/zh_CN.po 2008-07-13 12:55:55.083198000 +0200 +@@ -0,0 +1,593 @@ ++# Simplified Chinese Messages for epdfview. ++# Copyright (C) 2007 Free Software Foundation, Inc. ++# This file is distributed under the same license as the epdfview package. ++# Changyan Xie , 2007. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: epdfview 0.1.5\n" ++"Report-Msgid-Bugs-To: jordi@emma-soft.com\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2006-06-19 10:47+0800\n" ++"Last-Translator: Changyan Xie \n" ++"Language-Team: Changyan Xie \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: src/FindPter.cxx:187 ++msgid "No Results Found!" ++msgstr "找ä¸åˆ°ä»»ä½•ç»“æžœï¼" ++ ++#: src/FindPter.cxx:195 ++#, c-format ++msgid "Searching in page %d of %d..." ++msgstr "正在查找 %2$d 页中的第 %1$d 页…" ++ ++#: src/IDocument.cxx:82 ++msgid "No error." ++msgstr "没有错误。" ++ ++#: src/IDocument.cxx:85 ++msgid "File not found." ++msgstr "找ä¸åˆ°æ–‡ä»¶ã€‚" ++ ++#: src/IDocument.cxx:88 ++msgid "Couldn't read the page catalog." ++msgstr "无法读å–页é¢åˆ†ç±»ã€‚" ++ ++#: src/IDocument.cxx:91 ++msgid "The PDF file is damaged and can't be repaired." ++msgstr "PDF 文件å—æŸè€Œä¸”无法修å¤ã€‚" ++ ++#: src/IDocument.cxx:94 ++msgid "The file is encrypted and the password was incorrect or not supplied." ++msgstr "文件已加密而且密ç æ˜¯ä¸æ­£ç¡®æˆ–是无法æ供的。" ++ ++#: src/IDocument.cxx:97 ++msgid "Nonexistent or invalid highlight file." ++msgstr "ä¸å­˜åœ¨æˆ–无效的高亮度文件。" ++ ++#: src/IDocument.cxx:100 ++msgid "Invalid printer." ++msgstr "无效的打å°æœºã€‚" ++ ++#: src/IDocument.cxx:103 ++msgid "Error during printing." ++msgstr "打å°æ—¶å‘生错误" ++ ++#: src/IDocument.cxx:106 ++msgid "The PDF file doesn't allow that operation." ++msgstr "PDF 文件ä¸å…许该项æ“作。" ++ ++#: src/IDocument.cxx:109 ++msgid "Invalid page number." ++msgstr "无效的页ç ã€‚" ++ ++#: src/IDocument.cxx:112 ++msgid "File I/O error." ++msgstr "文件 I/O 错误。" ++ ++#: src/IDocument.cxx:115 ++#, c-format ++msgid "Unknown error (%d)." ++msgstr "ä¸æ˜Žçš„错误 (%d)。" ++ ++#: src/main.cxx:59 ++msgid "[FILE] - view PDF documents" ++msgstr "[FILE] - æµè§ˆ PDF 文件" ++ ++#: src/main.cxx:72 src/MainPter.cxx:153 ++msgid "PDF Viewer" ++msgstr "PDF æµè§ˆå™¨" ++ ++#: src/MainPter.cxx:233 ++#, c-format ++msgid "Reloading file %s..." ++msgstr "正在é‡æ–°è£…载文件 %s…" ++ ++#: src/MainPter.cxx:237 ++#, c-format ++msgid "Loading file %s..." ++msgstr "装载文件 %s…" ++ ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 ++#, c-format ++msgid "of %d" ++msgstr "之于 %d" ++ ++#: src/MainPter.cxx:588 ++#, c-format ++msgid "Saving document to %s..." ++msgstr "ä¿å­˜æ–‡ä»¶è‡³ %s…" ++ ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 ++msgid "Error Loading File" ++msgstr "装载文件时å‘生错误" ++ ++#: src/MainPter.cxx:872 ++msgid "The password you have supplied is not a valid password for this file." ++msgstr "您æ供的密ç å¯¹äºŽæ­¤æ–‡ä»¶æ— æ•ˆã€‚" ++ ++#: src/MainPter.cxx:953 ++msgid "Error Saving File" ++msgstr "ä¿å­˜æ–‡ä»¶æ—¶å‘生错误" ++ ++#: src/PagePter.cxx:338 ++msgid "Loading..." ++msgstr "装载…" ++ ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 ++msgid "Grayscale" ++msgstr "ç°åº¦" ++ ++#: src/PrintPter.cxx:409 ++msgid "Idle" ++msgstr "闲置" ++ ++#: src/PrintPter.cxx:412 ++msgid "Stopped" ++msgstr "å·²åœæ­¢" ++ ++#: src/PrintPter.cxx:415 ++msgid "Processing" ++msgstr "处ç†ä¸­" ++ ++#: src/PrintPter.cxx:418 ++msgid "Unknown" ++msgstr "未知" ++ ++#: src/PDFDocument.cxx:272 ++#, c-format ++msgid "" ++"Failed to load document '%s'.\n" ++"%s\n" ++msgstr "" ++"装载文件 '%s' 时失败。\n" ++"%s\n" ++ ++#: src/gtk/FindView.cxx:51 ++msgid "Find:" ++msgstr "查找:" ++ ++#: src/gtk/MainView.cxx:89 ++msgid "_File" ++msgstr "文件(_F)" ++ ++#: src/gtk/MainView.cxx:90 ++msgid "_Edit" ++msgstr "编辑(_E)" ++ ++#: src/gtk/MainView.cxx:91 ++msgid "_View" ++msgstr "æµè§ˆ(_V)" ++ ++#: src/gtk/MainView.cxx:92 ++msgid "_Go" ++msgstr "å‰å¾€(_G)" ++ ++#: src/gtk/MainView.cxx:93 ++msgid "_Help" ++msgstr "帮助(_H)" ++ ++#: src/gtk/MainView.cxx:95 ++msgid "_Open" ++msgstr "打开(_O)" ++ ++#: src/gtk/MainView.cxx:96 ++msgid "Open a PDF document" ++msgstr "打开 PDF 文件" ++ ++#: src/gtk/MainView.cxx:99 ++msgid "_Reload" ++msgstr "é‡æ–°è£…è½½(_R)" ++ ++#: src/gtk/MainView.cxx:100 ++msgid "Reload the current document" ++msgstr "é‡æ–°è£…载当å‰æ–‡ä»¶" ++ ++#: src/gtk/MainView.cxx:103 ++msgid "_Save a Copy..." ++msgstr "ä¿å­˜å‰¯æœ¬(_S)…" ++ ++#: src/gtk/MainView.cxx:104 ++msgid "Save a copy of the current document" ++msgstr "ä¿å­˜å½“å‰æ–‡ä»¶çš„副本" ++ ++#: src/gtk/MainView.cxx:108 ++msgid "_Print..." ++msgstr "打å°(_P)…" ++ ++#: src/gtk/MainView.cxx:109 ++msgid "Print the current document" ++msgstr "打å°å½“å‰æ–‡ä»¶" ++ ++#: src/gtk/MainView.cxx:113 ++msgid "_Close" ++msgstr "关闭(_C)" ++ ++#: src/gtk/MainView.cxx:114 ++msgid "Close this window" ++msgstr "关闭此窗å£" ++ ++#: src/gtk/MainView.cxx:117 ++msgid "_Find" ++msgstr "查找(_F)" ++ ++#: src/gtk/MainView.cxx:118 ++msgid "Find a word in the document" ++msgstr "在文件中查找字è¯" ++ ++#: src/gtk/MainView.cxx:121 ++msgid "Preferences..." ++msgstr "å好设定…" ++ ++#: src/gtk/MainView.cxx:122 ++msgid "Change the application's preferences" ++msgstr "改å˜åº”用软件的å好设定" ++ ++#: src/gtk/MainView.cxx:125 ++msgid "Zoom _In" ++msgstr "放大(_I)" ++ ++#: src/gtk/MainView.cxx:126 ++msgid "Enlarge the document" ++msgstr "放大文件" ++ ++#: src/gtk/MainView.cxx:129 ++msgid "Zoom _Out" ++msgstr "缩å°(_O)" ++ ++#: src/gtk/MainView.cxx:130 ++msgid "Shrink the document" ++msgstr "缩å°æ–‡ä»¶" ++ ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 ++msgid "Rotate _Right" ++msgstr "å‘å³æ—‹è½¬(_R)" ++ ++#: src/gtk/MainView.cxx:134 ++msgid "Rotate the document 90 degrees clockwise" ++msgstr "顺时针旋转文件 90 度" ++ ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 ++msgid "Rotate _Left" ++msgstr "å‘左旋转(_L)" ++ ++#: src/gtk/MainView.cxx:138 ++msgid "Rotate the document 90 degrees counter-clockwise" ++msgstr "逆时针旋转文件 90 度" ++ ++#: src/gtk/MainView.cxx:141 ++msgid "_First Page" ++msgstr "第一页(_F)" ++ ++#: src/gtk/MainView.cxx:142 ++msgid "Go to the first page" ++msgstr "å‰å¾€ç¬¬ä¸€é¡µ" ++ ++#: src/gtk/MainView.cxx:145 ++msgid "_Next Page" ++msgstr "下一页(_N)" ++ ++#: src/gtk/MainView.cxx:146 ++msgid "Go to the next page" ++msgstr "å‰å¾€ä¸‹ä¸€é¡µ" ++ ++#: src/gtk/MainView.cxx:149 ++msgid "_Previous Page" ++msgstr "上一页(_P)" ++ ++#: src/gtk/MainView.cxx:150 ++msgid "Go to the previous page" ++msgstr "å‰å¾€ä¸Šä¸€é¡µ" ++ ++#: src/gtk/MainView.cxx:153 ++msgid "_Last Page" ++msgstr "最åŽä¸€é¡µ(_L)" ++ ++#: src/gtk/MainView.cxx:154 ++msgid "Go to the last page" ++msgstr "å‰å¾€æœ€åŽä¸€é¡µ" ++ ++#: src/gtk/MainView.cxx:157 ++msgid "_About" ++msgstr "关于(_A)" ++ ++#: src/gtk/MainView.cxx:158 ++msgid "Display application's credits" ++msgstr "显示应用程åºçš„æ„Ÿè°¢" ++ ++#: src/gtk/MainView.cxx:175 ++msgid "F_ull screen" ++msgstr "å…¨å±(_F)" ++ ++#: src/gtk/MainView.cxx:176 ++msgid "Toggle full screen window" ++msgstr "开关全å±æ¨¡å¼" ++ ++#: src/gtk/MainView.cxx:179 ++msgid "Show _Toolbar" ++msgstr "显示工具æ (_T)" ++ ++#: src/gtk/MainView.cxx:180 ++msgid "Show or hide the toolbar" ++msgstr "显示或éšè—工具æ " ++ ++#: src/gtk/MainView.cxx:183 ++msgid "Show _Statusbar" ++msgstr "显示状æ€æ (_S)" ++ ++#: src/gtk/MainView.cxx:184 ++msgid "Show or hide the statusbar" ++msgstr "显示或éšè—状æ€æ " ++ ++#: src/gtk/MainView.cxx:187 ++msgid "Show I_ndex" ++msgstr "显示索引(_N)" ++ ++#: src/gtk/MainView.cxx:188 ++msgid "Show or hide the document's outline" ++msgstr "显示或éšè—文件外框" ++ ++#: src/gtk/MainView.cxx:191 ++msgid "Zoom to _Fit" ++msgstr "符åˆçª—å£(_F)" ++ ++#: src/gtk/MainView.cxx:192 ++msgid "Make the current document fill the window" ++msgstr "将当å‰æ–‡ä»¶å¡«æ»¡çª—å£" ++ ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 ++msgid "Zoom to _Width" ++msgstr "符åˆå®½åº¦(_W)" ++ ++#: src/gtk/MainView.cxx:196 ++msgid "Make the current document fill the window width" ++msgstr "将当å‰æ–‡ä»¶ç¬¦åˆçª—å£å®½åº¦" ++ ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 ++msgid "Open PDF File" ++msgstr "打开 PDF 文件" ++ ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 ++msgid "Portable Document Format (PDF) Files" ++msgstr "å¯æºå¼æ–‡ä»¶æ ¼å¼ (PDF) 文件" ++ ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 ++msgid "All Files" ++msgstr "所有文件" ++ ++#: src/gtk/MainView.cxx:404 ++msgid "Password" ++msgstr "密ç " ++ ++#: src/gtk/MainView.cxx:428 ++msgid "Save PDF File" ++msgstr "ä¿å­˜ PDF 文件" ++ ++#: src/gtk/MainView.cxx:858 ++msgid "Page" ++msgstr "页é¢" ++ ++#: src/gtk/MainView.cxx:868 ++msgid "of 0" ++msgstr "之于 0" ++ ++#: src/gtk/MainView.cxx:921 ++msgid "Index" ++msgstr "索引" ++ ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 ++#, c-format ++msgid "Error building UI manager: %s\n" ++msgstr "建立 UI 管ç†å‘˜æ—¶å‘生错误:%s\n" ++ ++#: src/gtk/MainView.cxx:1108 ++msgid "A lightweight PDF viewer" ++msgstr "è½»é‡çº§çš„ PDF æµè§ˆå™¨" ++ ++#: src/gtk/MainView.cxx:1111 ++msgid "" ++"ePDFView is free software; you can redistribute it and/or modify\n" ++"it under the terms of the GNU General Public License as published by\n" ++"the Free Software Foundation; either version 2 of the License, or\n" ++"(at your option) any later version.\n" ++msgstr "" ++"ePDFView 为自由软件;您å¯ä¾æ®è‡ªç”±è½¯ä»¶åŸºé‡‘会所å‘表的 GNU 通用公共授æƒ\n" ++"æ¡æ¬¾è§„定,就本程åºé‡æ–°åˆ†å‘与ï¼æˆ–修改;无论您ä¾æ®çš„是本授æƒçš„第二版或\n" ++"(您自行选择的)任何ç¨åŽå‘行的版本。\n" ++ ++#: src/gtk/MainView.cxx:1115 ++msgid "" ++"ePDFView is distributes in the hope that it will be useful,\n" ++"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" ++"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" ++"GNU General Public License for more details.\n" ++msgstr "" ++"ePDFView 系基于使用目的而加以分å‘,然而ä¸è´Ÿä»»ä½•æ‹…ä¿è´£ä»»ï¼›äº¦æ— å¯¹é€‚售性\n" ++"或特定目的适用性所为的默示性担ä¿ã€‚详情请å‚ç…§ GNU 通用公共授æƒã€‚\n" ++ ++#: src/gtk/MainView.cxx:1119 ++msgid "" ++"You should have received a copy of the GNU General Public License\n" ++"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" ++"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++msgstr "" ++"您应已收到附éšäºŽ ePDFView çš„ GNU 通用公共授æƒçš„副本;如无,请写信至\n" ++"自由软件基金会: \n" ++"59 Temple Place – Suite 330, Boston, Ma 02111-1307, USA。\n" ++ ++#: src/gtk/MainView.cxx:1128 ++msgid "ePDFView" ++msgstr "ePDFView" ++ ++#: src/gtk/MainView.cxx:1135 ++msgid "translator-credits" ++msgstr "è°¢é•¿é› " ++ ++#: src/gtk/PreferencesView.cxx:32 ++msgid "Preferences" ++msgstr "å好设定" ++ ++#: src/gtk/PreferencesView.cxx:46 ++msgid "External Commands" ++msgstr "外部命令" ++ ++#: src/gtk/PreferencesView.cxx:105 ++msgid "Web _Browser:" ++msgstr "网页æµè§ˆå™¨(_B):" ++ ++#: src/gtk/PreferencesView.cxx:118 ++#, c-format ++msgid "Note: %s will be replaced by the URI." ++msgstr "注æ„:%s 将会被 URI 所å–代。" ++ ++#: src/gtk/PrintView.cxx:51 ++msgid "Print" ++msgstr "打å°" ++ ++#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659 ++msgid "Printer" ++msgstr "打å°æœº" ++ ++#: src/gtk/PrintView.cxx:74 ++msgid "Job" ++msgstr "工作" ++ ++#: src/gtk/PrintView.cxx:79 ++msgid "Paper" ++msgstr "纸张" ++ ++#: src/gtk/PrintView.cxx:359 ++msgid "Print Range" ++msgstr "打å°èŒƒå›´" ++ ++#: src/gtk/PrintView.cxx:377 ++msgid "_All pages" ++msgstr "所有页é¢(_A)" ++ ++#: src/gtk/PrintView.cxx:380 ++msgid "_Range:" ++msgstr "范围(_R):" ++ ++#: src/gtk/PrintView.cxx:392 ++msgid "Page Set" ++msgstr "页é¢è®¾å®š" ++ ++#: src/gtk/PrintView.cxx:408 ++msgid "A_ll pages" ++msgstr "所有页é¢(_L)" ++ ++#: src/gtk/PrintView.cxx:412 ++msgid "O_dd pages" ++msgstr "奇数页é¢(_D)" ++ ++#: src/gtk/PrintView.cxx:416 ++msgid "_Even pages" ++msgstr "å¶æ•°é¡µé¢(_E)" ++ ++#: src/gtk/PrintView.cxx:420 ++msgid "Copies" ++msgstr "份数" ++ ++#: src/gtk/PrintView.cxx:437 ++msgid "N_umber of copies:" ++msgstr "副本的数é‡ï¼š" ++ ++#: src/gtk/PrintView.cxx:444 ++msgid "C_ollate" ++msgstr "自动分页(_O)" ++ ++#: src/gtk/PrintView.cxx:465 ++msgid "Paper and Layout" ++msgstr "纸张和版é¢" ++ ++#: src/gtk/PrintView.cxx:482 ++msgid "Paper _Size:" ++msgstr "纸张大å°(_S):" ++ ++#: src/gtk/PrintView.cxx:508 ++msgid "Page _orientation:" ++msgstr "纸张方å‘(_O):" ++ ++#: src/gtk/PrintView.cxx:539 ++msgid "_Layout:" ++msgstr "版é¢(_L)" ++ ++#: src/gtk/PrintView.cxx:568 ++msgid "Output" ++msgstr "输出" ++ ++#: src/gtk/PrintView.cxx:585 ++msgid "_Mode:" ++msgstr "模å¼(_M):" ++ ++#: src/gtk/PrintView.cxx:613 ++msgid "_Resolution:" ++msgstr "分辨率(_R):" ++ ++#: src/gtk/PrintView.cxx:668 ++msgid "State" ++msgstr "状æ€" ++ ++#: src/gtk/PrintView.cxx:677 ++msgid "Jobs" ++msgstr "工作" ++ ++#: src/gtk/PrintView.cxx:686 ++msgid "Location" ++msgstr "ä½ç½®" ++ ++#: src/gtk/PrintView.cxx:717 ++msgid "Plain" ++msgstr "普通" ++ ++#: src/gtk/PrintView.cxx:723 ++msgid "2 pages in 1" ++msgstr "两页åˆä¸€" ++ ++#: src/gtk/PrintView.cxx:729 ++msgid "4 pages in 1" ++msgstr "四页åˆä¸€" ++ ++#: src/gtk/PrintView.cxx:744 ++msgid "Portrait" ++msgstr "纵å‘" ++ ++#: src/gtk/PrintView.cxx:750 ++msgid "Landscape" ++msgstr "横å‘" ++ ++#: src/gtk/StockIcons.cxx:40 ++msgid "Find _Next" ++msgstr "查找下一个(_N)" ++ ++#: src/gtk/StockIcons.cxx:41 ++msgid "Find _Previous" ++msgstr "查找上一个(_P)" +diff -Nurd epdfview-0.1.6-svn/po/zh_TW.po epdfview/po/zh_TW.po +--- epdfview-0.1.6-svn/po/zh_TW.po 2008-07-13 12:57:47.543198000 +0200 ++++ epdfview/po/zh_TW.po 2008-07-13 12:55:55.083198000 +0200 +@@ -1,14 +1,13 @@ + # Traditional Chinese Messages for epdfview. +-# Copyright (C) 2006 Free Software Foundation, Inc. + # This file is distributed under the same license as the epdfview package. +-# Wei-Lun Chao , 2006. ++# Wei-Lun Chao , 2006, 07. + # + msgid "" + msgstr "" +-"Project-Id-Version: epdfview 0.1.5\n" ++"Project-Id-Version: epdfview 0.1.6\n" + "Report-Msgid-Bugs-To: jordi@emma-soft.com\n" +-"POT-Creation-Date: 2007-02-26 17:47+0100\n" +-"PO-Revision-Date: 2006-06-19 10:47+0800\n" ++"POT-Creation-Date: 2008-04-14 13:27+0200\n" ++"PO-Revision-Date: 2007-04-20 12:47+0800\n" + "Last-Translator: Wei-Lun Chao \n" + "Language-Team: Chinese (traditional) \n" + "MIME-Version: 1.0\n" +@@ -74,11 +73,11 @@ + msgid "Unknown error (%d)." + msgstr "ä¸æ˜Žçš„錯誤 (%d)。" + +-#: src/main.cxx:38 ++#: src/main.cxx:59 + msgid "[FILE] - view PDF documents" + msgstr "[FILE] - 檢視 PDF 文件" + +-#: src/main.cxx:51 src/MainPter.cxx:153 ++#: src/main.cxx:72 src/MainPter.cxx:153 + msgid "PDF Viewer" + msgstr "PDF 檢視器" + +@@ -92,7 +91,7 @@ + msgid "Loading file %s..." + msgstr "載入檔案 %s…" + +-#: src/MainPter.cxx:413 src/MainPter.cxx:886 ++#: src/MainPter.cxx:413 src/MainPter.cxx:892 + #, c-format + msgid "of %d" + msgstr "之於 %d" +@@ -102,39 +101,47 @@ + msgid "Saving document to %s..." + msgstr "儲存文件至 %s…" + +-#: src/MainPter.cxx:826 src/MainPter.cxx:865 ++#: src/MainPter.cxx:832 src/MainPter.cxx:871 + msgid "Error Loading File" + msgstr "載入檔案時發生錯誤" + +-#: src/MainPter.cxx:866 ++#: src/MainPter.cxx:872 + msgid "The password you have supplied is not a valid password for this file." + msgstr "您æ供的密碼å°æ–¼æ­¤æª”案無效。" + +-#: src/MainPter.cxx:947 ++#: src/MainPter.cxx:953 + msgid "Error Saving File" + msgstr "儲存檔案時發生錯誤" + +-#: src/PagePter.cxx:292 ++#: src/PagePter.cxx:338 + msgid "Loading..." + msgstr "載入…" + +-#: src/PrintPter.cxx:295 ++#: src/PrintPter.cxx:252 ++msgid "A4" ++msgstr "" ++ ++#: src/PrintPter.cxx:280 ++msgid "300 DPI" ++msgstr "" ++ ++#: src/PrintPter.cxx:308 + msgid "Grayscale" + msgstr "ç°éšŽ" + +-#: src/PrintPter.cxx:395 ++#: src/PrintPter.cxx:409 + msgid "Idle" + msgstr "é–’ç½®" + +-#: src/PrintPter.cxx:398 ++#: src/PrintPter.cxx:412 + msgid "Stopped" + msgstr "å·²åœæ­¢" + +-#: src/PrintPter.cxx:401 ++#: src/PrintPter.cxx:415 + msgid "Processing" + msgstr "處ç†ä¸­" + +-#: src/PrintPter.cxx:404 ++#: src/PrintPter.cxx:418 + msgid "Unknown" + msgstr "未知" + +@@ -151,244 +158,260 @@ + msgid "Find:" + msgstr "尋找:" + +-#: src/gtk/MainView.cxx:87 ++#: src/gtk/MainView.cxx:89 + msgid "_File" + msgstr "檔案(_F)" + +-#: src/gtk/MainView.cxx:88 ++#: src/gtk/MainView.cxx:90 + msgid "_Edit" + msgstr "編輯(_E)" + +-#: src/gtk/MainView.cxx:89 ++#: src/gtk/MainView.cxx:91 + msgid "_View" + msgstr "檢視(_V)" + +-#: src/gtk/MainView.cxx:90 ++#: src/gtk/MainView.cxx:92 + msgid "_Go" + msgstr "å‰å¾€(_G)" + +-#: src/gtk/MainView.cxx:91 ++#: src/gtk/MainView.cxx:93 + msgid "_Help" + msgstr "求助(_H)" + +-#: src/gtk/MainView.cxx:93 ++#: src/gtk/MainView.cxx:95 + msgid "_Open" + msgstr "é–‹å•Ÿ(_O)" + +-#: src/gtk/MainView.cxx:94 ++#: src/gtk/MainView.cxx:96 + msgid "Open a PDF document" + msgstr "é–‹å•Ÿ PDF 文件" + +-#: src/gtk/MainView.cxx:97 ++#: src/gtk/MainView.cxx:99 + msgid "_Reload" + msgstr "é‡æ–°è¼‰å…¥(_R)" + +-#: src/gtk/MainView.cxx:98 ++#: src/gtk/MainView.cxx:100 + msgid "Reload the current document" + msgstr "é‡æ–°è¼‰å…¥ç›®å‰æ–‡ä»¶" + +-#: src/gtk/MainView.cxx:101 ++#: src/gtk/MainView.cxx:103 + msgid "_Save a Copy..." + msgstr "儲存複本(_S)…" + +-#: src/gtk/MainView.cxx:102 ++#: src/gtk/MainView.cxx:104 + msgid "Save a copy of the current document" + msgstr "儲存目å‰æ–‡ä»¶çš„複本" + +-#: src/gtk/MainView.cxx:106 ++#: src/gtk/MainView.cxx:108 + msgid "_Print..." + msgstr "列å°(_P)…" + +-#: src/gtk/MainView.cxx:107 ++#: src/gtk/MainView.cxx:109 + msgid "Print the current document" + msgstr "列å°ç›®å‰æ–‡ä»¶" + +-#: src/gtk/MainView.cxx:111 ++#: src/gtk/MainView.cxx:113 + msgid "_Close" + msgstr "關閉(_C)" + +-#: src/gtk/MainView.cxx:112 ++#: src/gtk/MainView.cxx:114 + msgid "Close this window" + msgstr "關閉此視窗" + +-#: src/gtk/MainView.cxx:115 ++#: src/gtk/MainView.cxx:117 + msgid "_Find" + msgstr "尋找(_F)" + +-#: src/gtk/MainView.cxx:116 ++#: src/gtk/MainView.cxx:118 + msgid "Find a word in the document" + msgstr "在文件中尋找字詞" + +-#: src/gtk/MainView.cxx:119 ++#: src/gtk/MainView.cxx:121 + msgid "Preferences..." + msgstr "å好設定…" + +-#: src/gtk/MainView.cxx:120 ++#: src/gtk/MainView.cxx:122 + msgid "Change the application's preferences" + msgstr "改變應用軟體的å好設定" + +-#: src/gtk/MainView.cxx:123 ++#: src/gtk/MainView.cxx:125 + msgid "Zoom _In" + msgstr "放大(_I)" + +-#: src/gtk/MainView.cxx:124 ++#: src/gtk/MainView.cxx:126 + msgid "Enlarge the document" + msgstr "放大文件" + +-#: src/gtk/MainView.cxx:127 ++#: src/gtk/MainView.cxx:129 + msgid "Zoom _Out" + msgstr "縮å°(_O)" + +-#: src/gtk/MainView.cxx:128 ++#: src/gtk/MainView.cxx:130 + msgid "Shrink the document" + msgstr "收縮文件" + +-#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43 ++#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43 + msgid "Rotate _Right" + msgstr "å‘å³æ—‹è½‰(_R)" + +-#: src/gtk/MainView.cxx:132 ++#: src/gtk/MainView.cxx:134 + msgid "Rotate the document 90 degrees clockwise" + msgstr "順時é‡æ—‹è½‰æ–‡ä»¶ 90 度" + +-#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42 ++#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42 + msgid "Rotate _Left" + msgstr "å‘左旋轉(_L)" + +-#: src/gtk/MainView.cxx:136 ++#: src/gtk/MainView.cxx:138 + msgid "Rotate the document 90 degrees counter-clockwise" + msgstr "逆時é‡æ—‹è½‰æ–‡ä»¶ 90 度" + +-#: src/gtk/MainView.cxx:139 ++#: src/gtk/MainView.cxx:141 + msgid "_First Page" + msgstr "首é (_F)" + +-#: src/gtk/MainView.cxx:140 ++#: src/gtk/MainView.cxx:142 + msgid "Go to the first page" + msgstr "å‰å¾€ç¬¬ä¸€é " + +-#: src/gtk/MainView.cxx:143 ++#: src/gtk/MainView.cxx:145 + msgid "_Next Page" + msgstr "下é (_N)" + +-#: src/gtk/MainView.cxx:144 ++#: src/gtk/MainView.cxx:146 + msgid "Go to the next page" + msgstr "å‰å¾€ä¸‹ä¸€é " + +-#: src/gtk/MainView.cxx:147 ++#: src/gtk/MainView.cxx:149 + msgid "_Previous Page" + msgstr "上é (_P)" + +-#: src/gtk/MainView.cxx:148 ++#: src/gtk/MainView.cxx:150 + msgid "Go to the previous page" + msgstr "å‰å¾€ä¸Šä¸€é " + +-#: src/gtk/MainView.cxx:151 ++#: src/gtk/MainView.cxx:153 + msgid "_Last Page" + msgstr "末é (_L)" + +-#: src/gtk/MainView.cxx:152 ++#: src/gtk/MainView.cxx:154 + msgid "Go to the last page" + msgstr "å‰å¾€æœ€æœ«é " + +-#: src/gtk/MainView.cxx:155 ++#: src/gtk/MainView.cxx:157 + msgid "_About" + msgstr "關於(_A)" + +-#: src/gtk/MainView.cxx:156 ++#: src/gtk/MainView.cxx:158 + msgid "Display application's credits" + msgstr "顯示應用程å¼çš„é³´è¬" + +-#: src/gtk/MainView.cxx:166 ++#: src/gtk/MainView.cxx:175 + msgid "F_ull screen" +-msgstr "" ++msgstr "全螢幕(_U)" + +-#: src/gtk/MainView.cxx:167 ++#: src/gtk/MainView.cxx:176 + msgid "Toggle full screen window" +-msgstr "" ++msgstr "切æ›åˆ°å…¨èž¢å¹•è¦–窗" + +-#: src/gtk/MainView.cxx:170 ++#: src/gtk/MainView.cxx:179 + msgid "Show _Toolbar" + msgstr "顯示工具列(_T)" + +-#: src/gtk/MainView.cxx:171 ++#: src/gtk/MainView.cxx:180 + msgid "Show or hide the toolbar" + msgstr "顯示或隱è—工具列" + +-#: src/gtk/MainView.cxx:174 ++#: src/gtk/MainView.cxx:183 + msgid "Show _Statusbar" + msgstr "顯示狀態列(_S)" + +-#: src/gtk/MainView.cxx:175 ++#: src/gtk/MainView.cxx:184 + msgid "Show or hide the statusbar" + msgstr "顯示或隱è—狀態列" + +-#: src/gtk/MainView.cxx:178 ++#: src/gtk/MainView.cxx:187 + msgid "Show I_ndex" + msgstr "顯示索引(_N)" + +-#: src/gtk/MainView.cxx:179 ++#: src/gtk/MainView.cxx:188 + msgid "Show or hide the document's outline" + msgstr "顯示或隱è—文件外框" + +-#: src/gtk/MainView.cxx:182 ++#: src/gtk/MainView.cxx:191 + msgid "Zoom to _Fit" + msgstr "符åˆè¦–窗(_F)" + +-#: src/gtk/MainView.cxx:183 ++#: src/gtk/MainView.cxx:192 + msgid "Make the current document fill the window" + msgstr "將目å‰æ–‡ä»¶å¡«æ»¿è¦–窗" + +-#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44 ++#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44 + msgid "Zoom to _Width" + msgstr "符åˆå¯¬åº¦(_W)" + +-#: src/gtk/MainView.cxx:187 ++#: src/gtk/MainView.cxx:196 + msgid "Make the current document fill the window width" + msgstr "將目å‰æ–‡ä»¶å¡«æ»¿è¦–窗寬度" + +-#: src/gtk/MainView.cxx:278 ++#: src/gtk/MainView.cxx:202 ++msgid "Scroll" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:203 ++msgid "Mouse scroll page" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:205 ++msgid "Select Text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:206 ++msgid " Mouse select text" ++msgstr "" ++ ++#: src/gtk/MainView.cxx:320 + msgid "Open PDF File" + msgstr "é–‹å•Ÿ PDF 檔案" + +-#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412 ++#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454 + msgid "Portable Document Format (PDF) Files" + msgstr "å¯æ”œå¼æ–‡ä»¶æ ¼å¼ (PDF) 檔案" + +-#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424 ++#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466 + msgid "All Files" + msgstr "所有檔案" + +-#: src/gtk/MainView.cxx:362 ++#: src/gtk/MainView.cxx:404 + msgid "Password" + msgstr "密碼" + +-#: src/gtk/MainView.cxx:386 ++#: src/gtk/MainView.cxx:428 + msgid "Save PDF File" + msgstr "儲存 PDF 檔案" + +-#: src/gtk/MainView.cxx:816 ++#: src/gtk/MainView.cxx:858 + msgid "Page" + msgstr "é é¢" + +-#: src/gtk/MainView.cxx:826 ++#: src/gtk/MainView.cxx:868 + msgid "of 0" + msgstr "之於 0" + +-#: src/gtk/MainView.cxx:879 ++#: src/gtk/MainView.cxx:921 + msgid "Index" + msgstr "索引" + +-#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956 ++#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001 + #, c-format + msgid "Error building UI manager: %s\n" + msgstr "建立 UI 管ç†å“¡æ™‚發生錯誤:%s\n" + +-#: src/gtk/MainView.cxx:1056 ++#: src/gtk/MainView.cxx:1108 + msgid "A lightweight PDF viewer" + msgstr "輕é‡ç´šçš„ PDF 檢視器" + +-#: src/gtk/MainView.cxx:1059 ++#: src/gtk/MainView.cxx:1111 + msgid "" + "ePDFView is free software; you can redistribute it and/or modify\n" + "it under the terms of the GNU General Public License as published by\n" +@@ -399,7 +422,7 @@ + "æ¢æ¬¾è¦å®šï¼Œå°±æœ¬ç¨‹å¼å†ç‚ºæ•£å¸ƒèˆ‡ï¼æˆ–修改;無論您ä¾æ“šçš„是本授權的第二版或\n" + "(您自行é¸æ“‡çš„)任何ç¨å¾Œç™¼è¡Œçš„版本。\n" + +-#: src/gtk/MainView.cxx:1063 ++#: src/gtk/MainView.cxx:1115 + msgid "" + "ePDFView is distributes in the hope that it will be useful,\n" + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +@@ -409,7 +432,7 @@ + "ePDFView 係基於使用目的而加以散布,然而ä¸è² ä»»ä½•æ“”ä¿è²¬ä»»ï¼›äº¦ç„¡å°é©å”®æ€§\n" + "或特定目的é©ç”¨æ€§æ‰€ç‚ºçš„默示性擔ä¿ã€‚詳情請åƒç…§ GNU 通用公共授權。\n" + +-#: src/gtk/MainView.cxx:1067 ++#: src/gtk/MainView.cxx:1119 + msgid "" + "You should have received a copy of the GNU General Public License\n" + "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n" +@@ -419,11 +442,11 @@ + "自由軟體基金會: \n" + "59 Temple Place – Suite 330, Boston, Ma 02111-1307, USA。\n" + +-#: src/gtk/MainView.cxx:1076 ++#: src/gtk/MainView.cxx:1128 + msgid "ePDFView" + msgstr "ePDFView" + +-#: src/gtk/MainView.cxx:1083 ++#: src/gtk/MainView.cxx:1135 + msgid "translator-credits" + msgstr "趙惟倫 " + +diff -Nurd epdfview-0.1.6-svn/src/Config.cxx epdfview/src/Config.cxx +--- epdfview-0.1.6-svn/src/Config.cxx 2008-07-13 12:57:45.043198000 +0200 ++++ epdfview/src/Config.cxx 2008-07-13 12:55:52.473198000 +0200 +@@ -40,7 +40,6 @@ + + // Forward declarations. + gchar *getConfigFileName (void); +-void makeDirWithParents (const gchar *); + + /// + /// @brief Constructs a new Config object. +@@ -502,42 +501,9 @@ + { + gchar *configDir = + g_build_filename (g_get_user_config_dir (), PACKAGE, NULL); +- makeDirWithParents (configDir); ++ g_mkdir_with_parents (configDir, 0700); + gchar *configFile = g_build_filename (configDir, "main.conf", NULL); + g_free (configDir); + + return configFile; + } +- +-/// +-/// @brief Creates the directory and all its parent directories. +-/// +-/// If the directory already exists it does nothing. +-/// +-/// @param path The directory to create. +-/// +-void +-makeDirWithParents (const gchar *path) +-{ +- // Get the list of directories to create. +- GList *dirs = NULL; +- gchar *dirName = g_strdup (path); +- while ( !g_file_test (dirName, G_FILE_TEST_EXISTS) ) +- { +- dirs = g_list_prepend (dirs, dirName); +- dirName = g_path_get_dirname (dirName); +- } +- +- // Now create all of them. +- GList *dir = g_list_first (dirs); +- while ( NULL != dir ) +- { +- if ( -1 == g_mkdir ((gchar *)dir->data, 0700) ) +- { +- g_warning ("Couldn't make directory '%s'\n", (gchar *)dir->data); +- } +- g_free (dir->data); +- dir = g_list_next (dir); +- } +- g_list_free (dirs); +-} +diff -Nurd epdfview-0.1.6-svn/src/DocumentPage.cxx epdfview/src/DocumentPage.cxx +--- epdfview-0.1.6-svn/src/DocumentPage.cxx 2008-07-13 12:57:45.043198000 +0200 ++++ epdfview/src/DocumentPage.cxx 2008-07-13 12:55:52.473198000 +0200 +@@ -17,6 +17,7 @@ + + #include + #include ++#include + #include "epdfview.h" + + using namespace ePDFView; +@@ -28,6 +29,7 @@ + /// + DocumentPage::DocumentPage () + { ++ m_Selection = NULL; + m_Data = NULL; + m_HasSelection = FALSE; + m_Height = 0; +@@ -49,6 +51,9 @@ + delete link; + } + g_list_free (m_LinkList); ++ ++ if(m_Selection) ++ gdk_region_destroy(m_Selection); + } + + /// +@@ -79,6 +84,12 @@ + invertArea (m_SelectionX1, m_SelectionY1, m_SelectionX2, m_SelectionY2); + m_HasSelection = FALSE; + } ++ ++ if(NULL != m_Selection){ ++ invertRegion(m_Selection); ++ gdk_region_destroy(m_Selection); ++ m_Selection = NULL; ++ } + } + + /// +@@ -195,6 +206,20 @@ + } + } + ++void ++DocumentPage::invertRegion (GdkRegion* region) ++{ ++ int count; ++ GdkRectangle *rectangles; ++ gdk_region_get_rectangles(region, &rectangles, &count); ++ while(count--){ ++ GdkRectangle r = rectangles[count]; ++ invertArea(r.x, r.y, r.x + r.width, r.y + r.height); ++ } ++ g_free(rectangles); ++} ++ ++ + /// + /// @brief Allocates the memory for a new page. + /// +@@ -253,3 +278,13 @@ + + m_HasSelection = TRUE; + } ++ ++void ++DocumentPage::setSelection (GdkRegion *region) ++{ ++ clearSelection (); ++ ++ invertRegion (region); ++ ++ m_Selection = gdk_region_copy(region); ++} +diff -Nurd epdfview-0.1.6-svn/src/DocumentPage.h epdfview/src/DocumentPage.h +--- epdfview-0.1.6-svn/src/DocumentPage.h 2008-07-13 12:57:45.123198000 +0200 ++++ epdfview/src/DocumentPage.h 2008-07-13 12:55:52.573198000 +0200 +@@ -18,6 +18,8 @@ + #if !defined (__DOCUMENT_PAGE_H__) + #define __DOCUMENT_PAGE_H__ + ++typedef struct _GdkRegion GdkRegion; ++ + namespace ePDFView + { + /// +@@ -41,6 +43,7 @@ + gint getWidth (void); + gboolean newPage (gint width, gint height); + void setSelection (DocumentRectangle &selection, gdouble scale); ++ void setSelection (GdkRegion *region); + + protected: + /// The page's image. +@@ -61,7 +64,10 @@ + gint m_Width; + /// The list of links from the page. + GList *m_LinkList; +- ++ /// Selection region ++ GdkRegion *m_Selection; ++ ++ void invertRegion (GdkRegion*); + void invertArea (gint x1, gint y1, gint x2, gint y2); + }; + } +diff -Nurd epdfview-0.1.6-svn/src/gtk/MainView.cxx epdfview/src/gtk/MainView.cxx +--- epdfview-0.1.6-svn/src/gtk/MainView.cxx 2008-07-13 12:57:44.223198000 +0200 ++++ epdfview/src/gtk/MainView.cxx 2008-07-13 12:55:50.923198000 +0200 +@@ -76,6 +76,8 @@ + static void main_window_zoom_in_cb (GtkWidget *, gpointer); + static void main_window_zoom_out_cb (GtkWidget *, gpointer); + static void main_window_zoom_width_cb (GtkToggleAction *, gpointer); ++static void main_window_set_page_mode (GtkRadioAction *, GtkRadioAction *, gpointer); ++static void main_window_page_scrolled_cb (GtkWidget *widget, GdkEventScroll *event, gpointer data); + + #if defined (HAVE_CUPS) + static void main_window_print_cb (GtkWidget *, gpointer); +@@ -128,11 +130,11 @@ + N_("Shrink the document"), + G_CALLBACK (main_window_zoom_out_cb) }, + +- { "RotateRight", EPDFVIEW_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), NULL, ++ { "RotateRight", EPDFVIEW_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), "bracketright", + N_("Rotate the document 90 degrees clockwise"), + G_CALLBACK (main_window_rotate_right_cb) }, + +- { "RotateLeft", EPDFVIEW_STOCK_ROTATE_LEFT, N_("Rotate _Left"), NULL, ++ { "RotateLeft", EPDFVIEW_STOCK_ROTATE_LEFT, N_("Rotate _Left"), "bracketleft", + N_("Rotate the document 90 degrees counter-clockwise"), + G_CALLBACK (main_window_rotate_left_cb) }, + +@@ -158,7 +160,14 @@ + + // Accelerator keys. + { "Slash", GTK_STOCK_FIND, NULL, "slash", NULL, +- G_CALLBACK (main_window_find_cb) } ++ G_CALLBACK (main_window_find_cb) }, ++ ++ { "KPAdd", GTK_STOCK_ZOOM_IN, NULL, "KP_Add", NULL, ++ G_CALLBACK (main_window_zoom_in_cb) }, ++ ++ { "KPSubtract", GTK_STOCK_ZOOM_OUT, NULL, "KP_Subtract", ++ NULL, ++ G_CALLBACK (main_window_zoom_out_cb) } + }; + + static GtkToggleActionEntry g_ToggleEntries[] = +@@ -185,10 +194,19 @@ + + { "ZoomWidth", EPDFVIEW_STOCK_ZOOM_WIDTH, N_("Zoom to _Width"), NULL, + N_("Make the current document fill the window width"), +- G_CALLBACK (main_window_zoom_width_cb), FALSE } ++ G_CALLBACK (main_window_zoom_width_cb), FALSE }, ++}; + ++static GtkRadioActionEntry g_PageScrollEntries[] = ++{ ++ { "PageModeScroll", GTK_STOCK_FULLSCREEN, N_("Scroll"), NULL, ++ N_("Mouse scroll page"), (int)PagePterModeScroll }, ++ ++ { "PageModeText", GTK_STOCK_SELECT_ALL, N_("Select Text"), NULL, ++ N_(" Mouse select text"), (int)PagePterModeSelectText }, + }; + ++ + //////////////////////////////////////////////////////////////// + // Interface Methods. + //////////////////////////////////////////////////////////////// +@@ -238,6 +256,9 @@ + GtkWidget *pageViewPaned = createPageView (); + gtk_box_pack_start (GTK_BOX (m_MainBox), pageViewPaned, TRUE, TRUE, 0); + gtk_widget_show (pageViewPaned); ++ // By default set focus to page view so user can navigate pdf document with ++ // keyboard right away without need to click to page view first ++ gtk_widget_grab_focus (m_PageView->getTopWidget ()); + // Add the find bar. + m_FindView = new FindView (); + gtk_box_pack_start (GTK_BOX (m_MainBox), m_FindView->getTopWidget (), +@@ -247,6 +268,10 @@ + // look weird. + m_StatusBar = gtk_statusbar_new (); + gtk_box_pack_start (GTK_BOX (m_MainBox), m_StatusBar, FALSE, FALSE, 0); ++ ++ // Signal for Zooming into the page per ctrl + scroll-wheel. ++ g_signal_connect (G_OBJECT (m_PageView->getTopWidget ()), "scroll-event", ++ G_CALLBACK (main_window_page_scrolled_cb), pter); + } + + MainView::~MainView () +@@ -272,6 +297,23 @@ + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (zoomWidth), active); + } + ++void ++MainView::activePageModeScroll (gboolean active) ++{ ++ GtkAction *action = ++ gtk_ui_manager_get_action (m_UIManager, "/ToolBar/PageModeScroll"); ++ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active); ++} ++ ++ ++void ++MainView::activePageModeText (gboolean active) ++{ ++ GtkAction *action = ++ gtk_ui_manager_get_action (m_UIManager, "/ToolBar/PageModeText"); ++ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active); ++} ++ + gchar * + MainView::openFileDialog (const gchar *lastFolder) + { +@@ -935,6 +977,9 @@ + gtk_action_group_add_toggle_actions (actionGroup, g_ToggleEntries, + G_N_ELEMENTS (g_ToggleEntries), + m_Pter); ++ gtk_action_group_add_radio_actions (actionGroup, g_PageScrollEntries, ++ G_N_ELEMENTS (g_PageScrollEntries), 0, ++ G_CALLBACK(main_window_set_page_mode), m_Pter); + m_UIManager = gtk_ui_manager_new (); + gtk_ui_manager_insert_action_group (m_UIManager, actionGroup, 0); + +@@ -1038,6 +1083,13 @@ + } + } + ++void ++MainView::copyTextToClibboard(const gchar* text) ++{ ++ GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); ++ gtk_clipboard_set_text(clipboard, text, -1); ++} ++ + //////////////////////////////////////////////////////////////// + // GTK+ Callbacks. + //////////////////////////////////////////////////////////////// +@@ -1416,3 +1468,29 @@ + MainPter *pter = (MainPter *)data; + pter->zoomWidthActivated (gtk_toggle_action_get_active (action)); + } ++ ++void ++main_window_set_page_mode (GtkRadioAction *action, GtkRadioAction *current, gpointer data) ++{ ++ g_assert ( NULL != data && "The data parameter is NULL."); ++ ++ MainPter *pter = (MainPter *)data; ++ PagePterMode mode = (PagePterMode)gtk_radio_action_get_current_value(action); ++ pter->setPageMode (mode); ++} ++ ++void ++main_window_page_scrolled_cb (GtkWidget *widget, GdkEventScroll *event, gpointer data) ++{ ++ g_assert ( NULL != data && "The data parameter is NULL."); ++ ++ MainPter *pter = (MainPter *)data; ++ // Only zoom when the CTRL-Button is down... ++ if ( !(event->state & GDK_CONTROL_MASK) ) return; ++ if ( event->direction == GDK_SCROLL_UP ) { ++ pter->zoomInActivated (); ++ } else if ( event->direction == GDK_SCROLL_DOWN ) { ++ pter->zoomOutActivated (); ++ } ++} ++ +diff -Nurd epdfview-0.1.6-svn/src/gtk/MainView.h epdfview/src/gtk/MainView.h +--- epdfview-0.1.6-svn/src/gtk/MainView.h 2008-07-13 12:57:44.233198000 +0200 ++++ epdfview/src/gtk/MainView.h 2008-07-13 12:55:50.923198000 +0200 +@@ -35,6 +35,8 @@ + + void activeZoomFit (gboolean active); + void activeZoomWidth (gboolean active); ++ void activePageModeScroll (gboolean active); ++ void activePageModeText (gboolean active); + gchar *openFileDialog (const gchar *lastFolder); + gchar *promptPasswordDialog (void); + gchar *saveFileDialog (const gchar *lastFolder, +@@ -68,6 +70,7 @@ + void setStatusBarText (const gchar *text); + void setZoomText (const gchar *text); + const gchar *getGoToPageText (void); ++ void copyTextToClibboard(const gchar* text); + IFindView *getFindView (void); + IPageView *getPageView (void); + IPreferencesView *getPreferencesView (void); +diff -Nurd epdfview-0.1.6-svn/src/gtk/PageView.cxx epdfview/src/gtk/PageView.cxx +--- epdfview-0.1.6-svn/src/gtk/PageView.cxx 2008-07-13 12:57:44.243198000 +0200 ++++ epdfview/src/gtk/PageView.cxx 2008-07-13 12:55:50.943198000 +0200 +@@ -184,6 +184,9 @@ + GdkCursor *cursor = NULL; + switch (cursorType) + { ++ case PAGE_VIEW_CURSOR_SELECT_TEXT: ++ cursor = gdk_cursor_new (GDK_XTERM); ++ break; + case PAGE_VIEW_CURSOR_LINK: + cursor = gdk_cursor_new (GDK_HAND2); + break; +@@ -524,6 +527,13 @@ + { + g_assert ( NULL != data && "The data parameter is NULL."); + ++ // don't scroll when the CRTL-Button is down, because then the page should ++ // actually be zoomed and not scrolled. Zooming is handelt by the MainView ++ // class. ++ if ( event->state & GDK_CONTROL_MASK ) ++ { ++ return FALSE; ++ } + PagePter *pter = (PagePter *)data; + GtkAdjustment *adjustment = + gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (widget)); +@@ -553,11 +563,15 @@ + + GtkScrollType direction; + gboolean horizontal = FALSE; ++ gboolean returnValue = TRUE; + PagePter *pter = (PagePter *)data; + +- GtkAdjustment *adjustment = ++ GtkAdjustment *hadjustment = ++ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (widget)); ++ gdouble hposition = gtk_adjustment_get_value (hadjustment); ++ GtkAdjustment *vadjustment = + gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (widget)); +- gdouble position = gtk_adjustment_get_value (adjustment); ++ gdouble vposition = gtk_adjustment_get_value (vadjustment); + + if ( event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK) ) + { +@@ -568,51 +582,96 @@ + { + case GDK_Left: + case GDK_KP_Left: ++ case GDK_h: ++ if ( hposition == hadjustment->lower ) ++ { ++ pter->scrollToPreviousPage (); ++ return TRUE; ++ } + direction = GTK_SCROLL_STEP_LEFT; + horizontal = TRUE; + break; + + case GDK_Right: + case GDK_KP_Right: ++ case GDK_l: ++ if ( hposition == ( hadjustment->upper - hadjustment->page_size) ) ++ { ++ pter->scrollToNextPage (); ++ return TRUE; ++ } + horizontal = TRUE; + direction = GTK_SCROLL_STEP_RIGHT; + break; + + case GDK_Up: + case GDK_KP_Up: ++ case GDK_k: ++ if ( vposition == vadjustment->lower ) ++ { ++ pter->scrollToPreviousPage (); ++ return TRUE; ++ } + direction = GTK_SCROLL_STEP_UP; + break; + + case GDK_Down: + case GDK_KP_Down: ++ case GDK_j: ++ if ( vposition == ( vadjustment->upper - vadjustment->page_size) ) ++ { ++ pter->scrollToNextPage (); ++ return TRUE; ++ } + direction = GTK_SCROLL_STEP_DOWN; + break; + + case GDK_Page_Up: + case GDK_KP_Page_Up: +- if ( position == adjustment->lower ) ++ if ( vposition == vadjustment->lower ) + { + pter->scrollToPreviousPage (); + return TRUE; + } +- direction = GTK_SCROLL_START; ++ direction = GTK_SCROLL_PAGE_UP; + break; + ++ case GDK_space: ++ case GDK_KP_Space: + case GDK_Page_Down: + case GDK_KP_Page_Down: +- if ( position == ( adjustment->upper - adjustment->page_size) ) ++ if ( vposition == ( vadjustment->upper - vadjustment->page_size) ) + { + pter->scrollToNextPage (); + return TRUE; + } ++ direction = GTK_SCROLL_PAGE_DOWN; ++ break; ++ ++ case GDK_Home: ++ case GDK_KP_Home: ++ direction = GTK_SCROLL_START; ++ break; ++ ++ case GDK_End: ++ case GDK_KP_End: + direction = GTK_SCROLL_END; + break; + +- default: ++ case GDK_Return: ++ case GDK_KP_Enter: ++ pter->scrollToNextPage (); ++ direction = GTK_SCROLL_START; ++ ++ case GDK_BackSpace: ++ pter->scrollToNextPage (); ++ direction = GTK_SCROLL_START; ++ ++ default: + return FALSE; + } + + g_signal_emit_by_name(G_OBJECT(widget), "scroll-child", +- direction, horizontal); +- return TRUE; ++ direction, horizontal, &returnValue); ++ return returnValue; + } +diff -Nurd epdfview-0.1.6-svn/src/IDocument.h epdfview/src/IDocument.h +--- epdfview-0.1.6-svn/src/IDocument.h 2008-07-13 12:57:45.053198000 +0200 ++++ epdfview/src/IDocument.h 2008-07-13 12:55:52.473198000 +0200 +@@ -21,12 +21,14 @@ + /// This is the definition of the GQuark used for Document's errors. + #define EPDFVIEW_DOCUMENT_ERROR ePDFView::IDocument::getErrorQuark () + ++typedef struct _GdkRegion GdkRegion; ++ + namespace ePDFView + { + // Forward declarations. + class DocumentIndex; + class IDocumentObserver; +- class DocumentPage; ++ class DocumentPage; + + /// + /// @brief Defines the possible errors loading a document. +@@ -263,6 +265,9 @@ + virtual gboolean saveFile (const gchar *filename, + GError **error) = 0; + ++ virtual GdkRegion* getTextRegion (DocumentRectangle *rect) = 0; ++ virtual void setTextSelection (DocumentRectangle *rect) = 0; ++ + void attach (const IDocumentObserver *observer); + void detach (const IDocumentObserver *observer); + +diff -Nurd epdfview-0.1.6-svn/src/IDocumentLink.h epdfview/src/IDocumentLink.h +--- epdfview-0.1.6-svn/src/IDocumentLink.h 2008-07-13 12:57:45.053198000 +0200 ++++ epdfview/src/IDocumentLink.h 2008-07-13 12:55:52.483198000 +0200 +@@ -33,7 +33,7 @@ + class IDocumentLink + { + public: +- IDocumentLink (gdouble x1, gdouble y1, gdouble x2, gdouble y1); ++ IDocumentLink (gdouble x1, gdouble y1, gdouble x2, gdouble y2); + virtual ~IDocumentLink (void); + + virtual void activate (IDocument *document) = 0; +diff -Nurd epdfview-0.1.6-svn/src/IDocumentObserver.h epdfview/src/IDocumentObserver.h +--- epdfview-0.1.6-svn/src/IDocumentObserver.h 2008-07-13 12:57:45.023198000 +0200 ++++ epdfview/src/IDocumentObserver.h 2008-07-13 12:55:51.753198000 +0200 +@@ -150,6 +150,16 @@ + /// + virtual void notifySaveError (const GError *error) { } + ++ /// ++ /// @brief Someone select text in document. ++ /// ++ /// This function called when someone select some text ++ /// in document. ++ /// ++ /// @param text Selected text. ++ /// ++ virtual void notifyTextSelected (const gchar* text) { } ++ + protected: + /// + /// @brief Constructs a new IDocumentObserver object. +diff -Nurd epdfview-0.1.6-svn/src/IJob.cxx epdfview/src/IJob.cxx +--- epdfview-0.1.6-svn/src/IJob.cxx 2008-07-13 12:57:45.053198000 +0200 ++++ epdfview/src/IJob.cxx 2008-07-13 12:55:52.483198000 +0200 +@@ -16,6 +16,7 @@ + // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + #include "epdfview.h" ++#include + + using namespace ePDFView; + +@@ -59,6 +60,7 @@ + delete job; + } + } ++ sleep(0); + } + + /// +diff -Nurd epdfview-0.1.6-svn/src/IMainView.h epdfview/src/IMainView.h +--- epdfview-0.1.6-svn/src/IMainView.h 2008-07-13 12:57:45.053198000 +0200 ++++ epdfview/src/IMainView.h 2008-07-13 12:55:52.473198000 +0200 +@@ -576,6 +576,10 @@ + /// + virtual void setOutline (DocumentOutline *outline) = 0; + ++ virtual void copyTextToClibboard(const gchar* text) = 0; ++ virtual void activePageModeScroll (gboolean active) = 0; ++ virtual void activePageModeText (gboolean active) = 0; ++ + protected: + /// + /// @brief Constructs a new main view. +diff -Nurd epdfview-0.1.6-svn/src/IPageView.h epdfview/src/IPageView.h +--- epdfview-0.1.6-svn/src/IPageView.h 2008-07-13 12:57:45.123198000 +0200 ++++ epdfview/src/IPageView.h 2008-07-13 12:55:52.573198000 +0200 +@@ -32,6 +32,8 @@ + PAGE_VIEW_CURSOR_NORMAL, + /// Drag cursor. + PAGE_VIEW_CURSOR_DRAG, ++ /// Text selection cursor. ++ PAGE_VIEW_CURSOR_SELECT_TEXT, + /// Link cursor. + PAGE_VIEW_CURSOR_LINK + }; +diff -Nurd epdfview-0.1.6-svn/src/main.cxx epdfview/src/main.cxx +--- epdfview-0.1.6-svn/src/main.cxx 2008-07-13 12:57:45.053198000 +0200 ++++ epdfview/src/main.cxx 2008-07-13 12:55:52.483198000 +0200 +@@ -25,6 +25,27 @@ + + using namespace ePDFView; + ++struct LoadFileInfo ++{ ++ gchar *fileName; ++ MainPter *mainPter; ++ PDFDocument *document; ++}; ++ ++static int ++loadFileFromCommandLine (gpointer data) ++{ ++ LoadFileInfo *info = static_cast (data); ++ ++ info->mainPter->setOpenState (info->fileName, FALSE); ++ info->document->load (info->fileName, NULL); ++ ++ g_free (info->fileName); ++ delete info; ++ ++ return FALSE; ++} ++ + int + main (int argc, char **argv) + { +@@ -56,13 +77,15 @@ + MainView *mainView = new MainView (mainPter); + // Let know to the presenter which is its view. + mainPter->setView (mainView); +- // Enter the main loop and wait for user interaction. */ + // Now check if we have additional parameters. Any additional parameter + // will be a file name to open. + if ( argc > 1 ) + { +- mainPter->setOpenState (argv[1], FALSE); +- document->load (argv[1], NULL); ++ LoadFileInfo *info = new LoadFileInfo; ++ info->mainPter = mainPter; ++ info->document = document; ++ info->fileName = g_strdup (argv[1]); ++ g_idle_add (loadFileFromCommandLine, info); + } + + gtk_main(); +@@ -74,6 +97,8 @@ + // Save the configuration. + Config::getConfig().save (); + ++ g_option_context_free (optionContext); ++ + // All done!. + return EXIT_SUCCESS; + } +diff -Nurd epdfview-0.1.6-svn/src/MainPter.cxx epdfview/src/MainPter.cxx +--- epdfview-0.1.6-svn/src/MainPter.cxx 2008-07-13 12:57:45.023198000 +0200 ++++ epdfview/src/MainPter.cxx 2008-07-13 12:55:51.753198000 +0200 +@@ -695,6 +695,12 @@ + } + } + ++void ++MainPter::setPageMode (PagePterMode mode) ++{ ++ m_PagePter->setMode(mode); ++} ++ + /// + /// @brief The "Zoom In" was activated. + /// +@@ -995,3 +1001,9 @@ + G_UNLOCK (fileSaved); + } + #endif // DEBUG ++ ++void ++MainPter::notifyTextSelected (const gchar* text) ++{ ++ getView ().copyTextToClibboard(text); ++} +diff -Nurd epdfview-0.1.6-svn/src/MainPter.h epdfview/src/MainPter.h +--- epdfview-0.1.6-svn/src/MainPter.h 2008-07-13 12:57:45.043198000 +0200 ++++ epdfview/src/MainPter.h 2008-07-13 12:55:52.473198000 +0200 +@@ -40,6 +40,8 @@ + MainPter (IDocument *document); + ~MainPter (void); + ++ void setPageMode(PagePterMode mode); ++ + void setInitialState (void); + void setOpenState (const gchar *fileName, gboolean reload); + IMainView &getView (void); +@@ -84,6 +86,7 @@ + void notifyReload (void); + void notifySave (void); + void notifySaveError (const GError *error); ++ void notifyTextSelected (const gchar* text); + + #if defined (DEBUG) + void waitForFileLoaded (void); +diff -Nurd epdfview-0.1.6-svn/src/PagePter.cxx epdfview/src/PagePter.cxx +--- epdfview-0.1.6-svn/src/PagePter.cxx 2008-07-13 12:57:45.043198000 +0200 ++++ epdfview/src/PagePter.cxx 2008-07-13 12:55:52.473198000 +0200 +@@ -15,6 +15,7 @@ + // along with this program; if not, write to the Free Software + // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ++#include + #include "epdfview.h" + + using namespace ePDFView; +@@ -47,9 +48,9 @@ + /// The Y position of the pointer when the drag started. + gint y; + /// The horizontal position of the page view scroll when the drag started. +- gdouble scrollX; ++ int startX; + /// The vertical position of the page view scroll when the drag started. +- gdouble scrollY; ++ int startY; + }; + + // Global variables. +@@ -60,11 +61,13 @@ + /// + PagePter::PagePter (IDocument *document) + { ++ m_LastSelection = NULL; + m_Document = document; + m_Document->attach (this); + m_DragInfo = NULL; + m_NextPageScroll = PAGE_SCROLL_START; + m_PageView = NULL; ++ m_ScrollMode = PagePterModeScroll; + } + + /// +@@ -129,9 +132,12 @@ + m_DragInfo->y = y; + + IPageView &view = getView (); +- m_DragInfo->scrollX = view.getHorizontalScroll (); +- m_DragInfo->scrollY = view.getVerticalScroll (); +- view.setCursor (PAGE_VIEW_CURSOR_DRAG); ++ m_DragInfo->startX = x; ++ m_DragInfo->startY = y; ++ if(m_ScrollMode == PagePterModeScroll) ++ view.setCursor (PAGE_VIEW_CURSOR_DRAG); ++ else ++ view.setCursor (PAGE_VIEW_CURSOR_SELECT_TEXT); + } + } + } +@@ -149,8 +155,24 @@ + { + if ( 1 == button ) + { ++ if(m_LastSelection) ++ gdk_region_destroy(m_LastSelection); ++ m_LastSelection = NULL; ++ ++ if ( m_Document->isLoaded() && ++ m_ScrollMode == PagePterModeSelectText && ++ NULL != m_DragInfo ) ++ { ++ DocumentRectangle rect(m_DragInfo->startX, m_DragInfo->startY, ++ m_DragInfo->x, m_DragInfo->y); ++ m_Document->setTextSelection(&rect); ++ } ++ + delete m_DragInfo; + m_DragInfo = NULL; ++ ++ refreshPage(PAGE_SCROLL_NONE, FALSE); ++ + getView ().setCursor (PAGE_VIEW_CURSOR_NORMAL); + } + } +@@ -181,10 +203,32 @@ + view.setCursor (PAGE_VIEW_CURSOR_NORMAL); + } + } +- else +- { +- view.scrollPage (m_DragInfo->scrollX, m_DragInfo->scrollY, +- x - m_DragInfo->x, y - m_DragInfo->y); ++ else{ ++ m_DragInfo->x = x; ++ m_DragInfo->y = y; ++ ++ if(m_ScrollMode == PagePterModeScroll){ ++ view.scrollPage (view.getHorizontalScroll (), view.getVerticalScroll (), ++ x - m_DragInfo->startX, y - m_DragInfo->startY); ++ } ++ else{ ++ if(!m_Document->isLoaded()) ++ return ; ++ ++ DocumentRectangle rect(m_DragInfo->startX, m_DragInfo->startY, ++ m_DragInfo->x, m_DragInfo->y); ++ ++ GdkRegion *region = m_Document->getTextRegion (&rect); ++ ++ if( !m_LastSelection || !gdk_region_equal(m_LastSelection, region)){ ++ if(m_LastSelection) ++ gdk_region_destroy(m_LastSelection); ++ m_LastSelection = gdk_region_copy(region); ++ DocumentPage *page = m_Document->getCurrentPage(); ++ if ( NULL != page ) ++ refreshPage (PAGE_SCROLL_NONE, FALSE); ++ } ++ } + } + } + +@@ -273,6 +317,8 @@ + if ( NULL != documentPage ) + { + g_WaitingForPage = FALSE; ++ if ( NULL != m_LastSelection ) ++ documentPage->setSelection(m_LastSelection); + view.showPage (documentPage, pageScroll); + } + else +@@ -364,6 +410,17 @@ + } + + /// ++/// @brief Sets the page mouse scroll mode ++/// ++/// @param mode Scroll mode to set. ++/// ++void ++PagePter::setMode (PagePterMode mode) ++{ ++ this->m_ScrollMode = mode; ++} ++ ++/// + /// @brief The page view has been resized. + /// + /// @param width The new with of the page view. +diff -Nurd epdfview-0.1.6-svn/src/PagePter.h epdfview/src/PagePter.h +--- epdfview-0.1.6-svn/src/PagePter.h 2008-07-13 12:57:45.053198000 +0200 ++++ epdfview/src/PagePter.h 2008-07-13 12:55:52.483198000 +0200 +@@ -23,6 +23,11 @@ + + namespace ePDFView + { ++ enum PagePterMode{ ++ PagePterModeScroll, ++ PagePterModeSelectText, ++ }; ++ + /// + /// @class PagePter. + /// @brief The page presenter. +@@ -53,6 +58,7 @@ + void setNextPageScroll (PageScroll next); + void setView (IMainView &view); + void viewResized (gint width, gint height); ++ void setMode(PagePterMode mode); + + protected: + /// The document whose page is shown. +@@ -63,7 +69,11 @@ + PageScroll m_NextPageScroll; + /// The page view. + IPageView *m_PageView; +- ++ /// Last text selection ++ GdkRegion *m_LastSelection; ++ /// What page presenter must do when user move mouse with button pressed. ++ PagePterMode m_ScrollMode; ++ + void refreshPage (PageScroll pageScroll, gboolean wasZoomed); + }; + } +diff -Nurd epdfview-0.1.6-svn/src/PDFDocument.cxx epdfview/src/PDFDocument.cxx +--- epdfview-0.1.6-svn/src/PDFDocument.cxx 2008-07-13 12:57:45.043198000 +0200 ++++ epdfview/src/PDFDocument.cxx 2008-07-13 12:55:52.473198000 +0200 +@@ -191,7 +191,7 @@ + /// @param filename The name of the file name to open. It must be an absolute + /// path. + /// @param password The password to use to open @a filename. +-/// @param error Location to store the error occurring or NULL to ignore ++/// @param error Location to store the error occurring or NULL to ignore + /// errors. + /// + /// @return TRUE if the file could be opened, FALSE otherwise. +@@ -257,7 +257,7 @@ + else + { + // OK, the glib's wrapper don't pass the error code directly +- // from Poppler. Instead returns G_FILE_ERROR_FAILED and a ++ // from Poppler. Instead returns G_FILE_ERROR_FAILED and a + // non translated string. + // Maybe I'm wrong (very probable) but that's a wrong way. + // So I'm reading the error code from the error string... +@@ -412,7 +412,7 @@ + poppler_page_get_size (popplerPage, NULL, &pageHeight); + // We'll already calculate the positions scaled. + gdouble scale = getZoom (); +- GList *pageLinks = poppler_page_get_link_mapping (popplerPage); ++ GList *pageLinks = poppler_page_get_link_mapping (popplerPage); + for (GList *pageLink = g_list_first (pageLinks) ; + NULL != pageLink ; + pageLink = g_list_next (pageLink) ) +@@ -440,7 +440,7 @@ + /// poppler_index_iter_new(). + /// + void +-PDFDocument::setOutline (DocumentOutline *outline, ++PDFDocument::setOutline (DocumentOutline *outline, + PopplerIndexIter *childrenList) + { + if ( NULL != childrenList ) +@@ -474,11 +474,11 @@ + #endif // HAVE_POPPLER_0_5_2 + + outline->addChild (child); +- PopplerIndexIter *childIter = ++ PopplerIndexIter *childIter = + poppler_index_iter_get_child (childrenList); + setOutline (child, childIter); + } +- } ++ } + while ( poppler_index_iter_next (childrenList) ); + + poppler_index_iter_free (childrenList); +@@ -490,7 +490,7 @@ + /// + /// Retrieves the width and height of a document's page before to scale, but + /// after rotation. +-/// ++/// + /// @param pageNum The page to get its size. + /// @param width The output pointer to save the page's width. + /// @param height The output pointer to save the page's height. +@@ -656,6 +656,107 @@ + return result; + } + ++static void ++repairEmpty(PopplerRectangle& rect) ++{ ++ //rect must have be least 1x1 ++ if(rect.y1 == rect.y2) ++ rect.y2++; ++ if(rect.x1 == rect.x2) ++ rect.x2++; ++} ++ ++void ++PDFDocument::setTextSelection (DocumentRectangle *rect) ++{ ++ g_assert(rect); ++ ++ PopplerPage *page = poppler_document_get_page (m_Document, getCurrentPageNum()-1); ++ if(!page) ++ return; ++ ++ gdouble pageWidth, pageHeight; ++ poppler_page_get_size(page, &pageWidth, &pageHeight); ++ ++ //for get text we must exchange y coordinate, don't ask me where logic here. ++ PopplerRectangle textRect = { rect->getX1() / getZoom(), ++ (pageHeight - rect->getY2() / getZoom()), ++ rect->getX2() * getZoom() / getZoom(), ++ (pageHeight - rect->getY1() / getZoom())}; ++ repairEmpty(textRect); ++ ++#if defined (HAVE_POPPLER_0_6_0) ++ gchar *text = poppler_page_get_text(page, POPPLER_SELECTION_GLYPH, ++ &textRect); ++#else // !HAVE_POPPLER_0_6_0 ++ gchar *text = poppler_page_get_text(page, &textRect); ++#endif // HAVE_POPPLER_0_6_0 ++ if(!text) ++ goto cleanup; ++ ++ for ( GList *obs = g_list_first (m_Observers) ; ++ NULL != obs ; ++ obs = g_list_next (obs) ) ++ { ++ IDocumentObserver *observer = (IDocumentObserver*)obs->data; ++ observer->notifyTextSelected(text); ++ } ++ ++ cleanup: ++ if(page) ++ g_object_unref(page); ++ if(text) ++ g_free(text); ++} ++ ++GdkRegion* ++PDFDocument::getTextRegion (DocumentRectangle *r) ++{ ++ GdkRegion *res = NULL; ++ PopplerPage *page = poppler_document_get_page (m_Document, getCurrentPageNum()-1); ++ if(!page) ++ return NULL; ++ ++ //calulate rect ++ PopplerRectangle rect; ++ rect.x1 = r->getX1() / getZoom(); ++ rect.y1 = r->getY1() / getZoom(); ++ rect.x2 = r->getX2() / getZoom(); ++ rect.y2 = r->getY2() / getZoom(); ++ repairEmpty(rect); ++ ++ //calc selection size ++#if defined (HAVE_POPPLER_0_8_0) ++ GList *selections = poppler_page_get_selection_region(page, getZoom(), ++ POPPLER_SELECTION_GLYPH, &rect); ++ res = gdk_region_new(); ++ for (GList *selection = g_list_first (selections) ; ++ NULL != selection ; selection = g_list_next (selection)) { ++ PopplerRectangle *rectangle = (PopplerRectangle *)selection->data; ++ GdkRectangle rect; ++ ++ rect.x = (gint)rectangle->x1; ++ rect.y = (gint)rectangle->y1; ++ rect.width = (gint) (rectangle->x2 - rectangle->x1); ++ rect.height = (gint) (rectangle->y2 - rectangle->y1); ++ ++ gdk_region_union_with_rect (res, &rect); ++ } ++ poppler_page_selection_region_free (selections); ++#elif defined (HAVE_POPPLER_0_6_0) ++ res = poppler_page_get_selection_region(page, getZoom(), ++ POPPLER_SELECTION_GLYPH, &rect); ++#else // !HAVE_POPPLER_0_6_0 ++ res = poppler_page_get_selection_region(page, getZoom(), &rect); ++#endif // HAVE_POPPLER_0_6_0 ++ ++ //free some local data ++ g_object_unref(page); ++ ++ return res; ++} ++ ++ + /// + /// @brief Gets the document's page layout from Poppler's page layout. + /// +diff -Nurd epdfview-0.1.6-svn/src/PDFDocument.h epdfview/src/PDFDocument.h +--- epdfview-0.1.6-svn/src/PDFDocument.h 2008-07-13 12:57:45.063198000 +0200 ++++ epdfview/src/PDFDocument.h 2008-07-13 12:55:52.493198000 +0200 +@@ -54,6 +54,8 @@ + + DocumentPage *renderPage (gint pageNum); + gboolean saveFile (const gchar *fileName, GError **error); ++ GdkRegion* getTextRegion (DocumentRectangle* rect); ++ void setTextSelection (DocumentRectangle *rect); + + protected: + /// The PDF document. +diff -Nurd epdfview-0.1.6-svn/src/PrintPter.cxx epdfview/src/PrintPter.cxx +--- epdfview-0.1.6-svn/src/PrintPter.cxx 2008-07-13 12:57:45.043198000 +0200 ++++ epdfview/src/PrintPter.cxx 2008-07-13 12:55:52.473198000 +0200 +@@ -230,20 +230,27 @@ + ppdFindOption (printerPPD, "PageSize"); + view.clearPageSizeList (); + int pageSizeToSelect = 0; +- ppd_choice_t *pageSizeChoice = pageSizeOption->choices; +- for ( int currentSize = 0 ; +- currentSize < pageSizeOption->num_choices ; +- ++currentSize, ++pageSizeChoice ) ++ if ( 0 != pageSizeOption ) + { +- const gchar *sizeName = pageSizeChoice->text; +- const gchar *sizeValue = pageSizeChoice->choice; +- +- view.addPageSize (_(sizeName), sizeValue); +- if ( pageSizeChoice->marked ) ++ ppd_choice_t *pageSizeChoice = pageSizeOption->choices; ++ for ( int currentSize = 0 ; ++ currentSize < pageSizeOption->num_choices ; ++ ++currentSize, ++pageSizeChoice ) + { +- pageSizeToSelect = currentSize; ++ const gchar *sizeName = pageSizeChoice->text; ++ const gchar *sizeValue = pageSizeChoice->choice; ++ ++ view.addPageSize (_(sizeName), sizeValue); ++ if ( pageSizeChoice->marked ) ++ { ++ pageSizeToSelect = currentSize; ++ } + } + } ++ else ++ { ++ view.addPageSize (_("A4"), "A4"); ++ } + view.selectPageSize (pageSizeToSelect); + + // Get the resolutions. +@@ -251,29 +258,36 @@ + ppdFindOption (printerPPD, "Resolution"); + view.clearResolutionList (); + int resolutionToSelect = 0; +- ppd_choice_t *resolutionChoice = resolutionOption->choices; +- for ( int currentRes = 0 ; +- currentRes < resolutionOption->num_choices ; +- ++currentRes, ++resolutionChoice ) ++ if ( 0 != resolutionOption ) + { +- const gchar *resName = resolutionChoice->text; +- const gchar *resValue = resolutionChoice->choice; +- +- view.addResolution (_(resName), resValue); +- if ( resolutionChoice->marked ) ++ ppd_choice_t *resolutionChoice = resolutionOption->choices; ++ for ( int currentRes = 0 ; ++ currentRes < resolutionOption->num_choices ; ++ ++currentRes, ++resolutionChoice ) + { +- resolutionToSelect = currentRes; ++ const gchar *resName = resolutionChoice->text; ++ const gchar *resValue = resolutionChoice->choice; ++ ++ view.addResolution (_(resName), resValue); ++ if ( resolutionChoice->marked ) ++ { ++ resolutionToSelect = currentRes; ++ } + } + } ++ else ++ { ++ view.addResolution (_("300 DPI"), "300x300dpi"); ++ } + view.selectResolution (resolutionToSelect); + + // Get the color models. + ppd_option_t *colorModelOption = + ppdFindOption (printerPPD, "ColorModel"); + view.clearColorModelList (); ++ int colorModelToSelect = 0; + if ( NULL != colorModelOption ) + { +- int colorModelToSelect = 0; + ppd_choice_t *colorModelChoice = colorModelOption->choices; + for ( int currentColor = 0 ; + currentColor < colorModelOption->num_choices ; +@@ -288,12 +302,12 @@ + colorModelToSelect = currentColor; + } + } +- view.selectColorModel (colorModelToSelect); + } + else + { + view.addColorModel (_("Grayscale"), "Gray"); + } ++ view.selectColorModel (colorModelToSelect); + ppdClose (printerPPD); + } + } +diff -Nurd epdfview-0.1.6-svn/THANKS epdfview/THANKS +--- epdfview-0.1.6-svn/THANKS 2008-07-13 12:57:47.583198000 +0200 ++++ epdfview/THANKS 2008-07-13 12:55:55.133198000 +0200 +@@ -1,16 +1,34 @@ + I would like to give thanks to the following for their support and + contributions: + +- - Enrico Tröger , for his full screen patch. +- - Igor Vagulin , for his Russian translation. ++ - Alex Dedul , for his patch. ++ - Enrico Tröger , for his full screen patch and others. ++ - Daniel Nylander , for his Swedish translation. ++ - Dragonlord , for his Czech translation. ++ - Fábio Antunes , for his Brazilian Portuguese translation. ++ - Fabio Vergnani , for his Italion translation. ++ - Ihar Hrachyshka , for his vim keybindings patch. ++ - Igor Vagulin , for his Russian translation and patches. ++ - Lester Godwin , for his patches. + - LoneFox <>, for his patches. ++ - Michael Opitz , for his patches. + - Moritz Heiber , for his German translation. + - Mr_Moustache , for his French translation. ++ - Nuno Miguel , for his European Portuguese translation. ++ - Nyu , for his Japanese translation. ++ - Panchoat , for his Simplified Chinese translation. ++ - Piotr Pacholak , for corrections in the Polish translation. ++ - RafaÅ‚ MużyÅ‚o , for his patches. ++ - Sergey Starosek , for his Russian patches. + - Stavros Giannouris , for his Greek translation. ++ - Tilman Sauerbeck , for his patches. + - tbm , for his patches. ++ - Valery Koval , for his patches. + - VnPenguin , for his Vietnamese translation. + - Wei-Lun Chao , for his Traditional Chinese translation. + - Wojciech Myrda , for his Polish translation. + - Yuri Pankov , for his patches. ++ - Yves-Alexis Perez , for his patches. ++ - zhou sf , for his patches. + + If you feel that you should be in this list and I didn't remember to add you in it, please send me an e-mail! :-) -- cgit v1.2.3 From a4cc8f2f9a0f127d436a66b5049c46c561e6457a Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 11:02:53 +0000 Subject: cacao: Removed 0.99.1, switched to 0.99.2, deleted unneeded patches. cacaoh-native: Removed 0.99.1, switched to 0.99.2. cacao-native: Removed 0.99.1, switched to 0.99.2. --- packages/cacao/cacao-native.inc | 6 +-- packages/cacao/cacao-native_0.98+hg20071001.bb | 4 ++ packages/cacao/cacao-native_0.99.1.bb | 7 --- packages/cacao/cacao-native_0.99.2.bb | 7 +++ packages/cacao/cacao_0.99.1.bb | 14 ------ packages/cacao/cacao_0.99.2.bb | 13 ++++++ packages/cacao/cacaoh-native_0.99.1.bb | 5 --- packages/cacao/cacaoh-native_0.99.2.bb | 5 +++ ...0.99.1-build-java-runtime-library-classes.patch | 51 ---------------------- 9 files changed, 32 insertions(+), 80 deletions(-) delete mode 100644 packages/cacao/cacao-native_0.99.1.bb create mode 100644 packages/cacao/cacao-native_0.99.2.bb delete mode 100644 packages/cacao/cacao_0.99.1.bb create mode 100644 packages/cacao/cacao_0.99.2.bb delete mode 100644 packages/cacao/cacaoh-native_0.99.1.bb create mode 100644 packages/cacao/cacaoh-native_0.99.2.bb delete mode 100644 packages/cacao/files/cacao-0.99.1-build-java-runtime-library-classes.patch diff --git a/packages/cacao/cacao-native.inc b/packages/cacao/cacao-native.inc index f4eee16cf6..fc86e684c5 100644 --- a/packages/cacao/cacao-native.inc +++ b/packages/cacao/cacao-native.inc @@ -17,13 +17,13 @@ EXTRA_OECONF = "\ --with-vm-zip=${datadir}/cacao/vm.zip \ \ --with-classpath-libdir=${libdir_jni}:${libdir} \ - --with-classpath-includedir=${incdir}/classpath \ + --with-classpath-includedir=${includedir}/classpath \ --with-classpath-classes=${datadir}/classpath/glibj.zip \ \ --with-java-runtime-library-classes=${datadir}/classpath/glibj.zip \ --with-java-runtime-library-libdir=${libdir_jni}:${libdir} \ - --with-jni_md_h=${incdir}/classpath \ - --with-jni_h=${incdir}/classpath \ + --with-jni_md_h=${includedir}/classpath \ + --with-jni_h=${includedir}/classpath \ " # force usage of ecj-initial diff --git a/packages/cacao/cacao-native_0.98+hg20071001.bb b/packages/cacao/cacao-native_0.98+hg20071001.bb index 409d2c7858..99fd991c1e 100644 --- a/packages/cacao/cacao-native_0.98+hg20071001.bb +++ b/packages/cacao/cacao-native_0.98+hg20071001.bb @@ -3,3 +3,7 @@ require cacao-native.inc PR = "r1" SRC_URI = "http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518" + +# force usage of ecj-initial (but Java5-compatible class library) +export JAVAC = "${STAGING_BINDIR_NATIVE}/ecj-initial -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath/glibj.zip" + diff --git a/packages/cacao/cacao-native_0.99.1.bb b/packages/cacao/cacao-native_0.99.1.bb deleted file mode 100644 index 1cf0cb70cf..0000000000 --- a/packages/cacao/cacao-native_0.99.1.bb +++ /dev/null @@ -1,7 +0,0 @@ -require cacao-native.inc - -PR = "r0" - -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ - " - diff --git a/packages/cacao/cacao-native_0.99.2.bb b/packages/cacao/cacao-native_0.99.2.bb new file mode 100644 index 0000000000..943a2890ea --- /dev/null +++ b/packages/cacao/cacao-native_0.99.2.bb @@ -0,0 +1,7 @@ +require cacao-native.inc + +PR = "r0" + +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d" + + diff --git a/packages/cacao/cacao_0.99.1.bb b/packages/cacao/cacao_0.99.1.bb deleted file mode 100644 index a503c7d3d4..0000000000 --- a/packages/cacao/cacao_0.99.1.bb +++ /dev/null @@ -1,14 +0,0 @@ -require cacao.inc - -PR = "r0" - -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ - file://cacao-${PV}-build-java-runtime-library-classes.patch;patch=1 \ - " - -# Quirks for Nokia N800: -# - with mfloat-abi=softfp the runtime fails to run anything -# - without --enable-softfloat it cannot find files within Jars -TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft" - -EXTRA_OECONF_append_nokia800 = "--enable-softfloat" diff --git a/packages/cacao/cacao_0.99.2.bb b/packages/cacao/cacao_0.99.2.bb new file mode 100644 index 0000000000..5618213d2d --- /dev/null +++ b/packages/cacao/cacao_0.99.2.bb @@ -0,0 +1,13 @@ +require cacao.inc + +PR = "r0" + +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ + " + +# Quirks for Nokia N800: +# - with mfloat-abi=softfp the runtime fails to run anything +# - without --enable-softfloat it cannot find files within Jars +TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft" + +EXTRA_OECONF_append_nokia800 = "--enable-softfloat" diff --git a/packages/cacao/cacaoh-native_0.99.1.bb b/packages/cacao/cacaoh-native_0.99.1.bb deleted file mode 100644 index 11735d4f31..0000000000 --- a/packages/cacao/cacaoh-native_0.99.1.bb +++ /dev/null @@ -1,5 +0,0 @@ -require cacaoh-native.inc - -PR = "r0" - -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d" diff --git a/packages/cacao/cacaoh-native_0.99.2.bb b/packages/cacao/cacaoh-native_0.99.2.bb new file mode 100644 index 0000000000..11735d4f31 --- /dev/null +++ b/packages/cacao/cacaoh-native_0.99.2.bb @@ -0,0 +1,5 @@ +require cacaoh-native.inc + +PR = "r0" + +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d" diff --git a/packages/cacao/files/cacao-0.99.1-build-java-runtime-library-classes.patch b/packages/cacao/files/cacao-0.99.1-build-java-runtime-library-classes.patch deleted file mode 100644 index dffc37b343..0000000000 --- a/packages/cacao/files/cacao-0.99.1-build-java-runtime-library-classes.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff -r 8484332b813c configure.ac ---- a/configure.ac Sun Jun 22 18:19:54 2008 +0200 -+++ b/configure.ac Mon Jun 23 08:53:17 2008 +0200 -@@ -550,6 +550,7 @@ - - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_PREFIX - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_CLASSES -+AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES - - if test x"${ENABLE_JRE_LAYOUT}" = "xno"; then - AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR -diff -r 8484332b813c m4/java-runtime-library.m4 ---- a/m4/java-runtime-library.m4 Sun Jun 22 18:19:54 2008 +0200 -+++ b/m4/java-runtime-library.m4 Mon Jun 23 08:53:17 2008 +0200 -@@ -93,20 +93,32 @@ - AC_DEFINE_UNQUOTED([JAVA_RUNTIME_LIBRARY_CLASSES], "${JAVA_RUNTIME_LIBRARY_CLASSES}", [Java runtime library classes]) - AC_SUBST(JAVA_RUNTIME_LIBRARY_CLASSES) - -+dnl where are Java core library classes located at compilation time -+ -+AC_DEFUN([AC_CHECK_WITH_BUILD_JAVA_RUNTIME_LIBRARY_CLASSES],[ -+AC_MSG_CHECKING(where Java core library classes are located at compile time) -+AC_ARG_WITH([build-java-runtime-library-classes], -+ [AS_HELP_STRING(--with-build-java-runtime-library-classes=,path to Java core library classes (includes the name of the file and may be flat) [[default=${JAVA_RUNTIME_LIBRARY_PREFIX}/share/classpath/glibj.zip]])], -+ [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${withval}], -+ [BUILD_JAVA_RUNTIME_LIBRARY_CLASSES=${JAVA_RUNTIME_LIBRARY_PREFIX}/share/classpath/glibj.zip]) -+AC_MSG_RESULT(${BUILD_JAVA_RUNTIME_LIBRARY_CLASSES}) -+AC_DEFINE_UNQUOTED([BUILD_JAVA_RUNTIME_LIBRARY_CLASSES], "${BUILD_JAVA_RUNTIME_LIBRARY_CLASSES}", [Java core library classes at compile time]) -+AC_SUBST(BUILD_JAVA_RUNTIME_LIBRARY_CLASSES) -+]) -+ - dnl define BOOTCLASSPATH for Makefiles - case "${WITH_JAVA_RUNTIME_LIBRARY}" in - cldc1.1 | gnuclasspath) -- BOOTCLASSPATH="\$(top_builddir)/src/classes/classes:\$(JAVA_RUNTIME_LIBRARY_CLASSES)" -+ BOOTCLASSPATH="\$(top_builddir)/src/classes/classes:\$(BUILD_JAVA_RUNTIME_LIBRARY_CLASSES)" - ;; - *) -- BOOTCLASSPATH="\$(JAVA_RUNTIME_LIBRARY_CLASSES)" -+ BOOTCLASSPATH="\$(BUILD_JAVA_RUNTIME_LIBRARY_CLASSES)" - ;; - esac - AC_SUBST(BOOTCLASSPATH) - ]) - -- --dnl where are Java runtime library native libraries installed -+dnl where are Java runtime library native libraries installed (at compilation time) - - AC_DEFUN([AC_CHECK_WITH_JAVA_RUNTIME_LIBRARY_LIBDIR],[ - AC_MSG_CHECKING(where Java runtime library native libraries are installed) -- cgit v1.2.3 From 3243becc7160f765b7e79997fa83dc2e40860c7c Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 11:21:22 +0000 Subject: classpath 0.97.2: Fixed filename of patch. --- packages/classpath/classpath_0.97.2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/classpath/classpath_0.97.2.bb b/packages/classpath/classpath_0.97.2.bb index fafe0bbb88..ef43374aef 100644 --- a/packages/classpath/classpath_0.97.2.bb +++ b/packages/classpath/classpath_0.97.2.bb @@ -3,7 +3,7 @@ require classpath.inc SRC_URI += "\ file://netif_16.patch;patch=1;pnum=0 \ file://SimpleName.diff;patch=1;pnum=0 \ - file://javanet-local;patch=1;pnum=0 \ + file://javanet-local.patch;patch=1;pnum=0 \ " PR = "r1" -- cgit v1.2.3 From d1fef1c7089b3a02f052ee3a331f4d065c973229 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 11:23:51 +0000 Subject: swfdec-mozilla: depend on gst-ffmpeg --- packages/swfdec/swfdec-mozilla_0.7.2.bb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/swfdec/swfdec-mozilla_0.7.2.bb b/packages/swfdec/swfdec-mozilla_0.7.2.bb index e6f198bdac..63499cfbd3 100644 --- a/packages/swfdec/swfdec-mozilla_0.7.2.bb +++ b/packages/swfdec/swfdec-mozilla_0.7.2.bb @@ -1,7 +1,10 @@ DESCRIPTION = "Swfdec plugin for browsers using NPAPI. Swfdec is a decoder/renderer for Macromedia Flash animations." LICENSE = "LGPL" -DEPENDS = "swfdec gstreamer libsoup-2.4 pango cairo liboil zlib libmad gtk+ alsa-lib" +PR = "r1" + +DEPENDS = "gst-ffmpeg swfdec gstreamer libsoup-2.4 pango cairo liboil zlib libmad gtk+ alsa-lib" +RDEPENDS = "gst-ffmpeg" SRC_URI = "http://swfdec.freedesktop.org/download/swfdec-mozilla/0.7/${P}.tar.gz \ " -- cgit v1.2.3 From 7d4eff7ca985c36f94df1119387a90ac85b752c0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 12:22:58 +0000 Subject: evince: add 2.23.4 --- packages/evince/evince_2.23.4.bb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/evince/evince_2.23.4.bb diff --git a/packages/evince/evince_2.23.4.bb b/packages/evince/evince_2.23.4.bb new file mode 100644 index 0000000000..f5303cabe3 --- /dev/null +++ b/packages/evince/evince_2.23.4.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Evince is a document viewer for document formats like pdf, ps, djvu." +LICENSE = "GPL" +SECTION = "x11/office" +DEPENDS = "gnome-icon-theme tiff libxt espgs gnome-doc-utils poppler libxml2 gtk+ gnome-vfs gconf libglade gnome-keyring " +RDEPENDS = "espgs gnome-icon-theme" +RRECOMMENDS = "gnome-vfs-plugin-file" +PR = "r2" + +inherit gnome pkgconfig gtk-icon-cache + +SRC_URI += " file://no-help-dir.patch;patch=1" + +EXTRA_OECONF = " --without-libgnome \ + --disable-thumbnailer \ + --disable-scrollkeeper \ + --enable-djvu \ + " +FILES_${PN}-dbg = "${libdir}/evince/backends/.debug" + -- cgit v1.2.3 From 4ff1cbf047886c63a609f63df87f573ad2e380e8 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 12:35:04 +0000 Subject: lcd4linux: fix initscript --- packages/lcd4linux/files/lcd4linux.init | 2 +- packages/lcd4linux/lcd4linux_0.10.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lcd4linux/files/lcd4linux.init b/packages/lcd4linux/files/lcd4linux.init index 0972c9005e..c27ee37a1b 100644 --- a/packages/lcd4linux/files/lcd4linux.init +++ b/packages/lcd4linux/files/lcd4linux.init @@ -13,7 +13,7 @@ ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin -DAEMON=/usr/sbin/lcd4linux +DAEMON=/usr/bin/lcd4linux NAME=lcd4linux DESC=lcd4linux diff --git a/packages/lcd4linux/lcd4linux_0.10.0.bb b/packages/lcd4linux/lcd4linux_0.10.0.bb index 4c164de709..fe73954fe5 100644 --- a/packages/lcd4linux/lcd4linux_0.10.0.bb +++ b/packages/lcd4linux/lcd4linux_0.10.0.bb @@ -4,7 +4,7 @@ LICENSE = "GPLv2" DEPENDS = "libusb-compat ncurses readline virtual/libx11" PV = "0.10.0+0.10.1-RC2" -PR = "r3" +PR = "r4" SRC_URI = "http://ssl.bulix.org/projects/lcd4linux/raw-attachment/wiki/Download/lcd4linux-0.10.1-RC2.tar.gz \ file://libusb-compat.diff;patch=1 \ -- cgit v1.2.3 From a6993535d09d741c5758cbbdc7dee66a0cc90b3b Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 12:44:12 +0000 Subject: Added native variants of sqlite[3] needed for javasqlite library. sqlite-native 2.8.17: New recipe. sqlite3-native 3.5.6: New recipe. --- packages/sqlite/sqlite-native_2.8.17.bb | 16 ++++++++++++++++ packages/sqlite/sqlite3-native.inc | 13 +++++++++++++ packages/sqlite/sqlite3-native_3.5.6.bb | 1 + 3 files changed, 30 insertions(+) create mode 100644 packages/sqlite/sqlite-native_2.8.17.bb create mode 100644 packages/sqlite/sqlite3-native.inc create mode 100644 packages/sqlite/sqlite3-native_3.5.6.bb diff --git a/packages/sqlite/sqlite-native_2.8.17.bb b/packages/sqlite/sqlite-native_2.8.17.bb new file mode 100644 index 0000000000..a3100fc60c --- /dev/null +++ b/packages/sqlite/sqlite-native_2.8.17.bb @@ -0,0 +1,16 @@ +# This is put at the top to override do_stage later +inherit native + +require sqlite_${PV}.bb + +DEPENDS = "readline-native ncurses-native" + +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/sqlite-${PV}" + +S = "${WORKDIR}/sqlite-${PV}" + +do_install() { + : +} + +PACKAGES = "" diff --git a/packages/sqlite/sqlite3-native.inc b/packages/sqlite/sqlite3-native.inc new file mode 100644 index 0000000000..d61551703f --- /dev/null +++ b/packages/sqlite/sqlite3-native.inc @@ -0,0 +1,13 @@ +inherit native + +require sqlite3.inc + +DEPENDS = "readline-native ncurses-native" + +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/sqlite3" + +do_install() { + : +} + +PACKAGES = "" diff --git a/packages/sqlite/sqlite3-native_3.5.6.bb b/packages/sqlite/sqlite3-native_3.5.6.bb new file mode 100644 index 0000000000..08208c4c74 --- /dev/null +++ b/packages/sqlite/sqlite3-native_3.5.6.bb @@ -0,0 +1 @@ +require sqlite3-native.inc -- cgit v1.2.3 From e0d701ba170b9da4a9d8b6fbe25d4054c34ec632 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 13:03:19 +0000 Subject: ffmpeg git: bump SRCREV for faster mp3 decoding --- packages/ffmpeg/ffmpeg_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb index 294b6afc22..0fb739a17d 100644 --- a/packages/ffmpeg/ffmpeg_git.bb +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -3,7 +3,7 @@ require ffmpeg.inc DEPENDS += "libgsm" PV = "0.4.9+${PR}+gitr${SRCREV}" -PR = "r12" +PR = "r13" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_armv7a = "1" @@ -12,7 +12,7 @@ FFBRANCH_arm = "arm-neon" FFBRANCH ?= "master" SRCREV = "1e8300e71f79963eacdad6b180d9a12c4f56318d" -SRCREV_arm = "749766cea9969418633abb77b6c8677a884dfcb9" +SRCREV_arm = "d0e4a018bb80814e4aee450ddf9b4f6d3cb97064" SRC_URI = "git://git.mansr.com/ffmpeg.mru;protocol=git;branch=${FFBRANCH} \ " -- cgit v1.2.3 From 54cf3ad40aac692ef3b1784548d69a0f495ef450 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 13:16:39 +0000 Subject: libwpd: update to 0.8.14, fixes problems with gcc 4.3.x --- packages/libwpd/libwpd_0.8.14.bb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/libwpd/libwpd_0.8.14.bb diff --git a/packages/libwpd/libwpd_0.8.14.bb b/packages/libwpd/libwpd_0.8.14.bb new file mode 100644 index 0000000000..f54cfe5822 --- /dev/null +++ b/packages/libwpd/libwpd_0.8.14.bb @@ -0,0 +1,12 @@ +LICENSE = "LGPL" +DESCRIPTION = "libwpd is a C++ library designed to help process WordPerfect documents." +HOMEPAGE = "http://libwpd.sourceforge.net/index.html" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz" +DEPENDS = "libgsf" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} -- cgit v1.2.3 From 85d37bf5630eec2a5198d2049432271052ceaf4a Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 13:35:46 +0000 Subject: Added jamvm-native as a provider for virtual/java-native. Use this if you have trouble with cacao-native (which is somehow miscompiled with Debian's GCC 4.3.1). jamvm-native 1.5.1: New recipe. --- packages/jamvm/jamvm-native.inc | 18 ++++++++++++++++++ packages/jamvm/jamvm-native_1.5.1.bb | 4 ++++ 2 files changed, 22 insertions(+) create mode 100644 packages/jamvm/jamvm-native.inc create mode 100644 packages/jamvm/jamvm-native_1.5.1.bb diff --git a/packages/jamvm/jamvm-native.inc b/packages/jamvm/jamvm-native.inc new file mode 100644 index 0000000000..07eecb52b3 --- /dev/null +++ b/packages/jamvm/jamvm-native.inc @@ -0,0 +1,18 @@ +require jamvm.inc + +DEPENDS = "zlib-native classpath-native virtual/javac-native" + +PROVIDES_jamvm = "virtual/java-native" + +RPROVIDES_jamvm = "" + +# This uses 32 bit arm, so force the instruction set to arm, not thumb +ARM_INSTRUCTION_SET = "arm" + +inherit native + +S = "${WORKDIR}/jamvm-${PV}" + +do_install_append() { + ln -sf jamvm ${STAGING_BINDIR}/java +} diff --git a/packages/jamvm/jamvm-native_1.5.1.bb b/packages/jamvm/jamvm-native_1.5.1.bb new file mode 100644 index 0000000000..e174e2a312 --- /dev/null +++ b/packages/jamvm/jamvm-native_1.5.1.bb @@ -0,0 +1,4 @@ +require jamvm-native.inc + +PR = "r0" + -- cgit v1.2.3 From bd40543cd6a48c75f0194819a941a81f79e67659 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 13:40:55 +0000 Subject: sqlitejdbc 041: New recipe. --- packages/sqlitejdbc/.mtn2git_empty | 0 packages/sqlitejdbc/sqlitejdbc_041.bb | 46 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 packages/sqlitejdbc/.mtn2git_empty create mode 100644 packages/sqlitejdbc/sqlitejdbc_041.bb diff --git a/packages/sqlitejdbc/.mtn2git_empty b/packages/sqlitejdbc/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/sqlitejdbc/sqlitejdbc_041.bb b/packages/sqlitejdbc/sqlitejdbc_041.bb new file mode 100644 index 0000000000..c2ab0f9b23 --- /dev/null +++ b/packages/sqlitejdbc/sqlitejdbc_041.bb @@ -0,0 +1,46 @@ +DESCRIPTION = "JDBC driver for sqlite" +LICENSE = "BSD" + +AUTHOR = "David Crawshaw" +HOMEPAGE = "http://www.zentus.com/sqlitejdbc/" + +SRC_URI = "\ + http://www.zentus.com/${PN}/dist/${PN}-v${PV}-src.tgz \ + " + +S = "${WORKDIR}/${PN}-v${PV}" + +inherit java-library + +DEPENDS = "classpath-native fastjar-native sqlite3 classpath" +RDEPENDS_${JPN} = "libsqlitejdbc-jni" + +do_unpackpost() { + mkdir build native +} + +addtask unpackpost after do_unpack before do_patch + +do_compile() { + javac -sourcepath src -d build `find src/org -name "*.java" -and -not -name "*Nested*"` + (cd src && find . -name "*.properties" -exec cp {} ../build/{} \;) + fastjar -C build -c -f ${JARFILENAME} . + + gjavah -classpath build -jni -o native/NativeDB.h org.sqlite.NativeDB + ${CC} ${CFLAGS} -c -o native/NativeDB.o src/org/sqlite/NativeDB.c -I${STAGING_INCDIR}/classpath -Inative + ${CC} ${CFLAGS} ${LDFLAGS} -shared -lsqlite3 -o libsqlitejdbc.so native/NativeDB.o + + ${STRIP} libsqlitejdbc.so +} + +do_install_append() { + oe_libinstall -so libsqlitejdbc ${D}${libdir_jni} +} + +do_install_append() { + oe_libinstall -so libsqlitejdbc ${STAGING_LIBDIR_JNI} +} + +PACKAGES += "libsqlitejdbc-jni" + +FILES_libsqlitejdbc-jni = "${libdir_jni}" -- cgit v1.2.3 From 100310f93696054353350b27a35c49f9b60b2015 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 14:00:47 +0000 Subject: asio: add 1.1.1 --- packages/asio/.mtn2git_empty | 0 packages/asio/asio_1.1.1.bb | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 packages/asio/.mtn2git_empty create mode 100644 packages/asio/asio_1.1.1.bb diff --git a/packages/asio/.mtn2git_empty b/packages/asio/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/asio/asio_1.1.1.bb b/packages/asio/asio_1.1.1.bb new file mode 100644 index 0000000000..89b363dd8a --- /dev/null +++ b/packages/asio/asio_1.1.1.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Asio" +HOMEPAGE = "http://asio.sf.net/" +SECTION = "libs" +PRIORITY = "optional" +LICENSE = "Boost Software License" + +SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${PN}-${PV}.tar.bz2" + +inherit autotools pkgconfig + +do_stage() { + autotools_stage_all +} + -- cgit v1.2.3 From a105e4422b3ef7da6cc1716443f392647dd06354 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 14:24:20 +0000 Subject: t1lib: if we stage the x11 header lets also build the corresponding library. --- packages/t1lib/t1lib_5.0.2.bb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/t1lib/t1lib_5.0.2.bb b/packages/t1lib/t1lib_5.0.2.bb index 3934016c1e..5da31f7d09 100644 --- a/packages/t1lib/t1lib_5.0.2.bb +++ b/packages/t1lib/t1lib_5.0.2.bb @@ -1,7 +1,8 @@ DESCRIPTION = "A Type1 Font Rastering Library" SECTION = "libs" PRIORITY = "optional" -PR = "r3" +DEPENDS = "virtual/libx11" +PR = "r4" LICENSE = "LGPL GPL" SRC_URI = "${DEBIAN_MIRROR}/main/t/t1lib/t1lib_${PV}.orig.tar.gz \ file://configure.patch;patch=1 \ @@ -10,7 +11,7 @@ SRC_URI = "${DEBIAN_MIRROR}/main/t/t1lib/t1lib_${PV}.orig.tar.gz \ inherit autotools -EXTRA_OECONF = "--without-x --without-athena" +EXTRA_OECONF = "--with-x --without-athena" EXTRA_OEMAKE = "without_doc" do_configure() { @@ -19,9 +20,7 @@ do_configure() { } do_stage() { - oe_libinstall -so -C lib libt1 ${STAGING_LIBDIR} - install lib/t1lib/t1lib.h ${STAGING_INCDIR}/ - install lib/t1lib/t1libx.h ${STAGING_INCDIR}/ + autotools_stage_all } FILES_${PN} = "${bindir}/* ${libdir}/*.so* ${datadir}/t1lib/t1lib.config" -- cgit v1.2.3 From 94667ace4424256bfd2e85ef5fe98b434dbbf58d Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Sun, 13 Jul 2008 16:16:50 +0000 Subject: u-boot-git: update beagleboard base patch with nand ecc command, bump SRCREV --- packages/u-boot/u-boot-git/beagleboard/base.patch | 97 ++++++++++++++++------- packages/u-boot/u-boot_git.bb | 4 +- 2 files changed, 70 insertions(+), 31 deletions(-) diff --git a/packages/u-boot/u-boot-git/beagleboard/base.patch b/packages/u-boot/u-boot-git/beagleboard/base.patch index dedc34398f..d4f726c006 100644 --- a/packages/u-boot/u-boot-git/beagleboard/base.patch +++ b/packages/u-boot/u-boot-git/beagleboard/base.patch @@ -1,5 +1,5 @@ diff --git a/Makefile b/Makefile -index 8bfc891..e9bf61a 100644 +index e557d0d..3eac691 100644 --- a/Makefile +++ b/Makefile @@ -141,7 +141,7 @@ ifeq ($(ARCH),ppc) @@ -11,7 +11,7 @@ index 8bfc891..e9bf61a 100644 endif ifeq ($(ARCH),i386) CROSS_COMPILE = i386-linux- -@@ -252,7 +252,7 @@ LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a +@@ -253,7 +253,7 @@ LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a LIBBOARD := $(addprefix $(obj),$(LIBBOARD)) # Add GCC lib @@ -20,7 +20,7 @@ index 8bfc891..e9bf61a 100644 # The "tools" are needed early, so put this first # Don't include stuff already done in $(LIBS) -@@ -2565,6 +2565,12 @@ SMN42_config : unconfig +@@ -2569,6 +2569,12 @@ SMN42_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm720t SMN42 siemens lpc2292 ######################################################################### @@ -1467,10 +1467,10 @@ index 0000000..2f94684 +#endif /* (CONFIG_COMMANDS & CFG_CMD_NAND) */ diff --git a/board/omap3530beagle/omap3530beagle.c b/board/omap3530beagle/omap3530beagle.c new file mode 100644 -index 0000000..0bdfb72 +index 0000000..7d9a566 --- /dev/null +++ b/board/omap3530beagle/omap3530beagle.c -@@ -0,0 +1,390 @@ +@@ -0,0 +1,388 @@ +/* + * (C) Copyright 2004-2008 + * Texas Instruments, @@ -1740,8 +1740,6 @@ index 0000000..0bdfb72 + *((uint *) 0x49058094) = 0x00000506; + *((uint *) 0x49056094) = 0xF060F000; + -+ /* set clksel_tv and clksel_dss1 */ -+ *((uint *) 0x48004E40) = 0x00001002; + return (0); +} + @@ -2323,19 +2321,60 @@ index 0000000..72f15f6 + .bss : { *(.bss) } + _end = .; +} -diff --git a/common/env_nand.c b/common/env_nand.c -index a48e98e..8b04a01 100644 ---- a/common/env_nand.c -+++ b/common/env_nand.c -@@ -231,6 +231,8 @@ int saveenv(void) - size_t total; - int ret = 0; +diff --git a/common/cmd_nand.c b/common/cmd_nand.c +index 9e38bf7..0ae362c 100644 +--- a/common/cmd_nand.c ++++ b/common/cmd_nand.c +@@ -37,6 +37,12 @@ int find_dev_and_part(const char *id, struct mtd_device **dev, + u8 *part_num, struct part_info **part); + #endif -+ nand_erase_options_t nand_erase_options; ++#if defined(CONFIG_OMAP) && (defined(CONFIG_OMAP3_BEAGLE)) ++extern void omap_nand_switch_ecc(nand_info_t *nand, int hardware); ++#else ++#define omap_nand_switch_ecc(x, y) do {} while(0) ++#endif + - nand_erase_options.length = CFG_ENV_RANGE; - nand_erase_options.quiet = 0; - nand_erase_options.jffs2 = 0; + static int nand_dump_oob(nand_info_t *nand, ulong off) + { + return 0; +@@ -222,7 +228,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) + strncmp(cmd, "dump", 4) != 0 && + strncmp(cmd, "read", 4) != 0 && strncmp(cmd, "write", 5) != 0 && + strcmp(cmd, "scrub") != 0 && strcmp(cmd, "markbad") != 0 && +- strcmp(cmd, "biterr") != 0 && ++ strcmp(cmd, "biterr") != 0 && strncmp(cmd, "ecc", 3) != 0 && + strcmp(cmd, "lock") != 0 && strcmp(cmd, "unlock") != 0 ) + goto usage; + +@@ -307,6 +313,19 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) + + } + ++ if (strncmp(cmd, "ecc", 3) == 0) { ++ if (argc < 2) ++ goto usage; ++ if (strncmp(argv[2], "hw", 2) == 0) ++ omap_nand_switch_ecc(nand, 1); ++ else if (strncmp(argv[2], "sw", 2) == 0) ++ omap_nand_switch_ecc(nand, 0); ++ else ++ goto usage; ++ ++ return 0; ++ } ++ + /* read write */ + if (strncmp(cmd, "read", 4) == 0 || strncmp(cmd, "write", 5) == 0) { + int read; +@@ -472,6 +491,7 @@ U_BOOT_CMD(nand, 5, 1, do_nand, + "nand scrub - really clean NAND erasing bad blocks (UNSAFE)\n" + "nand markbad off - mark bad block at offset (UNSAFE)\n" + "nand biterr off - make a bit error at offset (UNSAFE)\n" ++ "nand ecc [hw/sw] - switch the ecc calculation algorithm \n" + "nand lock [tight] [status] - bring nand to lock state or display locked pages\n" + "nand unlock [offset] [size] - unlock section\n"); + diff --git a/cpu/omap3/Makefile b/cpu/omap3/Makefile new file mode 100644 index 0000000..097447a @@ -4122,10 +4161,10 @@ index 7dab786..7782e9d 100644 udelay(1000); }else diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c -index 7e27ee1..e552e08 100644 +index d1423c1..a75c606 100644 --- a/fs/jffs2/jffs2_1pass.c +++ b/fs/jffs2/jffs2_1pass.c -@@ -303,7 +303,9 @@ static inline void *get_node_mem_nor(u32 off) +@@ -304,7 +304,9 @@ static inline void *get_node_mem_nor(u32 off) */ static inline void *get_fl_mem(u32 off, u32 size, void *ext_buf) { @@ -4135,7 +4174,7 @@ index 7e27ee1..e552e08 100644 #if defined(CONFIG_CMD_FLASH) if (id->type == MTD_DEV_TYPE_NOR) -@@ -321,7 +323,9 @@ static inline void *get_fl_mem(u32 off, u32 size, void *ext_buf) +@@ -322,7 +324,9 @@ static inline void *get_fl_mem(u32 off, u32 size, void *ext_buf) static inline void *get_node_mem(u32 off) { @@ -4270,7 +4309,7 @@ index 0000000..7cdd58c +#endif diff --git a/include/asm-arm/arch-omap3/clocks_omap3.h b/include/asm-arm/arch-omap3/clocks_omap3.h new file mode 100644 -index 0000000..9bb4700 +index 0000000..fdb0c4c --- /dev/null +++ b/include/asm-arm/arch-omap3/clocks_omap3.h @@ -0,0 +1,101 @@ @@ -4319,7 +4358,7 @@ index 0000000..9bb4700 +/* PER DPLL */ +# define PER_M6X2 3 /* 288MHz: CM_CLKSEL1_EMU */ +# define PER_M5X2 4 /* 216MHz: CM_CLKSEL_CAM */ -+# define PER_M4X2 9 /* 96MHz : CM_CLKSEL_DSS-dss1 */ ++# define PER_M4X2 2 /* 432MHz : CM_CLKSEL_DSS-dss1 */ +# define PER_M3X2 16 /* 54MHz : CM_CLKSEL_DSS-tv */ + +# define CLSEL1_EMU_VAL ((CORE_M3X2 << 16) | (PER_M6X2 << 24) | (0x0a50)) @@ -5406,7 +5445,7 @@ index 0000000..37aaa08 +#endif /* MMC_HOST_DEF_H */ diff --git a/include/asm-arm/arch-omap3/mux.h b/include/asm-arm/arch-omap3/mux.h new file mode 100644 -index 0000000..33947b9 +index 0000000..ec4aeb0 --- /dev/null +++ b/include/asm-arm/arch-omap3/mux.h @@ -0,0 +1,757 @@ @@ -6046,8 +6085,8 @@ index 0000000..33947b9 + MUX_VAL(CP(HSUSB0_DATA7), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA7*/\ + MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) /*I2C1_SCL*/\ + MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)) /*I2C1_SDA*/\ -+ MUX_VAL(CP(I2C2_SCL), (IDIS | PTU | DIS | M4)) /*GPIO_168*/\ -+ MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M4)) /*GPIO_183*/\ ++ MUX_VAL(CP(I2C2_SCL), (IEN | PTU | EN | M0)) /*I2C2_SCL*/\ ++ MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M0)) /*I2C2_SDA*/\ + MUX_VAL(CP(I2C3_SCL), (IEN | PTU | EN | M0)) /*I2C3_SCL*/\ + MUX_VAL(CP(I2C3_SDA), (IEN | PTU | EN | M0)) /*I2C3_SDA*/\ + MUX_VAL(CP(I2C4_SCL), (IEN | PTU | EN | M0)) /*I2C4_SCL*/\ @@ -6376,7 +6415,7 @@ index 0000000..271b554 +#endif diff --git a/include/configs/omap3530beagle.h b/include/configs/omap3530beagle.h new file mode 100644 -index 0000000..fd21ab3 +index 0000000..20efbf3 --- /dev/null +++ b/include/configs/omap3530beagle.h @@ -0,0 +1,292 @@ @@ -6532,9 +6571,9 @@ index 0000000..fd21ab3 +/* Environment information */ +#define CONFIG_BOOTDELAY 10 + -+#define CONFIG_BOOTCOMMAND "mmcinit;fatload mmc 0 0x80300000 uImage; fatload mmc 0 0x81600000 rd-ext2.bin; bootm 0x80300000\0" ++#define CONFIG_BOOTCOMMAND "nand read 80200000 280000 400000 ; bootm 80200000" + -+#define CONFIG_BOOTARGS "setenv bootargs console=ttyS2,115200n8 ramdisk_size=3072 root=/dev/ram0 rw rootfstype=ext2 initrd=0x81600000,3M " ++#define CONFIG_BOOTARGS "setenv bootargs console=ttyS2,115200n8 noinitrd root=/dev/mtdblock4 rw rootfstype=jffs2" + +#define CONFIG_NETMASK 255.255.254.0 +#define CONFIG_IPADDR 128.247.77.90 diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index e900ab41db..81842921cc 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,8 +1,8 @@ require u-boot.inc -PR="r9" +PR="r10" SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" -SRCREV_beagleboard = "9b55a2536919f4de1bb1044e6eb8262c2f53bc96" +SRCREV_beagleboard = "bde63587622c4b830a27d1ddf7265843de9e994f" SRCREV_neuros-osd2 = "482dfe48845192c7f810bccfc93db93d0f1654f7" SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git " -- cgit v1.2.3 From a7ff06b5a9a1db14003009e39a8d9a97678ab268 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 16:28:33 +0000 Subject: gtkmathview: add 0.8.0 --- packages/mml-widget/files/.mtn2git_empty | 0 packages/mml-widget/files/mathview-gcc43x.diff | 53 ++++++++++++++++++++++++++ packages/mml-widget/gtkmathview_0.7.6.bb | 4 +- packages/mml-widget/gtkmathview_0.8.0.bb | 24 ++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 packages/mml-widget/files/.mtn2git_empty create mode 100644 packages/mml-widget/files/mathview-gcc43x.diff create mode 100644 packages/mml-widget/gtkmathview_0.8.0.bb diff --git a/packages/mml-widget/files/.mtn2git_empty b/packages/mml-widget/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/mml-widget/files/mathview-gcc43x.diff b/packages/mml-widget/files/mathview-gcc43x.diff new file mode 100644 index 0000000000..4091051a76 --- /dev/null +++ b/packages/mml-widget/files/mathview-gcc43x.diff @@ -0,0 +1,53 @@ +--- /tmp/mathVariantAux.cc 2008-07-13 15:56:56.000000000 +0200 ++++ gtkmathview-0.8.0/src/engine/mathml/mathVariantAux.cc 2008-07-13 15:57:46.893198000 +0200 +@@ -20,6 +20,8 @@ + + #include + ++#include ++ + #include "mathVariantAux.hh" + + static MathVariantAttributes vattr[] = { +--- /tmp/T1_FontDataBase.cc 2008-07-13 16:25:24.000000000 +0200 ++++ gtkmathview-0.8.0/src/backend/ps/T1_FontDataBase.cc 2008-07-13 16:25:47.123198000 +0200 +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +--- /tmp/SMS.cc 2008-07-13 16:27:23.000000000 +0200 ++++ gtkmathview-0.8.0/mathmlsvg/SMS.cc 2008-07-13 16:27:41.543198000 +0200 +@@ -19,6 +19,7 @@ + #include + + #include ++#include + #include "defs.h" + #include "AbstractLogger.hh" + #include "ValueConversion.hh" +--- /tmp/main.cc 2008-07-13 16:29:11.000000000 +0200 ++++ gtkmathview-0.8.0/mathmlsvg/main.cc 2008-07-13 16:29:28.813198000 +0200 +@@ -20,7 +20,7 @@ + + #include + #include +- ++#include + #include + + // needed for old versions of GCC, must come before String.hh! +--- /tmp/main.cc 2008-07-13 16:30:11.000000000 +0200 ++++ gtkmathview-0.8.0/mathmlps/main.cc 2008-07-13 16:30:33.183198000 +0200 +@@ -20,7 +20,7 @@ + + #include + #include +- ++#include + #include + + // needed for old versions of GCC, must come before String.hh! diff --git a/packages/mml-widget/gtkmathview_0.7.6.bb b/packages/mml-widget/gtkmathview_0.7.6.bb index 7cb91b4ba3..55f4328f7e 100644 --- a/packages/mml-widget/gtkmathview_0.7.6.bb +++ b/packages/mml-widget/gtkmathview_0.7.6.bb @@ -9,10 +9,10 @@ inherit autotools pkgconfig EXTRA_OECONF = "--disable-binreloc" do_configure() { -oe_runconf + oe_runconf } do_stage() { -autotools_stage_all + autotools_stage_all } diff --git a/packages/mml-widget/gtkmathview_0.8.0.bb b/packages/mml-widget/gtkmathview_0.8.0.bb new file mode 100644 index 0000000000..2fe48ea872 --- /dev/null +++ b/packages/mml-widget/gtkmathview_0.8.0.bb @@ -0,0 +1,24 @@ +LICENSE = "GPL" +HOMEPAGE = "http://helm.cs.unibo.it/mml-widget/" +DEPENDS = "t1lib gtk+ popt libxslt libxml2" + +SRC_URI = "http://helm.cs.unibo.it/mml-widget/sources/${P}.tar.gz \ + file://mathview-gcc43x.diff;patch=1 \ + " + +inherit autotools +AUTOTOOLS_STAGE_PKGCONFIG = 1 + +EXTRA_OECONF = "--disable-binreloc" + +do_configure_prepend() { + sed -i -e s:AM_BINRELOC::g ${S}/configure.ac +} + +do_stage() { + autotools_stage_all + for i in ${PKG_CONFIG_DIR}/*math*.pc ; do + sed -i -e s:${STAGING_INCDIR}:'${libdir}':g $i + done +} + -- cgit v1.2.3 From 0b1462e7b804d485ea30dc9d98dccb2c48f4831b Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 16:55:58 +0000 Subject: javasqlite: New recipe. javasqlite-mkconst-native: New recipe. --- packages/javasqlite/.mtn2git_empty | 0 packages/javasqlite/files/.mtn2git_empty | 0 packages/javasqlite/files/build-fix.patch | 378 +++++++++++++++++++++ .../javasqlite-mkconst-native_20080130.bb | 52 +++ packages/javasqlite/javasqlite_20080130.bb | 46 +++ 5 files changed, 476 insertions(+) create mode 100644 packages/javasqlite/.mtn2git_empty create mode 100644 packages/javasqlite/files/.mtn2git_empty create mode 100644 packages/javasqlite/files/build-fix.patch create mode 100644 packages/javasqlite/javasqlite-mkconst-native_20080130.bb create mode 100644 packages/javasqlite/javasqlite_20080130.bb diff --git a/packages/javasqlite/.mtn2git_empty b/packages/javasqlite/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/javasqlite/files/.mtn2git_empty b/packages/javasqlite/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/javasqlite/files/build-fix.patch b/packages/javasqlite/files/build-fix.patch new file mode 100644 index 0000000000..34befc0850 --- /dev/null +++ b/packages/javasqlite/files/build-fix.patch @@ -0,0 +1,378 @@ +Index: javasqlite-20080130/configure.in +=================================================================== +--- javasqlite-20080130.orig/configure.in 2008-01-07 19:21:33.000000000 +0100 ++++ javasqlite-20080130/configure.in 2008-07-13 15:54:47.000000000 +0200 +@@ -30,69 +30,25 @@ + ########## + # Find SQLite header file and library + # +-AC_ARG_WITH(sqlite, [ --with-sqlite=DIR use SQLite header/lib from DIR], +- SQLITE_DIR=$withval) +-if test ! -n "$SQLITE_DIR" -a -d "$SQLITE_DIR" ; then +- AC_MSG_WARN([SQLite2 directory $SQLITE_DIR does not exist]) ++AC_ARG_WITH(sqlite-incdir, [ --with-sqlite-incdir=DIR use SQLite header from DIR], ++ SQLITE_INCDIR=$withval) ++if test ! -n "$SQLITE_INCDIR" -a -d "$SQLITE_INCDIR" ; then ++ AC_MSG_WARN([SQLite2 directory $SQLITE_INCDIR does not exist]) + fi + +-if test -z "$SQLITE_DIR" ; then +- SQLITE_DIR="../sqlite /usr /usr/local /opt" ++AC_ARG_WITH(sqlite-libdir, [ --with-sqlite-libdir=DIR use SQLite lib from DIR], ++ SQLITE_LIBDIR=$withval) ++if test ! -n "$SQLITE_LIBDIR" -a -d "$SQLITE_LIBDIR" ; then ++ AC_MSG_WARN([SQLite2 directory $SQLITE_LIBDIR does not exist]) + fi + +-AC_MSG_CHECKING([for SQLite header and library]) +-SQLITE_INC=UNKNOWN +-SQLITE_LIB=UNKNOWN +-for i in $SQLITE_DIR ; do +- if test -r $i/sqlite.h ; then +- if test -r $i/libsqlite.la ; then +- SQLITE_INC="$i" +- SQLITE_LIB="$i/libsqlite.la" +- SQLITE_LIBDIR="$i" +- break +- elif test -r $i/libsqlite.a ; then +- SQLITE_INC="$i" +- SQLITE_LIB="$i/libsqlite.a" +- SQLITE_LIBDIR="$i" +- break +- fi +- elif test -r $i/include/sqlite.h ; then +- for lib in lib64 lib ; do +- if test -r $i/$lib/libsqlite.la ; then +- SQLITE_INC="$i/include" +- SQLITE_LIB="$i/$lib/libsqlite.la" +- SQLITE_LIBDIR="$i/$lib" +- break +- elif test -r $i/$lib/libsqlite.a ; then +- SQLITE_INC="$i/include" +- SQLITE_LIB="$i/$lib/libsqlite.a" +- SQLITE_LIBDIR="$i/$lib" +- break +- elif test -r $i/$lib/libsqlite.so ; then +- SQLITE_INC="$i/include" +- SQLITE_LIB="-lsqlite" +- SQLITE_LIBDIR="$i/$lib" +- break +- fi +- done +- if test "$SQLITE_LIB" != "UNKNOWN" ; then +- break +- fi +- fi +-done +-if test "$SQLITE_INC" = "UNKNOWN" -o "$SQLITE_LIB" = "UNKNOWN" ; then +- AC_MSG_RESULT(no) +- AC_MSG_WARN(SQLite2 header files and/or library not found) +- SQLITE_INC="" +- SQLITE_LIB="" +- HAVE_SQLITE2=0 +-else +- SQLITE_INC="-I${SQLITE_INC}" +- HAVE_SQLITE2=1 +- AC_MSG_RESULT(yes) +-fi ++SQLITE_INC="-I$SQLITE_INCDIR" ++SQLITE_LIB="-lsqlite" ++HAVE_SQLITE2=1 ++ + AC_SUBST(SQLITE_INC) + AC_SUBST(SQLITE_LIB) ++AC_SUBST(SQLITE_LIBDIR) + AC_SUBST(HAVE_SQLITE2) + + ########## +@@ -127,70 +83,28 @@ + ########## + # Find SQLite3 header file and library + # +-AC_ARG_WITH(sqlite3, +- [ --with-sqlite3=DIR use SQLite3 header/lib from DIR], +- SQLITE3_DIR=$withval) +-if test ! -n "$SQLITE3_DIR" -a -d "$SQLITE3_DIR" ; then +- AC_MSG_WARN([SQLite3 directory $SQLITE3_DIR does not exist]) ++AC_ARG_WITH(sqlite3-incdir, ++ [ --with-sqlite3-incdir=DIR use SQLite3 header from DIR], ++ SQLITE3_INCDIR=$withval) ++if test ! -n "$SQLITE3_INCDIR" -a -d "$SQLITE3_INCDIR" ; then ++ AC_MSG_WARN([SQLite3 directory $SQLITE3_INCDIR does not exist]) + fi + +-if test -z "$SQLITE3_DIR" ; then +- SQLITE3_DIR="../sqlite /usr /usr/local /opt" ++AC_ARG_WITH(sqlite3-libdir, ++ [ --with-sqlite3-libdir=DIR use SQLite3 lib from DIR], ++ SQLITE3_LIBDIR=$withval) ++if test ! -n "$SQLITE3_LIBDIR" -a -d "$SQLITE3_LIBDIR" ; then ++ AC_MSG_WARN([SQLite3 directory $SQLITE3_LIBDIR does not exist]) + fi + +-AC_MSG_CHECKING([for SQLite3 header and library]) +-SQLITE3_INC=UNKNOWN +-SQLITE3_LIB=UNKNOWN +-for i in $SQLITE3_DIR ; do +- if test -r $i/sqlite3.h ; then +- if test -r $i/libsqlite3.la ; then +- SQLITE3_INC="$i" +- SQLITE3_LIB="$i/libsqlite3.la" +- SQLITE3_LIBDIR="$i" +- break +- elif test -r $i/libsqlite3.a ; then +- SQLITE3_INC="$i" +- SQLITE3_LIB="$i/libsqlite3.a" +- SQLITE3_LIBDIR="$i" +- break +- fi +- elif test -r $i/include/sqlite3.h ; then +- for lib in lib64 lib ; do +- if test -r $i/$lib/libsqlite3.la ; then +- SQLITE3_INC="$i/include" +- SQLITE3_LIB="$i/$lib/libsqlite3.la" +- SQLITE3_LIBDIR="$i/$lib" +- break +- elif test -r $i/$lib/libsqlite3.a ; then +- SQLITE3_INC="$i/include" +- SQLITE3_LIB="$i/$lib/libsqlite3.a" +- SQLITE3_LIBDIR="$i/$lib" +- break +- elif test -r $i/$lib/libsqlite3.so ; then +- SQLITE3_INC="$i/include" +- SQLITE3_LIB="-lsqlite3" +- SQLITE3_LIBDIR="$i/$lib" +- break +- fi +- done +- if test "$SQLITE3_LIB" != "UNKNOWN" ; then +- break +- fi +- fi +-done +-if test "$SQLITE3_INC" = "UNKNOWN" -o "$SQLITE3_LIB" = "UNKNOWN" ; then +- AC_MSG_RESULT(no) +- AC_MSG_WARN(SQLite3 header files and/or library not found) +- SQLITE3_INC="" +- SQLITE3_LIB="" +- HAVE_SQLITE3=0 +-else +- SQLITE3_INC="-I${SQLITE3_INC}" +- HAVE_SQLITE3=1 +- AC_MSG_RESULT(yes) +-fi ++SQLITE3_INC="-I$SQLITE3_INCDIR" ++SQLITE3_LIB="-lsqlite3" ++ ++HAVE_SQLITE3=1 ++ + AC_SUBST(SQLITE3_INC) + AC_SUBST(SQLITE3_LIB) ++AC_SUBST(SQLITE3_LIBDIR) + AC_SUBST(HAVE_SQLITE3) + + ########## +@@ -310,52 +224,45 @@ + # + + AC_CHECK_PROG([READLINK], [readlink], [readlink], []) +-AC_ARG_WITH(jdk, [ --with-jdk=DIR use Java top directory DIR], +- JAVA_HOME=$withval) +-if test -z "$JAVA_HOME" ; then +- JAVA_HOME=`which javac` +- if test -n "$READLINK" ; then +- while test -L $JAVA_HOME ; do +- JAVA_HOME=`$READLINK $JAVA_HOME` +- done +- fi +- JAVA_HOME=`dirname $JAVA_HOME` +- JAVA_HOME=`dirname $JAVA_HOME` +- if test "x$JAR_DIR_UNSPEC" = "xyes" ; then +- JAR_DIR=$JAVA_HOME/jre/lib/ext +- AC_MSG_RESULT([will install sqlite.jar into $JAR_DIR]) +- fi +- if test "$prefix" = "/usr/local" ; then +- case "$target_cpu" in +- [i[3-6]86*]) +- NATIVE_LIB_DIR=$JAVA_HOME/jre/lib/i386 +- ;; +- *) +- NATIVE_LIB_DIR=$JAVA_HOME/jre/lib/$target_cpu +- ;; +- esac +- AC_MSG_RESULT([will install libsqlite_jni into $NATIVE_LIB_DIR]) +- fi +-fi +-if test ! -d "$JAVA_HOME" ; then +- AC_MSG_ERROR([JAVA_HOME directory not found, please use --with-jdk=DIR]) +-fi + +-if test -n "$JAVA_HOME" ; then +- JAVA_RUN=$JAVA_HOME/bin/java +- JAVAC=$JAVA_HOME/bin/javac +- JAVAH="$JAVA_HOME/bin/javah -jni" +- JAR=$JAVA_HOME/bin/jar +- JAVADOC=$JAVA_HOME/bin/javadoc +-else +- JAVA_RUN=`which java` +- JAVAC=`which javac` +- JAVAH="`which javah` -jni" +- JAR=`which jar` +- JAVADOC=`which javadoc` +- JAVA_HOME=`dirname $JAVAC` +- JAVA_HOME=`dirname $JAVA_HOME` +-fi ++AC_ARG_WITH([java], ++ [AS_HELP_STRING([--with-java], ++ [specify Java executable (default: java)])], ++ [], ++ [with_java=java]) ++ ++AC_ARG_WITH([javac], ++ [AS_HELP_STRING([--with-javac], ++ [specify Java Compiler executable (default: javac)])], ++ [], ++ [with_javac=javac]) ++ ++AC_ARG_WITH([javah], ++ [AS_HELP_STRING([--with-javah], ++ [specify Java Header generator executable (default: javah)])], ++ [], ++ [with_javah=javah]) ++ ++AC_ARG_WITH([jar], ++ [AS_HELP_STRING([--with-jar], ++ [specify Jar executable (default: jar)])], ++ [], ++ [with_jar=jar]) ++ ++AC_ARG_WITH([javadoc], ++ [AS_HELP_STRING([--with-javadoc], ++ [specify Javadoc executable (default: javadoc)])], ++ [], ++ [with_javadoc=javadoc]) ++ ++JAVA_RUN="$with_java" ++JAVAC="$with_javac $JAVACFLAGS" ++JAVAH="$with_javah -jni" ++JAR=$with_jar ++JAVADOC=$with_javadoc ++ ++JAVA_HOME=`dirname $JAVAC` ++JAVA_HOME=`dirname $JAVA_HOME` + + AC_SUBST(JAVAH) + AC_SUBST(JAVA_RUN) +@@ -363,22 +270,14 @@ + AC_SUBST(JAR) + AC_SUBST(JAVADOC) + ++AC_ARG_WITH([jni-incdir], ++ [AS_HELP_STRING([--with-jni-incdir], ++ [jni.h location (default: $inc/classpath)])], ++ [], ++ [with_jni_incdir=$inc/classpath]) ++ + # Set up the JNI include directory specification +-case $build_os in +- solaris*) +- JNIINCLUDE="-I$JAVA_HOME/include -I$JAVA_HOME/include/solaris" +- ;; +- linux*) +- JNIINCLUDE="-I$JAVA_HOME/include -I$JAVA_HOME/include/linux" +- ;; +- freebsd*) +- JNIINCLUDE="-I$JAVA_HOME/include -I$JAVA_HOME/include/freebsd" +- ;; +- *) +- JNIINCLUDE="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/${build_os}" +- AC_MSG_WARN([setting generic JNI include file directives!]) +- ;; +-esac ++JNIINCLUDE=-I$with_jni_incdir + AC_MSG_RESULT([setting JNI include file directives: $JNIINCLUDE]) + + # Figure out JDK version +@@ -398,9 +297,12 @@ + JAVAC="$JAVAC -nowarn" + fi + +-if test "x$NATIVE_LIB_DIR" = "x" ; then +- NATIVE_LIB_DIR=$libdir +-fi ++AC_ARG_WITH([target-native-libdir], ++ [AS_HELP_STRING([--with-target-native-libdir], ++ [directory for JNI library on target device (default: \$libdir)])], ++ [], ++ [with_target_native_libdir=$libdir]) ++NATIVE_LIB_DIR=$with_target_native_libdir + + AC_SUBST(JNIINCLUDE) + AC_SUBST(JAR_DIR) +Index: javasqlite-20080130/Makefile.in +=================================================================== +--- javasqlite-20080130.orig/Makefile.in 2008-01-07 19:14:29.000000000 +0100 ++++ javasqlite-20080130/Makefile.in 2008-07-13 17:03:10.000000000 +0200 +@@ -2,7 +2,12 @@ + + prefix = @prefix@ + CC = @CC@ +-LIBTOOL = ./libtool ++LIBTOOL = wrong-libtool ++LIBTOOL_CC = $(LIBTOOL) --mode=compile --tag=CC ++LIBTOOL_LINK = $(LIBTOOL) --mode=link --tag=CC ++LIBTOOL_INSTALL = $(LIBTOOL) --mode=install --tag=CC ++SQLITE_LIBDIR = -L@SQLITE_LIBDIR@ ++SQLITE3_LIBDIR = -L@SQLITE_LIBDIR@ + SQLITE_INC = @SQLITE_INC@ + SQLITE_LIB = @SQLITE_LIB@ + SQLITE3_INC = @SQLITE3_INC@ +@@ -119,16 +124,16 @@ + SQLite.FunctionContext SQLite.Stmt SQLite.Blob + + sqlite_jni.lo: native/sqlite_jni.h native/sqlite_jni.c +- $(LIBTOOL) $(CC) -c $(CFLAGS) native/sqlite_jni.c ++ $(LIBTOOL_CC) $(CC) -c $(CFLAGS) native/sqlite_jni.c + + libsqlite_jni.la: sqlite_jni.lo +- $(LIBTOOL) $(CC) -o libsqlite_jni.la sqlite_jni.lo \ ++ $(LIBTOOL_LINK) $(CC) -o libsqlite_jni.la sqlite_jni.lo \ + -rpath $(NATIVE_LIB_DIR) $(LIBS) + + native/mkconst: native/mkconst.c +- $(LIBTOOL) $(CC) $(SQLITE_INC) $(SQLITE3_INC) \ ++ $(LIBTOOL_LINK) $(CC) $(SQLITE_INC) $(SQLITE3_INC) \ + -DHAVE_SQLITE2=@HAVE_SQLITE2@ -DHAVE_SQLITE3=@HAVE_SQLITE3@ \ +- -o native/mkconst native/mkconst.c $(LIBS) ++ -o native/mkconst native/mkconst.c $(LIBS) $(SQLITE_LIBDIR) $(SQLITE3_LIBDIR) + + Makefile: Makefile.in configure config.status + ./config.status +@@ -173,4 +178,4 @@ + $(INSTALL) -d -m 755 $(DESTDIR)$(JAR_DIR) + $(INSTALL) -m 644 sqlite.jar $(DESTDIR)$(JAR_DIR) + $(INSTALL) -d -m 755 $(DESTDIR)$(NATIVE_LIB_DIR) +- $(LIBTOOL) $(INSTALL) libsqlite_jni.la $(DESTDIR)$(NATIVE_LIB_DIR) ++ $(LIBTOOL_INSTALL) $(INSTALL) libsqlite_jni.la $(DESTDIR)$(NATIVE_LIB_DIR) +Index: javasqlite-20080130/SQLite/JDBCDriver.java +=================================================================== +--- javasqlite-20080130.orig/SQLite/JDBCDriver.java 2008-07-13 17:28:52.000000000 +0200 ++++ javasqlite-20080130/SQLite/JDBCDriver.java 2008-07-13 17:53:14.000000000 +0200 +@@ -13,7 +13,7 @@ + + static { + try { +- Class connClass = null; ++ Class connClass = null; + Class args[] = new Class[4]; + args[0] = Class.forName("java.lang.String"); + args[1] = args[0]; +@@ -49,7 +49,7 @@ + } + } + } +- connClass = Class.forName(cvers); ++ connClass = (Class) Class.forName(cvers); + makeConn = connClass.getConstructor(args); + java.sql.DriverManager.registerDriver(new JDBCDriver()); + } catch (java.lang.Exception e) { diff --git a/packages/javasqlite/javasqlite-mkconst-native_20080130.bb b/packages/javasqlite/javasqlite-mkconst-native_20080130.bb new file mode 100644 index 0000000000..e6f9a8e1ae --- /dev/null +++ b/packages/javasqlite/javasqlite-mkconst-native_20080130.bb @@ -0,0 +1,52 @@ +DESCRIPTION = "mkcons program needed for javasqlite build" +HOMEPAGE = "http://www.ch-werner.de/javasqlite" +LICENSE = "BSD" + +DEPENDS = "sqlite-native sqlite3-native" + +SRC_URI = "\ + http://www.ch-werner.de/javasqlite/javasqlite-${PV}.tar.gz \ + file://build-fix.patch;patch=1" + +S = "${WORKDIR}/javasqlite-${PV}" + +inherit autotools native + +# Program names are there to fool configure checks +# because we actually do not need these. +EXTRA_OECONF = " \ + --with-sqlite-incdir=${STAGING_INCDIR} \ + --with-sqlite-libdir=${STAGING_LIBDIR} \ + --with-sqlite3-incdir=${STAGING_INCDIR} \ + --with-sqlite3-libdir=${STAGING_LIBDIR} \ + --with-jardir=${datadir_java} \ + --with-native-libdir=${libdir_jni} \ + --with-java='echo version 1.5' \ + --with-javac=true \ + --with-jar=true \ + --with-javah=true \ + --with-javadoc=true \ + " + +do_configurepre() { + sed -i -e "s|wrong-libtool|${BUILD_SYS}-libtool|" Makefile.in +} + +addtask configurepre after do_patch before do_configure + + +do_compile() { + oe_runmake native/mkconst +} + +do_install() { + : +} + +do_stage() { + install -d ${STAGING_BINDIR} + install -m 0755 native/.libs/mkconst ${STAGING_BINDIR}/javasqlite-mkconst-${PV} +} + +PACKAGES = "" + diff --git a/packages/javasqlite/javasqlite_20080130.bb b/packages/javasqlite/javasqlite_20080130.bb new file mode 100644 index 0000000000..a8ed2d5017 --- /dev/null +++ b/packages/javasqlite/javasqlite_20080130.bb @@ -0,0 +1,46 @@ +DESCRIPTION = "JDBC driver for sqlite and sqlite3" +HOMEPAGE = "http://www.ch-werner.de/javasqlite" +LICENSE = "BSD" + +SRC_URI = "\ + http://www.ch-werner.de/javasqlite/javasqlite-${PV}.tar.gz \ + file://build-fix.patch;patch=1" + +DEPENDS = "virtual/javac-native fastjar-native classpath-native javasqlite-mkconst-native classpath sqlite sqlite3" +RDEPENDS_${PN} = "${PN}-jni" + +inherit autotools java + +# jamvm-native unfortunately contains non-generificed java/lang/reflect classes +# which are accessed in this package. Work around this by setting the bootclasspath +# explicitly. +export JAVACFLAGS="-bootclasspath ${STAGING_DATADIR}/classpath/glibj.zip -source 5.0" + +EXTRA_OECONF = " \ + --with-jni-incdir=${STAGING_INCDIR}/classpath \ + --with-jardir=${datadir_java} \ + --with-target-native-libdir=${libdir_jni} \ + --with-sqlite-incdir=${STAGING_INCDIR} \ + --with-sqlite-libdir=${STAGING_LIBDIR} \ + --with-sqlite3-incdir=${STAGING_INCDIR} \ + --with-sqlite3-libdir=${STAGING_LIBDIR} \ + --with-java=${STAGING_BINDIR_NATIVE}/java \ + --with-javac=${STAGING_BINDIR_NATIVE}/javac \ + --with-jar=${STAGING_BINDIR_NATIVE}/gjar \ + --with-javah=${STAGING_BINDIR_NATIVE}/gjavah \ + --with-javadoc=true \ + " + +do_configurepre() { + sed -i -e "s|wrong-libtool|${TARGET_SYS}-libtool|" Makefile.in +} + +addtask configurepre after do_patch before do_configure + +do_compile_prepend() { + # Injects a cross-compiled mkconst binary into the build + cp ${STAGING_BINDIR_NATIVE}/javasqlite-mkconst-${PV} native/mkconst + touch native/mkconst +} + +PACKAGES = "${PN}-jni" -- cgit v1.2.3 From e076cde4161b37f322b3fff4e054b5c59d420ff1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Sun, 13 Jul 2008 17:31:05 +0000 Subject: abiword, abiword-plugins: update to 2.6.4 --- packages/abiword/abiword-plugins_2.6.4.bb | 45 +++++++++++++++++++++++++++++++ packages/abiword/abiword_2.6.4.bb | 10 +++++++ 2 files changed, 55 insertions(+) create mode 100644 packages/abiword/abiword-plugins_2.6.4.bb create mode 100644 packages/abiword/abiword_2.6.4.bb diff --git a/packages/abiword/abiword-plugins_2.6.4.bb b/packages/abiword/abiword-plugins_2.6.4.bb new file mode 100644 index 0000000000..94baeaf58e --- /dev/null +++ b/packages/abiword/abiword-plugins_2.6.4.bb @@ -0,0 +1,45 @@ +DESCRIPTION = "AbiWord is a free word processing program similar to Microsoft(r) Word" +HOMEPAGE = "http://www.abiword.org" +SECTION = "x11/office" +LICENSE = "GPLv2" +DEPENDS = "asio boost loudmouth libwpd librsvg goffice poppler libglade" +RDEPENDS = "abiword" + +SRC_URI = "http://www.abiword.org/downloads/abiword/${PV}/source/abiword-plugins-${PV}.tar.gz \ + http://www.abiword.org/downloads/abiword/${PV}/source/abiword-${PV}.tar.gz \ +# file://abiword-cxx-for-ld-fix.patch;patch=1 \ + " + +DEFAULT_PREFERENCE = "2" + +inherit autotools + +PARALLEL_MAKE="" + +#export LDFLAGS += " -lstdc++ " + +EXTRA_OECONF = " --enable-shared=yes \ + --enable-static \ + --without-libwmf \ + --without-inter7eps \ + --with-abiword=${WORKDIR}/abiword-${PV} \ + --with-boost=${STAGING_DIR_HOST} \ + --with-boost-thread=boost_thread-mt \ + " + +PACKAGES_DYNAMIC = "abiword-plugin-*" + +python populate_packages_prepend () { + abiword_libdir = bb.data.expand('${libdir}/abiword-2.6/plugins', d) + do_split_packages(d, abiword_libdir, '^libAbi(.*)\.so$', 'abiword-plugin-%s', 'Abiword plugin for %s', extra_depends='') + do_split_packages(d, abiword_libdir, '^libAbi(.*)\.la$', 'abiword-plugin-%s-dev', 'Abiword plugin for %s', extra_depends='') +} + + +PACKAGES =+ "abiword-plugin-collab-glade" + +FILES_abiword-plugin-collab-glade += "${datadir}" +RDEPENDS_abiword-plugin-collab-glade = "abiword-plugin-collab" + +FILES_${PN}-dbg += "${libdir}/abiword-2.6/plugins/.debug" + diff --git a/packages/abiword/abiword_2.6.4.bb b/packages/abiword/abiword_2.6.4.bb new file mode 100644 index 0000000000..fe6399226f --- /dev/null +++ b/packages/abiword/abiword_2.6.4.bb @@ -0,0 +1,10 @@ +require abiword-2.5.inc + +PR = "r1" + +RCONFLICTS = "abiword-embedded" + +FILES_${PN} += "${datadir}/mime-info" +FILES_abiword-strings += "${datadir}/abiword-${SHRT_VER}/strings" +FILES_abiword-systemprofiles += "${datadir}/abiword-${SHRT_VER}/system.profile*" + -- cgit v1.2.3 From 005608674167882469152552492754d34ec4d5c4 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 22:35:53 +0000 Subject: miglayout 3.0.3: New recipe. --- packages/miglayout/.mtn2git_empty | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/miglayout/.mtn2git_empty diff --git a/packages/miglayout/.mtn2git_empty b/packages/miglayout/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 -- cgit v1.2.3 From e2dea6bc51c47e8d3e7e8e40b76b12a9d03e4309 Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Sun, 13 Jul 2008 22:39:35 +0000 Subject: MAINTAINERS: Updated my recipe maintenance list. --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index e21e61945f..498a7780f4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -272,6 +272,7 @@ Interests: free software, java, games, packages/maemo4/* Distros: chinook-compat Recipes: jikes-native, jikes-initial, ecj-initial, ecj-bootstrap-native Recipes: classpath*, cacao*, jamvm* +Recipes: miglayout, javasqlite*, sqlitejbdc Recipes: swt-gtk, rxtx, dbus-java, libmatthew, kxml2, xmlpull Recipes: woodstox2 Recipes: midpath*, logic-analyze -- cgit v1.2.3 From 8d5f83863769892c6bb9e9cadd570ab596e8dd07 Mon Sep 17 00:00:00 2001 From: Mike Westerhof Date: Mon, 14 Jul 2008 03:10:14 +0000 Subject: bind - upgrade to 9.3.5-P1 in response to security vulnerabilities. --- packages/bind/bind-9.3.5-P1/.mtn2git_empty | 0 packages/bind/bind-9.3.5-P1/conf.patch | 301 +++++++++++++++++++++++++ packages/bind/bind-9.3.5-P1/configure.in.patch | 14 ++ packages/bind/bind-9.3.5-P1/so_bsdcompat.patch | 32 +++ packages/bind/bind_9.3.5-P1.bb | 38 ++++ 5 files changed, 385 insertions(+) create mode 100644 packages/bind/bind-9.3.5-P1/.mtn2git_empty create mode 100644 packages/bind/bind-9.3.5-P1/conf.patch create mode 100644 packages/bind/bind-9.3.5-P1/configure.in.patch create mode 100644 packages/bind/bind-9.3.5-P1/so_bsdcompat.patch create mode 100644 packages/bind/bind_9.3.5-P1.bb diff --git a/packages/bind/bind-9.3.5-P1/.mtn2git_empty b/packages/bind/bind-9.3.5-P1/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/bind/bind-9.3.5-P1/conf.patch b/packages/bind/bind-9.3.5-P1/conf.patch new file mode 100644 index 0000000000..202c5319e1 --- /dev/null +++ b/packages/bind/bind-9.3.5-P1/conf.patch @@ -0,0 +1,301 @@ +diff -urN bind-9.3.1.orig/conf/db.0 bind-9.3.1/conf/db.0 +--- bind-9.3.1.orig/conf/db.0 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/db.0 2005-07-10 22:14:00.000000000 +0200 +@@ -0,0 +1,12 @@ ++; ++; BIND reverse data file for broadcast zone ++; ++$TTL 604800 ++@ IN SOA localhost. root.localhost. ( ++ 1 ; Serial ++ 604800 ; Refresh ++ 86400 ; Retry ++ 2419200 ; Expire ++ 604800 ) ; Negative Cache TTL ++; ++@ IN NS localhost. +diff -urN bind-9.3.1.orig/conf/db.127 bind-9.3.1/conf/db.127 +--- bind-9.3.1.orig/conf/db.127 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/db.127 2005-07-10 22:14:00.000000000 +0200 +@@ -0,0 +1,13 @@ ++; ++; BIND reverse data file for local loopback interface ++; ++$TTL 604800 ++@ IN SOA localhost. root.localhost. ( ++ 1 ; Serial ++ 604800 ; Refresh ++ 86400 ; Retry ++ 2419200 ; Expire ++ 604800 ) ; Negative Cache TTL ++; ++@ IN NS localhost. ++1.0.0 IN PTR localhost. +diff -urN bind-9.3.1.orig/conf/db.empty bind-9.3.1/conf/db.empty +--- bind-9.3.1.orig/conf/db.empty 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/db.empty 2005-07-10 22:14:00.000000000 +0200 +@@ -0,0 +1,14 @@ ++; BIND reverse data file for empty rfc1918 zone ++; ++; DO NOT EDIT THIS FILE - it is used for multiple zones. ++; Instead, copy it, edit named.conf, and use that copy. ++; ++$TTL 86400 ++@ IN SOA localhost. root.localhost. ( ++ 1 ; Serial ++ 604800 ; Refresh ++ 86400 ; Retry ++ 2419200 ; Expire ++ 86400 ) ; Negative Cache TTL ++; ++@ IN NS localhost. +diff -urN bind-9.3.1.orig/conf/db.local bind-9.3.1/conf/db.local +--- bind-9.3.1.orig/conf/db.local 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/db.local 2005-07-10 22:14:00.000000000 +0200 +@@ -0,0 +1,13 @@ ++; ++; BIND data file for local loopback interface ++; ++$TTL 604800 ++@ IN SOA localhost. root.localhost. ( ++ 1 ; Serial ++ 604800 ; Refresh ++ 86400 ; Retry ++ 2419200 ; Expire ++ 604800 ) ; Negative Cache TTL ++; ++@ IN NS localhost. ++@ IN A 127.0.0.1 +diff -urN bind-9.3.1.orig/conf/db.root bind-9.3.1/conf/db.root +--- bind-9.3.1.orig/conf/db.root 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/db.root 2005-07-10 22:14:00.000000000 +0200 +@@ -0,0 +1,45 @@ ++ ++; <<>> DiG 9.2.3 <<>> ns . @a.root-servers.net. ++;; global options: printcmd ++;; Got answer: ++;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18944 ++;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ++ ++;; QUESTION SECTION: ++;. IN NS ++ ++;; ANSWER SECTION: ++. 518400 IN NS A.ROOT-SERVERS.NET. ++. 518400 IN NS B.ROOT-SERVERS.NET. ++. 518400 IN NS C.ROOT-SERVERS.NET. ++. 518400 IN NS D.ROOT-SERVERS.NET. ++. 518400 IN NS E.ROOT-SERVERS.NET. ++. 518400 IN NS F.ROOT-SERVERS.NET. ++. 518400 IN NS G.ROOT-SERVERS.NET. ++. 518400 IN NS H.ROOT-SERVERS.NET. ++. 518400 IN NS I.ROOT-SERVERS.NET. ++. 518400 IN NS J.ROOT-SERVERS.NET. ++. 518400 IN NS K.ROOT-SERVERS.NET. ++. 518400 IN NS L.ROOT-SERVERS.NET. ++. 518400 IN NS M.ROOT-SERVERS.NET. ++ ++;; ADDITIONAL SECTION: ++A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4 ++B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201 ++C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12 ++D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90 ++E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10 ++F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241 ++G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4 ++H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53 ++I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17 ++J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30 ++K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129 ++L.ROOT-SERVERS.NET. 3600000 IN A 198.32.64.12 ++M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33 ++ ++;; Query time: 81 msec ++;; SERVER: 198.41.0.4#53(a.root-servers.net.) ++;; WHEN: Sun Feb 1 11:27:14 2004 ++;; MSG SIZE rcvd: 436 ++ +diff -urN bind-9.3.1.orig/conf/named.conf bind-9.3.1/conf/named.conf +--- bind-9.3.1.orig/conf/named.conf 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/named.conf 2005-07-10 22:33:46.000000000 +0200 +@@ -0,0 +1,49 @@ ++// This is the primary configuration file for the BIND DNS server named. ++// ++// If you are just adding zones, please do that in /etc/bind/named.conf.local ++ ++include "/etc/bind/named.conf.options"; ++ ++// prime the server with knowledge of the root servers ++zone "." { ++ type hint; ++ file "/etc/bind/db.root"; ++}; ++ ++// be authoritative for the localhost forward and reverse zones, and for ++// broadcast zones as per RFC 1912 ++ ++zone "localhost" { ++ type master; ++ file "/etc/bind/db.local"; ++}; ++ ++zone "127.in-addr.arpa" { ++ type master; ++ file "/etc/bind/db.127"; ++}; ++ ++zone "0.in-addr.arpa" { ++ type master; ++ file "/etc/bind/db.0"; ++}; ++ ++zone "255.in-addr.arpa" { ++ type master; ++ file "/etc/bind/db.255"; ++}; ++ ++// zone "com" { type delegation-only; }; ++// zone "net" { type delegation-only; }; ++ ++// From the release notes: ++// Because many of our users are uncomfortable receiving undelegated answers ++// from root or top level domains, other than a few for whom that behaviour ++// has been trusted and expected for quite some length of time, we have now ++// introduced the "root-delegations-only" feature which applies delegation-only ++// logic to all top level domains, and to the root domain. An exception list ++// should be specified, including "MUSEUM" and "DE", and any other top level ++// domains from whom undelegated responses are expected and trusted. ++// root-delegation-only exclude { "DE"; "MUSEUM"; }; ++ ++include "/etc/bind/named.conf.local"; +diff -urN bind-9.3.1.orig/conf/named.conf.local bind-9.3.1/conf/named.conf.local +--- bind-9.3.1.orig/conf/named.conf.local 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/named.conf.local 2005-07-10 22:14:06.000000000 +0200 +@@ -0,0 +1,8 @@ ++// ++// Do any local configuration here ++// ++ ++// Consider adding the 1918 zones here, if they are not used in your ++// organization ++//include "/etc/bind/zones.rfc1918"; ++ +diff -urN bind-9.3.1.orig/conf/named.conf.options bind-9.3.1/conf/named.conf.options +--- bind-9.3.1.orig/conf/named.conf.options 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/named.conf.options 2005-07-10 22:14:06.000000000 +0200 +@@ -0,0 +1,24 @@ ++options { ++ directory "/var/cache/bind"; ++ ++ // If there is a firewall between you and nameservers you want ++ // to talk to, you might need to uncomment the query-source ++ // directive below. Previous versions of BIND always asked ++ // questions using port 53, but BIND 8.1 and later use an unprivileged ++ // port by default. ++ ++ // query-source address * port 53; ++ ++ // If your ISP provided one or more IP addresses for stable ++ // nameservers, you probably want to use them as forwarders. ++ // Uncomment the following block, and insert the addresses replacing ++ // the all-0's placeholder. ++ ++ // forwarders { ++ // 0.0.0.0; ++ // }; ++ ++ auth-nxdomain no; # conform to RFC1035 ++ ++}; ++ +diff -urN bind-9.3.1.orig/conf/zones.rfc1918 bind-9.3.1/conf/zones.rfc1918 +--- bind-9.3.1.orig/conf/zones.rfc1918 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/conf/zones.rfc1918 2005-07-10 22:14:10.000000000 +0200 +@@ -0,0 +1,20 @@ ++zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++ ++zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; ++ ++zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; +diff -urN bind-9.3.1.orig/init.d bind-9.3.1/init.d +--- bind-9.3.1.orig/init.d 1970-01-01 01:00:00.000000000 +0100 ++++ bind-9.3.1/init.d 2005-07-10 23:09:58.000000000 +0200 +@@ -0,0 +1,63 @@ ++#!/bin/sh ++ ++PATH=/sbin:/bin:/usr/sbin:/usr/bin ++ ++# for a chrooted server: "-u bind -t /var/lib/named" ++# Don't modify this line, change or create /etc/default/bind9. ++OPTIONS="" ++ ++test -f /etc/default/bind9 && . /etc/default/bind9 ++ ++test -x /usr/sbin/rndc || exit 0 ++ ++case "$1" in ++ start) ++ echo -n "Starting domain name service: named" ++ ++ modprobe capability >/dev/null 2>&1 || true ++ ++ # dirs under /var/run can go away on reboots. ++ mkdir -p /var/run/bind/run ++ mkdir -p /var/cache/bind ++ chmod 775 /var/run/bind/run ++ chown root:bind /var/run/bind/run >/dev/null 2>&1 || true ++ ++ if [ ! -x /usr/sbin/named ]; then ++ echo "named binary missing - not starting" ++ exit 1 ++ fi ++ if start-stop-daemon --start --quiet --exec /usr/sbin/named \ ++ --pidfile /var/run/bind/run/named.pid -- $OPTIONS; then ++ if [ -x /sbin/resolvconf ] ; then ++ echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo ++ fi ++ fi ++ echo "." ++ ;; ++ ++ stop) ++ echo -n "Stopping domain name service: named" ++ if [ -x /sbin/resolvconf ]; then ++ /sbin/resolvconf -d lo ++ fi ++ /usr/sbin/rndc stop ++ echo "." ++ ;; ++ ++ reload) ++ /usr/sbin/rndc reload ++ ;; ++ ++ restart|force-reload) ++ $0 stop ++ sleep 2 ++ $0 start ++ ;; ++ ++ *) ++ echo "Usage: /etc/init.d/bind {start|stop|reload|restart|force-reload}" >&2 ++ exit 1 ++ ;; ++esac ++ ++exit 0 diff --git a/packages/bind/bind-9.3.5-P1/configure.in.patch b/packages/bind/bind-9.3.5-P1/configure.in.patch new file mode 100644 index 0000000000..78ae9271c6 --- /dev/null +++ b/packages/bind/bind-9.3.5-P1/configure.in.patch @@ -0,0 +1,14 @@ +--- bind-9.3.1/configure.in.orig 2005-07-10 21:21:18.000000000 +0200 ++++ bind-9.3.1/configure.in 2005-07-10 21:24:31.000000000 +0200 +@@ -1414,7 +1414,10 @@ + [AC_MSG_RESULT(no) + ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS inet_ntop.$O" + ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS inet_ntop.c" +- ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"]) ++ ISC_PLATFORM_NEEDNTOP="#define ISC_PLATFORM_NEEDNTOP 1"], ++ ++ [AC_MSG_RESULT(assuming target platform has working inet_ntop) ++ ISC_PLATFORM_NEEDNTOP="#undef ISC_PLATFORM_NEEDNTOP"]) + + + # On NetBSD 1.4.2 and maybe others, inet_pton() incorrectly accepts diff --git a/packages/bind/bind-9.3.5-P1/so_bsdcompat.patch b/packages/bind/bind-9.3.5-P1/so_bsdcompat.patch new file mode 100644 index 0000000000..03e34bf6a5 --- /dev/null +++ b/packages/bind/bind-9.3.5-P1/so_bsdcompat.patch @@ -0,0 +1,32 @@ +--- bind-9.3.5-P1/lib/isc/unix/socket.c.orig 2008-07-13 21:53:24.000000000 -0500 ++++ bind-9.3.5-P1/lib/isc/unix/socket.c 2008-07-13 21:57:06.000000000 -0500 +@@ -1423,7 +1423,7 @@ + { + isc_socket_t *sock = NULL; + isc_result_t ret; +-#if defined(USE_CMSG) || defined(SO_BSDCOMPAT) ++#if defined(USE_CMSG) + int on = 1; + #endif + char strbuf[ISC_STRERRORSIZE]; +@@ -1514,7 +1514,7 @@ + return (ISC_R_UNEXPECTED); + } + +-#ifdef SO_BSDCOMPAT ++/* #ifdef SO_BSDCOMPAT + RUNTIME_CHECK(isc_once_do(&bsdcompat_once, + clear_bsdcompat) == ISC_R_SUCCESS); + if (bsdcompat && setsockopt(sock->fd, SOL_SOCKET, SO_BSDCOMPAT, +@@ -1526,9 +1526,9 @@ + isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, + ISC_MSG_FAILED, "failed"), + strbuf); +- /* Press on... */ ++ + } +-#endif ++#endif */ + + #ifdef SO_NOSIGPIPE + if (setsockopt(sock->fd, SOL_SOCKET, SO_NOSIGPIPE, diff --git a/packages/bind/bind_9.3.5-P1.bb b/packages/bind/bind_9.3.5-P1.bb new file mode 100644 index 0000000000..a1dff5ceaf --- /dev/null +++ b/packages/bind/bind_9.3.5-P1.bb @@ -0,0 +1,38 @@ +DESCRIPTION = "ISC Internet Domain Name Server" +SECTION = "console/network" +HOMEPAGE = "http://www.isc.org/sw/bind/" +LICENSE = "BSD" +PR = "r0" + +DEPENDS = "openssl" + +SRC_URI = "ftp://ftp.isc.org/isc/bind9/9.3.5-P1/bind-9.3.5-P1.tar.gz \ + file://conf.patch;patch=1 \ + file://configure.in.patch;patch=1 \ + file://so_bsdcompat.patch;patch=1 \ + " + +EXTRA_OECONF = " --enable-ipv6=no --with-randomdev=/dev/random --disable-threads --sysconfdir=/etc/bind --localstatedir=/var --prefix=/usr" +inherit autotools update-rc.d + +INITSCRIPT_NAME = "bind" +INITSCRIPT_PARAMS = "defaults" + +do_install_append() { + rm "${D}/usr/bin/nslookup" + install -d "${D}/etc/bind" + install -d "${D}/etc/init.d" + install -m 644 ${S}/conf/* "${D}/etc/bind" + install -m 755 "${S}/init.d" "${D}/etc/init.d/bind" +} + +CONFFILES_${PN} = " \ + ${sysconfdir}/bind/named.conf \ + ${sysconfdir}/bind/named.conf.local \ + ${sysconfdir}/bind/named.conf.options \ + ${sysconfdir}/bind/db.0 \ + ${sysconfdir}/bind/db.127 \ + ${sysconfdir}/bind/db.empty \ + ${sysconfdir}/bind/db.local \ + ${sysconfdir}/bind/db.root \ + " -- cgit v1.2.3 From 3b2a3f2b9068f9ee61070efe2ea0ab660cf5a1f3 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 06:57:53 +0000 Subject: ffmpeg git: bump SRCREV --- packages/ffmpeg/ffmpeg_git.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb index 0fb739a17d..548d5a5139 100644 --- a/packages/ffmpeg/ffmpeg_git.bb +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -3,7 +3,7 @@ require ffmpeg.inc DEPENDS += "libgsm" PV = "0.4.9+${PR}+gitr${SRCREV}" -PR = "r13" +PR = "r14" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_armv7a = "1" @@ -11,8 +11,8 @@ DEFAULT_PREFERENCE_armv7a = "1" FFBRANCH_arm = "arm-neon" FFBRANCH ?= "master" -SRCREV = "1e8300e71f79963eacdad6b180d9a12c4f56318d" -SRCREV_arm = "d0e4a018bb80814e4aee450ddf9b4f6d3cb97064" +SRCREV = "dee1c2d60a67dc6411ed3fcbe26db5113cb1a371" +SRCREV_arm = "3ea1180b31078c276783f68e153ec54cfe567977" SRC_URI = "git://git.mansr.com/ffmpeg.mru;protocol=git;branch=${FFBRANCH} \ " -- cgit v1.2.3 From 1b0cbb809e09eddff243e874edff54a4b0c25626 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 08:33:53 +0000 Subject: qmake2: add sdk version --- packages/qmake/files/0001-fix-mkspecs.patch | 146 +++++++++++++++++++++ .../qmake/files/0008-backport-qt-lib-infix.patch | 33 +++++ packages/qmake/files/qt-config.patch | 27 ++++ packages/qmake/files/use-lflags-last.patch | 22 ++++ packages/qmake/qmake2-native.inc | 1 - .../qmake/qmake2-native/0001-fix-mkspecs.patch | 146 --------------------- .../qmake2-native/0008-backport-qt-lib-infix.patch | 33 ----- packages/qmake/qmake2-native/qt-config.patch | 27 ---- packages/qmake/qmake2-native/use-lflags-last.patch | 22 ---- packages/qmake/qmake2-native_2.10a.bb | 1 + packages/qmake/qmake2-sdk/.mtn2git_empty | 0 packages/qmake/qmake2-sdk/linux-oe-qmake.conf | 1 + packages/qmake/qmake2-sdk_2.10a.bb | 4 + 13 files changed, 234 insertions(+), 229 deletions(-) create mode 100644 packages/qmake/files/0001-fix-mkspecs.patch create mode 100644 packages/qmake/files/0008-backport-qt-lib-infix.patch create mode 100644 packages/qmake/files/qt-config.patch create mode 100644 packages/qmake/files/use-lflags-last.patch delete mode 100644 packages/qmake/qmake2-native/0001-fix-mkspecs.patch delete mode 100644 packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch delete mode 100644 packages/qmake/qmake2-native/qt-config.patch delete mode 100644 packages/qmake/qmake2-native/use-lflags-last.patch create mode 100644 packages/qmake/qmake2-sdk/.mtn2git_empty create mode 100644 packages/qmake/qmake2-sdk/linux-oe-qmake.conf create mode 100644 packages/qmake/qmake2-sdk_2.10a.bb diff --git a/packages/qmake/files/0001-fix-mkspecs.patch b/packages/qmake/files/0001-fix-mkspecs.patch new file mode 100644 index 0000000000..e0ebe512c8 --- /dev/null +++ b/packages/qmake/files/0001-fix-mkspecs.patch @@ -0,0 +1,146 @@ +From aa0377910cfd8d0fce6bdc9355994a4e267b1696 Mon Sep 17 00:00:00 2001 +From: Michael Krelin +Date: Sat, 2 Jun 2007 16:39:58 +0200 +Subject: [PATCH] fix mkspecs + +--- + mkspecs/common/g++.conf | 18 +++++++++--------- + mkspecs/common/linux.conf | 26 +++++++++++++------------- + 2 files changed, 22 insertions(+), 22 deletions(-) + +Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/g++.conf 2007-12-04 18:07:53.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf 2007-12-26 19:47:02.000000000 +0100 +@@ -2,12 +2,12 @@ + # qmake configuration for common gcc + # + +-QMAKE_CC = gcc +-QMAKE_CFLAGS += -pipe ++QMAKE_CC = $(OE_QMAKE_CC) ++QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS) + QMAKE_CFLAGS_DEPS += -M + QMAKE_CFLAGS_WARN_ON += -Wall -W + QMAKE_CFLAGS_WARN_OFF += -w +-QMAKE_CFLAGS_RELEASE += -O2 ++QMAKE_CFLAGS_RELEASE += + QMAKE_CFLAGS_DEBUG += -g + QMAKE_CFLAGS_SHLIB += -fPIC + QMAKE_CFLAGS_STATIC_LIB += -fPIC +@@ -16,8 +16,8 @@ + QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} + QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE} + +-QMAKE_CXX = g++ +-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS ++QMAKE_CXX = $(OE_QMAKE_CXX) ++QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS) + QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS + QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON + QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +@@ -30,9 +30,9 @@ + QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} + QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE + +-QMAKE_LINK = g++ +-QMAKE_LINK_SHLIB = g++ +-QMAKE_LFLAGS += ++QMAKE_LINK = $(OE_QMAKE_LINK) ++QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK) ++QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS) + QMAKE_LFLAGS_RELEASE += + QMAKE_LFLAGS_DEBUG += + QMAKE_LFLAGS_APP += +@@ -40,7 +40,7 @@ + QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB + QMAKE_LFLAGS_SONAME += -Wl,-soname, + QMAKE_LFLAGS_THREAD += +-QMAKE_RPATH = -Wl,-rpath, ++QMAKE_RPATH = -Wl,-rpath-link, + + QMAKE_PCH_OUTPUT_EXT = .gch + +Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/linux.conf 2007-12-04 18:07:53.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf 2007-12-26 19:47:02.000000000 +0100 +@@ -7,26 +7,26 @@ + + QMAKE_INCDIR = + QMAKE_LIBDIR = +-QMAKE_INCDIR_X11 = /usr/X11R6/include +-QMAKE_LIBDIR_X11 = /usr/X11R6/lib +-QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] +-QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] +-QMAKE_INCDIR_OPENGL = /usr/X11R6/include +-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib ++QMAKE_INCDIR_X11 = ++QMAKE_LIBDIR_X11 = ++QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT) ++QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT) ++QMAKE_INCDIR_OPENGL = ++QMAKE_LIBDIR_OPENGL = + + QMAKE_LIBS = + QMAKE_LIBS_DYNLOAD = -ldl +-QMAKE_LIBS_X11 = -lXext -lX11 -lm +-QMAKE_LIBS_X11SM = -lSM -lICE ++QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11) ++QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM) + QMAKE_LIBS_NIS = -lnsl + QMAKE_LIBS_OPENGL = -lGLU -lGL + QMAKE_LIBS_OPENGL_QT = -lGL + QMAKE_LIBS_THREAD = -lpthread + +-QMAKE_MOC = $$[QT_INSTALL_BINS]/moc +-QMAKE_UIC = $$[QT_INSTALL_BINS]/uic ++QMAKE_MOC = $(OE_QMAKE_MOC) ++QMAKE_UIC = $(OE_QMAKE_UIC) + +-QMAKE_AR = ar cqs ++QMAKE_AR = $(OE_QMAKE_AR) cqs + QMAKE_RANLIB = + + QMAKE_TAR = tar -cf +@@ -38,11 +38,11 @@ + QMAKE_MOVE = mv -f + QMAKE_DEL_FILE = rm -f + QMAKE_DEL_DIR = rmdir +-QMAKE_STRIP = strip ++QMAKE_STRIP = $(OE_QMAKE_STRIP) + QMAKE_STRIPFLAGS_LIB += --strip-unneeded + QMAKE_CHK_DIR_EXISTS = test -d + QMAKE_MKDIR = mkdir -p + QMAKE_INSTALL_FILE = install -m 644 -p + QMAKE_INSTALL_PROGRAM = install -m 755 -p + +-include(unix.conf) +\ No newline at end of file ++include(unix.conf) +Index: qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/linux-g++/qmake.conf 2007-12-04 18:07:53.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf 2007-12-26 19:47:02.000000000 +0100 +@@ -5,7 +5,7 @@ + MAKEFILE_GENERATOR = UNIX + TEMPLATE = app + CONFIG += qt warn_on release incremental link_prl +-QT += core gui ++QT += core gui $$(OE_QMAKE_EXTRA_MODULES) + QMAKE_INCREMENTAL_STYLE = sublib + + include(../common/g++.conf) +Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/unix.conf +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/unix.conf 2007-12-26 19:48:20.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/unix.conf 2007-12-26 19:49:50.000000000 +0100 +@@ -10,6 +10,8 @@ + QMAKE_YACC_HEADER = $base.tab.h + QMAKE_YACC_SOURCE = $base.tab.c + ++QMAKE_RCC = $$(OE_QMAKE_RCC) ++ + QMAKE_SEPARATE_DEBUG_INFO = (test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\" ; targ=`basename $(TARGET)`; objcopy --only-keep-debug \"\$\$targ\" \"\$\$targ.debug\" && objcopy --strip-debug \"\$\$targ\" && objcopy --add-gnu-debuglink=\"\$\$targ.debug\" \"\$\$targ\" && chmod -x \"\$\$targ.debug\" ) ; + + QMAKE_INSTALL_SEPARATE_DEBUG_INFO = test -z "$(DESTDIR)" || cd \"$(DESTDIR)\" ; $(INSTALL_FILE) `basename $(TARGET)`.debug $(INSTALL_ROOT)/\$\$target_path/ diff --git a/packages/qmake/files/0008-backport-qt-lib-infix.patch b/packages/qmake/files/0008-backport-qt-lib-infix.patch new file mode 100644 index 0000000000..f87576a07b --- /dev/null +++ b/packages/qmake/files/0008-backport-qt-lib-infix.patch @@ -0,0 +1,33 @@ +diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf +index 32a7fd5..48d584f 100644 +--- a/mkspecs/features/qt_functions.prf ++++ b/mkspecs/features/qt_functions.prf +@@ -28,7 +28,7 @@ defineTest(qtAddLibrary) { + INCLUDEPATH -= $$FRAMEWORK_INCLUDE + INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH + } +- LINKAGE = -framework $${LIB_NAME} ++ LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX} + } else:!qt_no_framework { #detection + for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) { + exists($${frmwrk_dir}/$${LIB_NAME}.framework) { +@@ -46,15 +46,15 @@ defineTest(qtAddLibrary) { + } + isEmpty(LINKAGE) { + CONFIG(debug, debug|release) { +- win32:LINKAGE = -l$${LIB_NAME}d +- mac:LINKAGE = -l$${LIB_NAME}_debug ++ win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d ++ mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug + } +- isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME} ++ isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX} + } + !isEmpty(QMAKE_LSB) { + QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT + QMAKE_LFLAGS *= -L/opt/lsb/lib +- QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME} ++ QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}${QT_LIBINFIX} + } + LIBS += $$LINKAGE + export(LIBS) diff --git a/packages/qmake/files/qt-config.patch b/packages/qmake/files/qt-config.patch new file mode 100644 index 0000000000..b2d86de2c5 --- /dev/null +++ b/packages/qmake/files/qt-config.patch @@ -0,0 +1,27 @@ +Allow to set a qt.conf from the outside using the environment. This allows +to inject new prefixes and other paths into qmake. This is needed when using +the same qmake binary to build qt/x11 and qt/embedded + +Index: qtopia-core-opensource-src-4.3.3/src/corelib/global/qlibraryinfo.cpp +=================================================================== +--- qtopia-core-opensource-src-4.3.3.orig/src/corelib/global/qlibraryinfo.cpp 2007-12-25 00:55:32.000000000 +0100 ++++ qtopia-core-opensource-src-4.3.3/src/corelib/global/qlibraryinfo.cpp 2007-12-25 01:20:18.000000000 +0100 +@@ -42,6 +42,7 @@ + #include "qpointer.h" + #ifdef QT_BUILD_QMAKE + extern QString qmake_libraryInfoFile(); ++#include + #else + # include "qcoreapplication.h" + #endif +@@ -107,6 +108,10 @@ + #ifdef QT_BUILD_QMAKE + if(!QFile::exists(qtconfig)) + qtconfig = qmake_libraryInfoFile(); ++ if (!QFile::exists(qtconfig)) { ++ QByteArray config = getenv("QT_CONF_PATH"); ++ qtconfig = config; ++ } + #else + if (!QFile::exists(qtconfig) && QCoreApplication::instance()) { + #ifdef Q_OS_MAC diff --git a/packages/qmake/files/use-lflags-last.patch b/packages/qmake/files/use-lflags-last.patch new file mode 100644 index 0000000000..4197dbbf64 --- /dev/null +++ b/packages/qmake/files/use-lflags-last.patch @@ -0,0 +1,22 @@ +Index: qtopia-core-opensource-src-4.3.1/qmake/generators/unix/unixmake2.cpp +=================================================================== +--- qtopia-core-opensource-src-4.3.1.orig/qmake/generators/unix/unixmake2.cpp 2007-10-07 13:45:26.000000000 +0200 ++++ qtopia-core-opensource-src-4.3.1/qmake/generators/unix/unixmake2.cpp 2007-10-07 13:57:09.000000000 +0200 +@@ -416,7 +416,7 @@ + t << "\n\t" << mkdir_p_asstring(destdir) << "\n\t"; + if(!project->isEmpty("QMAKE_PRE_LINK")) + t << var("QMAKE_PRE_LINK") << "\n\t"; +- t << "$(LINK) $(LFLAGS) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(OBJCOMP) $(LIBS)"; ++ t << "$(LINK) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(OBJCOMP) $(LIBS) $(LFLAGS)"; + if(!project->isEmpty("QMAKE_POST_LINK")) + t << "\n\t" << var("QMAKE_POST_LINK"); + t << endl << endl; +@@ -430,7 +430,7 @@ + t << mkdir_p_asstring(destdir) << "\n\t"; + if(!project->isEmpty("QMAKE_PRE_LINK")) + t << var("QMAKE_PRE_LINK") << "\n\t"; +- t << "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)"; ++ t << "$(LINK) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) $(LFLAGS)"; + if(!project->isEmpty("QMAKE_POST_LINK")) + t << "\n\t" << var("QMAKE_POST_LINK"); + t << endl << endl; diff --git a/packages/qmake/qmake2-native.inc b/packages/qmake/qmake2-native.inc index c609fefb81..55b402655e 100644 --- a/packages/qmake/qmake2-native.inc +++ b/packages/qmake/qmake2-native.inc @@ -7,7 +7,6 @@ PR = "r2" QTVER = "qtopia-core-opensource-src-${QTVERSION}" -FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2-native" SRC_URI = "ftp://ftp.trolltech.com/qt/source/${QTVER}.tar.gz \ file://0001-fix-mkspecs.patch;patch=1 \ file://0008-backport-qt-lib-infix.patch;patch=1 \ diff --git a/packages/qmake/qmake2-native/0001-fix-mkspecs.patch b/packages/qmake/qmake2-native/0001-fix-mkspecs.patch deleted file mode 100644 index e0ebe512c8..0000000000 --- a/packages/qmake/qmake2-native/0001-fix-mkspecs.patch +++ /dev/null @@ -1,146 +0,0 @@ -From aa0377910cfd8d0fce6bdc9355994a4e267b1696 Mon Sep 17 00:00:00 2001 -From: Michael Krelin -Date: Sat, 2 Jun 2007 16:39:58 +0200 -Subject: [PATCH] fix mkspecs - ---- - mkspecs/common/g++.conf | 18 +++++++++--------- - mkspecs/common/linux.conf | 26 +++++++++++++------------- - 2 files changed, 22 insertions(+), 22 deletions(-) - -Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf -=================================================================== ---- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/g++.conf 2007-12-04 18:07:53.000000000 +0100 -+++ qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf 2007-12-26 19:47:02.000000000 +0100 -@@ -2,12 +2,12 @@ - # qmake configuration for common gcc - # - --QMAKE_CC = gcc --QMAKE_CFLAGS += -pipe -+QMAKE_CC = $(OE_QMAKE_CC) -+QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS) - QMAKE_CFLAGS_DEPS += -M - QMAKE_CFLAGS_WARN_ON += -Wall -W - QMAKE_CFLAGS_WARN_OFF += -w --QMAKE_CFLAGS_RELEASE += -O2 -+QMAKE_CFLAGS_RELEASE += - QMAKE_CFLAGS_DEBUG += -g - QMAKE_CFLAGS_SHLIB += -fPIC - QMAKE_CFLAGS_STATIC_LIB += -fPIC -@@ -16,8 +16,8 @@ - QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} - QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE} - --QMAKE_CXX = g++ --QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -+QMAKE_CXX = $(OE_QMAKE_CXX) -+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS) - QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS - QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON - QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF -@@ -30,9 +30,9 @@ - QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} - QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE - --QMAKE_LINK = g++ --QMAKE_LINK_SHLIB = g++ --QMAKE_LFLAGS += -+QMAKE_LINK = $(OE_QMAKE_LINK) -+QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK) -+QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS) - QMAKE_LFLAGS_RELEASE += - QMAKE_LFLAGS_DEBUG += - QMAKE_LFLAGS_APP += -@@ -40,7 +40,7 @@ - QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB - QMAKE_LFLAGS_SONAME += -Wl,-soname, - QMAKE_LFLAGS_THREAD += --QMAKE_RPATH = -Wl,-rpath, -+QMAKE_RPATH = -Wl,-rpath-link, - - QMAKE_PCH_OUTPUT_EXT = .gch - -Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf -=================================================================== ---- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/linux.conf 2007-12-04 18:07:53.000000000 +0100 -+++ qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf 2007-12-26 19:47:02.000000000 +0100 -@@ -7,26 +7,26 @@ - - QMAKE_INCDIR = - QMAKE_LIBDIR = --QMAKE_INCDIR_X11 = /usr/X11R6/include --QMAKE_LIBDIR_X11 = /usr/X11R6/lib --QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] --QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] --QMAKE_INCDIR_OPENGL = /usr/X11R6/include --QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib -+QMAKE_INCDIR_X11 = -+QMAKE_LIBDIR_X11 = -+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT) -+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT) -+QMAKE_INCDIR_OPENGL = -+QMAKE_LIBDIR_OPENGL = - - QMAKE_LIBS = - QMAKE_LIBS_DYNLOAD = -ldl --QMAKE_LIBS_X11 = -lXext -lX11 -lm --QMAKE_LIBS_X11SM = -lSM -lICE -+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11) -+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM) - QMAKE_LIBS_NIS = -lnsl - QMAKE_LIBS_OPENGL = -lGLU -lGL - QMAKE_LIBS_OPENGL_QT = -lGL - QMAKE_LIBS_THREAD = -lpthread - --QMAKE_MOC = $$[QT_INSTALL_BINS]/moc --QMAKE_UIC = $$[QT_INSTALL_BINS]/uic -+QMAKE_MOC = $(OE_QMAKE_MOC) -+QMAKE_UIC = $(OE_QMAKE_UIC) - --QMAKE_AR = ar cqs -+QMAKE_AR = $(OE_QMAKE_AR) cqs - QMAKE_RANLIB = - - QMAKE_TAR = tar -cf -@@ -38,11 +38,11 @@ - QMAKE_MOVE = mv -f - QMAKE_DEL_FILE = rm -f - QMAKE_DEL_DIR = rmdir --QMAKE_STRIP = strip -+QMAKE_STRIP = $(OE_QMAKE_STRIP) - QMAKE_STRIPFLAGS_LIB += --strip-unneeded - QMAKE_CHK_DIR_EXISTS = test -d - QMAKE_MKDIR = mkdir -p - QMAKE_INSTALL_FILE = install -m 644 -p - QMAKE_INSTALL_PROGRAM = install -m 755 -p - --include(unix.conf) -\ No newline at end of file -+include(unix.conf) -Index: qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf -=================================================================== ---- qtopia-core-opensource-src-4.3.3.orig/mkspecs/linux-g++/qmake.conf 2007-12-04 18:07:53.000000000 +0100 -+++ qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf 2007-12-26 19:47:02.000000000 +0100 -@@ -5,7 +5,7 @@ - MAKEFILE_GENERATOR = UNIX - TEMPLATE = app - CONFIG += qt warn_on release incremental link_prl --QT += core gui -+QT += core gui $$(OE_QMAKE_EXTRA_MODULES) - QMAKE_INCREMENTAL_STYLE = sublib - - include(../common/g++.conf) -Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/unix.conf -=================================================================== ---- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/unix.conf 2007-12-26 19:48:20.000000000 +0100 -+++ qtopia-core-opensource-src-4.3.3/mkspecs/common/unix.conf 2007-12-26 19:49:50.000000000 +0100 -@@ -10,6 +10,8 @@ - QMAKE_YACC_HEADER = $base.tab.h - QMAKE_YACC_SOURCE = $base.tab.c - -+QMAKE_RCC = $$(OE_QMAKE_RCC) -+ - QMAKE_SEPARATE_DEBUG_INFO = (test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\" ; targ=`basename $(TARGET)`; objcopy --only-keep-debug \"\$\$targ\" \"\$\$targ.debug\" && objcopy --strip-debug \"\$\$targ\" && objcopy --add-gnu-debuglink=\"\$\$targ.debug\" \"\$\$targ\" && chmod -x \"\$\$targ.debug\" ) ; - - QMAKE_INSTALL_SEPARATE_DEBUG_INFO = test -z "$(DESTDIR)" || cd \"$(DESTDIR)\" ; $(INSTALL_FILE) `basename $(TARGET)`.debug $(INSTALL_ROOT)/\$\$target_path/ diff --git a/packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch b/packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch deleted file mode 100644 index f87576a07b..0000000000 --- a/packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf -index 32a7fd5..48d584f 100644 ---- a/mkspecs/features/qt_functions.prf -+++ b/mkspecs/features/qt_functions.prf -@@ -28,7 +28,7 @@ defineTest(qtAddLibrary) { - INCLUDEPATH -= $$FRAMEWORK_INCLUDE - INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH - } -- LINKAGE = -framework $${LIB_NAME} -+ LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX} - } else:!qt_no_framework { #detection - for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) { - exists($${frmwrk_dir}/$${LIB_NAME}.framework) { -@@ -46,15 +46,15 @@ defineTest(qtAddLibrary) { - } - isEmpty(LINKAGE) { - CONFIG(debug, debug|release) { -- win32:LINKAGE = -l$${LIB_NAME}d -- mac:LINKAGE = -l$${LIB_NAME}_debug -+ win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d -+ mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug - } -- isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME} -+ isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX} - } - !isEmpty(QMAKE_LSB) { - QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT - QMAKE_LFLAGS *= -L/opt/lsb/lib -- QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME} -+ QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}${QT_LIBINFIX} - } - LIBS += $$LINKAGE - export(LIBS) diff --git a/packages/qmake/qmake2-native/qt-config.patch b/packages/qmake/qmake2-native/qt-config.patch deleted file mode 100644 index b2d86de2c5..0000000000 --- a/packages/qmake/qmake2-native/qt-config.patch +++ /dev/null @@ -1,27 +0,0 @@ -Allow to set a qt.conf from the outside using the environment. This allows -to inject new prefixes and other paths into qmake. This is needed when using -the same qmake binary to build qt/x11 and qt/embedded - -Index: qtopia-core-opensource-src-4.3.3/src/corelib/global/qlibraryinfo.cpp -=================================================================== ---- qtopia-core-opensource-src-4.3.3.orig/src/corelib/global/qlibraryinfo.cpp 2007-12-25 00:55:32.000000000 +0100 -+++ qtopia-core-opensource-src-4.3.3/src/corelib/global/qlibraryinfo.cpp 2007-12-25 01:20:18.000000000 +0100 -@@ -42,6 +42,7 @@ - #include "qpointer.h" - #ifdef QT_BUILD_QMAKE - extern QString qmake_libraryInfoFile(); -+#include - #else - # include "qcoreapplication.h" - #endif -@@ -107,6 +108,10 @@ - #ifdef QT_BUILD_QMAKE - if(!QFile::exists(qtconfig)) - qtconfig = qmake_libraryInfoFile(); -+ if (!QFile::exists(qtconfig)) { -+ QByteArray config = getenv("QT_CONF_PATH"); -+ qtconfig = config; -+ } - #else - if (!QFile::exists(qtconfig) && QCoreApplication::instance()) { - #ifdef Q_OS_MAC diff --git a/packages/qmake/qmake2-native/use-lflags-last.patch b/packages/qmake/qmake2-native/use-lflags-last.patch deleted file mode 100644 index 4197dbbf64..0000000000 --- a/packages/qmake/qmake2-native/use-lflags-last.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: qtopia-core-opensource-src-4.3.1/qmake/generators/unix/unixmake2.cpp -=================================================================== ---- qtopia-core-opensource-src-4.3.1.orig/qmake/generators/unix/unixmake2.cpp 2007-10-07 13:45:26.000000000 +0200 -+++ qtopia-core-opensource-src-4.3.1/qmake/generators/unix/unixmake2.cpp 2007-10-07 13:57:09.000000000 +0200 -@@ -416,7 +416,7 @@ - t << "\n\t" << mkdir_p_asstring(destdir) << "\n\t"; - if(!project->isEmpty("QMAKE_PRE_LINK")) - t << var("QMAKE_PRE_LINK") << "\n\t"; -- t << "$(LINK) $(LFLAGS) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(OBJCOMP) $(LIBS)"; -+ t << "$(LINK) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(OBJCOMP) $(LIBS) $(LFLAGS)"; - if(!project->isEmpty("QMAKE_POST_LINK")) - t << "\n\t" << var("QMAKE_POST_LINK"); - t << endl << endl; -@@ -430,7 +430,7 @@ - t << mkdir_p_asstring(destdir) << "\n\t"; - if(!project->isEmpty("QMAKE_PRE_LINK")) - t << var("QMAKE_PRE_LINK") << "\n\t"; -- t << "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)"; -+ t << "$(LINK) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) $(LFLAGS)"; - if(!project->isEmpty("QMAKE_POST_LINK")) - t << "\n\t" << var("QMAKE_POST_LINK"); - t << endl << endl; diff --git a/packages/qmake/qmake2-native_2.10a.bb b/packages/qmake/qmake2-native_2.10a.bb index 89b2ae5a82..07e97c4413 100644 --- a/packages/qmake/qmake2-native_2.10a.bb +++ b/packages/qmake/qmake2-native_2.10a.bb @@ -1,2 +1,3 @@ QTVERSION="4.3.3" +FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2-native" require ${PN}.inc diff --git a/packages/qmake/qmake2-sdk/.mtn2git_empty b/packages/qmake/qmake2-sdk/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/qmake/qmake2-sdk/linux-oe-qmake.conf b/packages/qmake/qmake2-sdk/linux-oe-qmake.conf new file mode 100644 index 0000000000..f58481a693 --- /dev/null +++ b/packages/qmake/qmake2-sdk/linux-oe-qmake.conf @@ -0,0 +1 @@ +include(../linux-g++/qmake.conf) diff --git a/packages/qmake/qmake2-sdk_2.10a.bb b/packages/qmake/qmake2-sdk_2.10a.bb new file mode 100644 index 0000000000..3c00d81cdc --- /dev/null +++ b/packages/qmake/qmake2-sdk_2.10a.bb @@ -0,0 +1,4 @@ +QTVERSION="4.3.3" +require qmake2-native.inc + +inherit sdk -- cgit v1.2.3 From cbe0e23252792444bca8562ca88a3c14bffe2b6c Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 08:53:47 +0000 Subject: qmake2 sdk: fix packaging --- packages/qmake/qmake2-native.inc | 5 +---- packages/qmake/qmake2-native_2.10a.bb | 8 ++++++++ packages/qmake/qmake2-sdk_2.10a.bb | 13 +++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/qmake/qmake2-native.inc b/packages/qmake/qmake2-native.inc index 55b402655e..f7bdd7836b 100644 --- a/packages/qmake/qmake2-native.inc +++ b/packages/qmake/qmake2-native.inc @@ -17,7 +17,7 @@ S = "${WORKDIR}/${QTVER}" # we need the real target system here CROSS_SYS := "${TARGET_SYS}" -inherit autotools cross +inherit autotools export QTDIR = "${S}" EXTRA_OEMAKE = "-e" @@ -62,6 +62,3 @@ do_stage() { cp -PfR mkspecs ${CROSS_DATADIR}/qt4/ } -do_install() { - : -} diff --git a/packages/qmake/qmake2-native_2.10a.bb b/packages/qmake/qmake2-native_2.10a.bb index 07e97c4413..0e1aa2c61e 100644 --- a/packages/qmake/qmake2-native_2.10a.bb +++ b/packages/qmake/qmake2-native_2.10a.bb @@ -1,3 +1,11 @@ QTVERSION="4.3.3" FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2-native" require ${PN}.inc + +inherit cross + +do_install() { + : +} + + diff --git a/packages/qmake/qmake2-sdk_2.10a.bb b/packages/qmake/qmake2-sdk_2.10a.bb index 3c00d81cdc..b16159c8d9 100644 --- a/packages/qmake/qmake2-sdk_2.10a.bb +++ b/packages/qmake/qmake2-sdk_2.10a.bb @@ -2,3 +2,16 @@ QTVERSION="4.3.3" require qmake2-native.inc inherit sdk + +do_install () { + install -d ${D}/${bindir} + install -m 0755 bin/qmake ${D}/${bindir}/qmake2 + install -m 0755 bin/qmake ${D}/${bindir}/qmake-qt4 + install -d ${D}/${datadir}/qt4 + cp -PfR mkspecs ${D}/${datadir}/qt4/ +} + + + + + -- cgit v1.2.3 From e33f51d47289a43aaa412dc13e7473c16b4f68ea Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 09:33:03 +0000 Subject: meta-toolchain neuros: add qmake2-sdk --- packages/meta/meta-toolchain-neuros.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/meta/meta-toolchain-neuros.bb b/packages/meta/meta-toolchain-neuros.bb index 5905eceec1..6510a8c72a 100644 --- a/packages/meta/meta-toolchain-neuros.bb +++ b/packages/meta/meta-toolchain-neuros.bb @@ -1,8 +1,9 @@ # Toolchain for neuros-osd devices -PR = "r1" +PR = "r2" -TOOLCHAIN_HOST_TASK = "task-sdk-host" +TOOLCHAIN_HOST_TASK = "task-sdk-host \ + qmake2-sdk " require meta-toolchain.bb -- cgit v1.2.3 From e753792321bbea656f91372a51fa0056aaf48571 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 10:05:43 +0000 Subject: uicmoc4: add sdk version, fix build with gcc 4.3.x --- packages/uicmoc/files/qapplication.diff | 132 ++++++++++++++++++++++++++++++++ packages/uicmoc/uicmoc4-native.inc | 2 - packages/uicmoc/uicmoc4-native_4.3.1.bb | 2 + packages/uicmoc/uicmoc4-native_4.3.3.bb | 1 + packages/uicmoc/uicmoc4-native_4.4.0.bb | 5 +- packages/uicmoc/uicmoc4-sdk_4.4.0.bb | 23 ++++++ 6 files changed, 162 insertions(+), 3 deletions(-) create mode 100644 packages/uicmoc/files/qapplication.diff create mode 100644 packages/uicmoc/uicmoc4-sdk_4.4.0.bb diff --git a/packages/uicmoc/files/qapplication.diff b/packages/uicmoc/files/qapplication.diff new file mode 100644 index 0000000000..4600f66bd3 --- /dev/null +++ b/packages/uicmoc/files/qapplication.diff @@ -0,0 +1,132 @@ +--- /tmp/qapplication_p.h 2008-07-14 11:39:24.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/src/gui/kernel/qapplication_p.h 2008-07-14 11:39:47.000000000 +0200 +@@ -344,7 +344,7 @@ + # endif + QRect maxWindowRect(const QScreen *screen) const { return maxWindowRects[screen]; } + void setMaxWindowRect(const QScreen *screen, int screenNo, const QRect &rect); +- void setScreenTransformation(QScreen *screen, int screen, int transformation); ++ void setScreenTransformation(QScreen *screen, int screenNo, int transformation); + #endif + + static QApplicationPrivate *instance() { return self; } +--- /tmp/qdrawhelper_p.h 2008-07-14 11:48:26.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/src/gui/painting/qdrawhelper_p.h 2008-07-14 11:50:12.000000000 +0200 +@@ -1379,7 +1379,7 @@ + static inline quint32 qt_convertToRgb(SRC color); + + template <> +-static inline quint32 qt_convertToRgb(quint32 color) ++inline quint32 qt_convertToRgb(quint32 color) + { + const int r = qRed(color) >> (8 - qrgb::len_red); + const int g = qGreen(color) >> (8 - qrgb::len_green); +@@ -1394,7 +1394,7 @@ + } + + template <> +-static inline quint32 qt_convertToRgb(quint16 color) ++inline quint32 qt_convertToRgb(quint16 color) + { + return qt_convertToRgb(qt_colorConvert(color, 0)); + } +@@ -1422,14 +1422,14 @@ + } Q_PACKED; + + template <> +-static inline qrgb_generic16 qt_colorConvert(quint32 color, qrgb_generic16 dummy) ++inline qrgb_generic16 qt_colorConvert(quint32 color, qrgb_generic16 dummy) + { + Q_UNUSED(dummy); + return qrgb_generic16(color); + } + + template <> +-static inline qrgb_generic16 qt_colorConvert(quint16 color, qrgb_generic16 dummy) ++inline qrgb_generic16 qt_colorConvert(quint16 color, qrgb_generic16 dummy) + { + Q_UNUSED(dummy); + return qrgb_generic16(qt_colorConvert(color, 0)); +--- /tmp/qscreen_qws.cpp 2008-07-14 11:51:39.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/src/gui/embedded/qscreen_qws.cpp 2008-07-14 11:52:56.000000000 +0200 +@@ -828,13 +828,13 @@ + static inline quint8 qt_convertToGray4(SRC color); + + template <> +-static inline quint8 qt_convertToGray4(quint32 color) ++inline quint8 qt_convertToGray4(quint32 color) + { + return qGray(color) >> 4; + } + + template <> +-static inline quint8 qt_convertToGray4(quint16 color) ++inline quint8 qt_convertToGray4(quint16 color) + { + const int r = (color & 0xf800) >> 11; + const int g = (color & 0x07e0) >> 6; // only keep 5 bit +@@ -843,13 +843,13 @@ + } + + template <> +-static inline quint8 qt_convertToGray4(qrgb444 color) ++inline quint8 qt_convertToGray4(qrgb444 color) + { + return qt_convertToGray4(quint32(color)); + } + + template <> +-static inline quint8 qt_convertToGray4(qargb4444 color) ++inline quint8 qt_convertToGray4(qargb4444 color) + { + return qt_convertToGray4(quint32(color)); + } +@@ -969,25 +969,25 @@ + static inline quint8 qt_convertToMono(SRC color); + + template <> +-static inline quint8 qt_convertToMono(quint32 color) ++inline quint8 qt_convertToMono(quint32 color) + { + return qGray(color) >> 7; + } + + template <> +-static inline quint8 qt_convertToMono(quint16 color) ++inline quint8 qt_convertToMono(quint16 color) + { + return (qGray(qt_colorConvert(color, 0)) >> 7); + } + + template <> +-static inline quint8 qt_convertToMono(qargb4444 color) ++inline quint8 qt_convertToMono(qargb4444 color) + { + return (qGray(quint32(color)) >> 7); + } + + template <> +-static inline quint8 qt_convertToMono(qrgb444 color) ++inline quint8 qt_convertToMono(qrgb444 color) + { + return (qGray(quint32(color)) >> 7); + } +--- /tmp/qdrawhelper.cpp 2008-07-14 11:56:25.000000000 +0200 ++++ qt-embedded-linux-opensource-src-4.4.0/src/gui/painting/qdrawhelper.cpp 2008-07-14 11:57:29.000000000 +0200 +@@ -3374,7 +3374,7 @@ + + #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + template <> +-static inline void madd_4(qargb8565 *dest, const quint32 a, const qargb8565 *src) ++inline void madd_4(qargb8565 *dest, const quint32 a, const qargb8565 *src) + { + Q_ASSERT((quintptr(dest) & 0x3) == 0); + Q_ASSERT((quintptr(src) & 0x3) == 0); +@@ -3455,7 +3455,7 @@ + + #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + template <> +-static inline void madd_4(qargb8555 *dest, const quint32 a, const qargb8555 *src) ++inline void madd_4(qargb8555 *dest, const quint32 a, const qargb8555 *src) + { + Q_ASSERT((quintptr(dest) & 0x3) == 0); + Q_ASSERT((quintptr(src) & 0x3) == 0); diff --git a/packages/uicmoc/uicmoc4-native.inc b/packages/uicmoc/uicmoc4-native.inc index c5adef71e4..8d7f3111dc 100644 --- a/packages/uicmoc/uicmoc4-native.inc +++ b/packages/uicmoc/uicmoc4-native.inc @@ -10,8 +10,6 @@ SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.ta file://configure-fix.patch;patch=1" S = "${WORKDIR}/qtopia-core-opensource-src-${PV}" -inherit native - EXTRA_OECONF = "-prefix ${STAGING_DIR_NATIVE}/qt4 \ -qt-libjpeg -qt-gif -system-zlib \ -no-nis -no-cups -no-exceptions \ diff --git a/packages/uicmoc/uicmoc4-native_4.3.1.bb b/packages/uicmoc/uicmoc4-native_4.3.1.bb index 1950f63068..dc969d4be1 100644 --- a/packages/uicmoc/uicmoc4-native_4.3.1.bb +++ b/packages/uicmoc/uicmoc4-native_4.3.1.bb @@ -1 +1,3 @@ require uicmoc4-native.inc + +inherit native diff --git a/packages/uicmoc/uicmoc4-native_4.3.3.bb b/packages/uicmoc/uicmoc4-native_4.3.3.bb index 1950f63068..dd1ac3d98d 100644 --- a/packages/uicmoc/uicmoc4-native_4.3.3.bb +++ b/packages/uicmoc/uicmoc4-native_4.3.3.bb @@ -1 +1,2 @@ require uicmoc4-native.inc +inherit native diff --git a/packages/uicmoc/uicmoc4-native_4.4.0.bb b/packages/uicmoc/uicmoc4-native_4.4.0.bb index 6d9c83eb75..6e13ccbf13 100644 --- a/packages/uicmoc/uicmoc4-native_4.4.0.bb +++ b/packages/uicmoc/uicmoc4-native_4.4.0.bb @@ -1,7 +1,10 @@ require uicmoc4-native.inc SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ - file://configure-fix.patch;patch=1" + file://configure-fix.patch;patch=1 \ + file://qapplication.diff;patch=1 " + S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}" +inherit native diff --git a/packages/uicmoc/uicmoc4-sdk_4.4.0.bb b/packages/uicmoc/uicmoc4-sdk_4.4.0.bb new file mode 100644 index 0000000000..00aeb26564 --- /dev/null +++ b/packages/uicmoc/uicmoc4-sdk_4.4.0.bb @@ -0,0 +1,23 @@ +require uicmoc4-native.inc + +inherit sdk + +SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-${PV}.tar.bz2 \ + file://configure-fix.patch;patch=1 \ + file://qapplication.diff;patch=1 " + +S = "${WORKDIR}/qt-embedded-linux-opensource-src-${PV}" + +do_install_append() { + install -d ${D}/${bindir} + install -m 0755 bin/moc ${D}/${bindir}/moc4 + install -m 0755 bin/uic ${D}/${bindir}/uic4 + install -m 0755 bin/uic3 ${D}/${bindir}/uic34 + install -m 0755 bin/rcc ${D}/${bindir}/rcc4 + install -m 0755 bin/lrelease ${D}/${bindir}/lrelease4 + install -m 0755 bin/lupdate ${D}/${bindir}/lupdate4 + install -d ${D}/${datadir}/qt4/ + install -m 0644 tools/porting/src/q3porting.xml ${D}/${datadir}/qt4/ +} + + -- cgit v1.2.3 From 31775c318bdd3b8f62d281aa84e7ad166b78aa79 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 10:08:58 +0000 Subject: meta-toolchain neuros: also ship uicmoc4-sdk --- packages/meta/meta-toolchain-neuros.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/meta/meta-toolchain-neuros.bb b/packages/meta/meta-toolchain-neuros.bb index 6510a8c72a..f60fbf0063 100644 --- a/packages/meta/meta-toolchain-neuros.bb +++ b/packages/meta/meta-toolchain-neuros.bb @@ -1,9 +1,9 @@ # Toolchain for neuros-osd devices -PR = "r2" +PR = "r3" TOOLCHAIN_HOST_TASK = "task-sdk-host \ - qmake2-sdk " + qmake2-sdk uicmoc4-sdk" require meta-toolchain.bb -- cgit v1.2.3 From b10fac7870b1dab03d26422790893186bcb3ee19 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 14 Jul 2008 11:17:35 +0000 Subject: linux-openezx-devel bump to 2.6.25 --- packages/linux/linux-openezx-devel_svn.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-openezx-devel_svn.bb b/packages/linux/linux-openezx-devel_svn.bb index 34daac007c..6c0af7cfb6 100644 --- a/packages/linux/linux-openezx-devel_svn.bb +++ b/packages/linux/linux-openezx-devel_svn.bb @@ -8,8 +8,8 @@ require linux.inc RPSRC = "http://www.rpsys.net/openzaurus/patches/archive" -KERNEL_RELEASE = "2.6.24" -KERNEL_PATCHES = "kernel-2.6.24.x-patches" +KERNEL_RELEASE = "2.6.25" +KERNEL_PATCHES = "kernel-${KERNEL_RELEASE}.x-patches" PV = "${KERNEL_RELEASE}+svnr${SRCREV}" PR = "r0" -- cgit v1.2.3 From 4afec386e30fba9df25eaa0457c1e3c20f5ca974 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 14 Jul 2008 11:18:15 +0000 Subject: linux-openmoko-devel: clean up a bit, compute defconfig for om-gta01 and om-gta02 out of one defconfig, enable IKCONFIG in defconfig, disable APM_POWER in defconfig. --- packages/linux/linux-openmoko-devel/defconfig-oe | 1770 ++++++++++++++++++++ .../linux/linux-openmoko-devel/defconfig-om-gta01 | 1770 -------------------- .../linux/linux-openmoko-devel/defconfig-om-gta02 | 1769 ------------------- .../del-hardcoded-led-behaviour.patch | 16 - .../linux-openmoko-devel/fix-defconfig-gta01.patch | 30 - packages/linux/linux-openmoko-devel_git.bb | 18 +- packages/linux/linux-openmoko_2.6.24+git.bb | 3 +- 7 files changed, 1782 insertions(+), 3594 deletions(-) create mode 100644 packages/linux/linux-openmoko-devel/defconfig-oe delete mode 100644 packages/linux/linux-openmoko-devel/defconfig-om-gta01 delete mode 100644 packages/linux/linux-openmoko-devel/defconfig-om-gta02 delete mode 100644 packages/linux/linux-openmoko-devel/del-hardcoded-led-behaviour.patch delete mode 100644 packages/linux/linux-openmoko-devel/fix-defconfig-gta01.patch diff --git a/packages/linux/linux-openmoko-devel/defconfig-oe b/packages/linux/linux-openmoko-devel/defconfig-oe new file mode 100644 index 0000000000..1741cbab88 --- /dev/null +++ b/packages/linux/linux-openmoko-devel/defconfig-oe @@ -0,0 +1,1770 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24 +# Mon Feb 25 07:03:56 2008 +# +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=y +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_FIQ=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="oe" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +# CONFIG_FAIR_GROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=m +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=m +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_S3C2410=y +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_PLAT_S3C24XX=y +CONFIG_CPU_S3C244X=y +CONFIG_S3C2410_DMA=y +# CONFIG_S3C2410_DMA_DEBUG is not set +CONFIG_MACH_SMDK=y +CONFIG_MACH_NEO1973=y +CONFIG_PLAT_S3C=y +CONFIG_CPU_LLSERIAL_S3C2410=y +CONFIG_CPU_LLSERIAL_S3C2440=y + +# +# Boot options +# +# CONFIG_S3C_BOOT_WATCHDOG is not set +# CONFIG_S3C_BOOT_ERROR_RESET is not set + +# +# Power management +# +# CONFIG_S3C2410_PM_CHECK is not set +CONFIG_S3C_LOWLEVEL_UART_PORT=2 + +# +# S3C2400 Machines +# +CONFIG_CPU_S3C2410=y +CONFIG_CPU_S3C2410_DMA=y +CONFIG_S3C2410_PM=y +CONFIG_S3C2410_GPIO=y +CONFIG_S3C2410_CLOCK=y +CONFIG_S3C2410_PWM=y + +# +# S3C2410 Machines +# +# CONFIG_ARCH_SMDK2410 is not set +# CONFIG_ARCH_H1940 is not set +# CONFIG_MACH_N30 is not set +# CONFIG_ARCH_BAST is not set +# CONFIG_MACH_OTOM is not set +# CONFIG_MACH_AML_M5900 is not set +# CONFIG_MACH_VR1000 is not set +CONFIG_MACH_QT2410=y +CONFIG_MACH_NEO1973_GTA01=y + +# +# S3C2412 Machines +# +# CONFIG_MACH_SMDK2413 is not set +# CONFIG_MACH_SMDK2412 is not set +# CONFIG_MACH_VSTMS is not set +CONFIG_CPU_S3C2440=y +CONFIG_S3C2440_DMA=y +CONFIG_S3C2440_C_FIQ=y + +# +# S3C2440 Machines +# +# CONFIG_MACH_ANUBIS is not set +# CONFIG_MACH_OSIRIS is not set +# CONFIG_MACH_RX3715 is not set +CONFIG_ARCH_S3C2440=y +# CONFIG_MACH_NEXCODER_2440 is not set +CONFIG_SMDK2440_CPU2440=y +# CONFIG_MACH_HXD8 is not set +CONFIG_MACH_NEO1973_GTA02=y +# CONFIG_NEO1973_GTA02_2440 is not set +CONFIG_CPU_S3C2442=y + +# +# S3C2442 Machines +# +CONFIG_SMDK2440_CPU2442=y + +# +# S3C2443 Machines +# +# CONFIG_MACH_SMDK2443 is not set + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM920T=y +CONFIG_CPU_32v4T=y +CONFIG_CPU_ABRT_EV4T=y +CONFIG_CPU_CACHE_V4WT=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_OUTER_CACHE is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=200 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="unused -- bootloader passes ATAG list" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +CONFIG_PM_DEBUG=y +# CONFIG_PM_VERBOSE is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_MIGRATE=y +CONFIG_NET_KEY=m +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_ASK_IP_FIB_HASH=y +# CONFIG_IP_FIB_TRIE is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_MULTIPLE_TABLES=y +# CONFIG_IP_ROUTE_MULTIPATH is not set +# CONFIG_IP_ROUTE_VERBOSE is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +# CONFIG_NET_IPGRE_BROADCAST is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_MD5SIG=y +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=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 is not set +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +# CONFIG_NETFILTER_XT_MATCH_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_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# 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 is not set +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +# CONFIG_NF_NAT_AMANDA is not set +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_ARPTABLES is not set + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +# CONFIG_IP6_NF_QUEUE is not set +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +# CONFIG_IP6_NF_RAW is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +# CONFIG_NET_SCH_RR is not set +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +# CONFIG_NET_EMATCH is not set +# CONFIG_NET_CLS_ACT is not set +# CONFIG_NET_CLS_POLICE is not set +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +# CONFIG_BT_HCIBTSDIO is not set +# CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +CONFIG_MTD_ABSENT=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=y +CONFIG_MTD_NAND_S3C2410=y +# CONFIG_MTD_NAND_S3C2410_DEBUG is not set +CONFIG_MTD_NAND_S3C2410_HWECC=y +# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_PNP=y +CONFIG_PNP_DEBUG=y + +# +# Protocols +# +# CONFIG_PNPACPI is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_UB=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +CONFIG_NET_PCI=y +# CONFIG_B44 is not set +CONFIG_CS89x0=m +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +# CONFIG_WAN is not set +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=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=y +CONFIG_INPUT_EVBUG=m + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_NEO1973=y +CONFIG_KEYBOARD_QT2410=y +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_FILTER=y +CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y +CONFIG_TOUCHSCREEN_FILTER_MEAN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +CONFIG_TOUCHSCREEN_S3C2410=y +# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m +CONFIG_INPUT_LIS302DL=y + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_NR_TTY_DEVICES=4 +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_S3C2410=y +CONFIG_SERIAL_S3C2410_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +CONFIG_I2C_S3C2410=y +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +CONFIG_SENSORS_PCF50606=y +CONFIG_SENSORS_PCF50633=y +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +CONFIG_SENSORS_TSL256X=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=y +CONFIG_SPI_S3C24XX=y +CONFIG_SPI_S3C24XX_GPIO=y + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_APM_POWER is not set +# CONFIG_BATTERY_DS2760 is not set +CONFIG_BATTERY_BQ27000_HDQ=y +CONFIG_GTA02_HDQ=y +# CONFIG_HWMON is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_S3C2410_WATCHDOG=m + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_MFD_GLAMO=y +CONFIG_MFD_GLAMO_FB=y +CONFIG_MFD_GLAMO_SPI_GPIO=y +CONFIG_MFD_GLAMO_SPI_FB=y +CONFIG_MFD_GLAMO_MCI=y + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_UVESA is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_S3C2410=y +# CONFIG_FB_S3C2410_DEBUG is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +# CONFIG_LCD_LTV350QV is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_GTA01=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +CONFIG_DISPLAY_JBT6K74=y + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +CONFIG_FONT_6x11=y +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# + +# +# SPI devices +# + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_S3C24XX_SOC=m +CONFIG_SND_S3C24XX_SOC_I2S=m +CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m +CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=m + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_WM8753=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_SUSPEND=y +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD 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=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +# CONFIG_USB_STORAGE_ISD200 is not set +CONFIG_USB_STORAGE_DPCM=y +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_KARMA=y +CONFIG_USB_LIBUSUAL=y + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_AIRPRIME=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +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=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +CONFIG_USB_BERRY_CHARGE=m +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +CONFIG_USB_GADGET_S3C2410=y +CONFIG_USB_S3C2410=y +# CONFIG_USB_S3C2410_DEBUG is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set + +# +# SDIO support +# +CONFIG_SDIO=y +CONFIG_SDIO_S3C24XX=y +CONFIG_SDIO_S3C24XX_DMA=y +CONFIG_SDIO_AR6000_WLAN=y +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_SPI is not set +CONFIG_MMC_S3C=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_S3C24XX=m +# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_NEO1973_VIBRATOR=y +CONFIG_LEDS_NEO1973_GTA02=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_DEBUG=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_S3C=m + +# +# File systems +# +CONFIG_EXT2_FS=m +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_CONFIGFS_FS=m + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_YAFFS_FS=y +CONFIG_YAFFS_YAFFS1=y +CONFIG_YAFFS_9BYTE_TAGS=y +CONFIG_YAFFS_YAFFS2=y +CONFIG_YAFFS_AUTO_YAFFS2=y +# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set +CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10 +# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set +# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set +CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=y +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +CONFIG_CIFS_WEAK_PW_HASH=y +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=m +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +# CONFIG_PROFILING is not set +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# 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 +CONFIG_DEBUG_S3C_UART=2 + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=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_DMA=y diff --git a/packages/linux/linux-openmoko-devel/defconfig-om-gta01 b/packages/linux/linux-openmoko-devel/defconfig-om-gta01 deleted file mode 100644 index 889f7ec2e4..0000000000 --- a/packages/linux/linux-openmoko-devel/defconfig-om-gta01 +++ /dev/null @@ -1,1770 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.24 -# Mon Feb 25 07:03:56 2008 -# -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=y -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_FIQ=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_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 is not set -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -# CONFIG_EMBEDDED is not set -CONFIG_UID16=y -CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_SLABINFO=y -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=m -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=m -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -CONFIG_ARCH_S3C2410=y -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_PLAT_S3C24XX=y -CONFIG_CPU_S3C244X=y -CONFIG_S3C2410_DMA=y -# CONFIG_S3C2410_DMA_DEBUG is not set -CONFIG_MACH_SMDK=y -CONFIG_MACH_NEO1973=y -CONFIG_PLAT_S3C=y -CONFIG_CPU_LLSERIAL_S3C2410=y -CONFIG_CPU_LLSERIAL_S3C2440=y - -# -# Boot options -# -# CONFIG_S3C_BOOT_WATCHDOG is not set -# CONFIG_S3C_BOOT_ERROR_RESET is not set - -# -# Power management -# -# CONFIG_S3C2410_PM_DEBUG is not set -# CONFIG_S3C2410_PM_CHECK is not set -CONFIG_S3C_LOWLEVEL_UART_PORT=0 - -# -# S3C2400 Machines -# -CONFIG_CPU_S3C2410=y -CONFIG_CPU_S3C2410_DMA=y -CONFIG_S3C2410_PM=y -CONFIG_S3C2410_GPIO=y -CONFIG_S3C2410_CLOCK=y -CONFIG_S3C2410_PWM=y - -# -# S3C2410 Machines -# -# CONFIG_ARCH_SMDK2410 is not set -# CONFIG_ARCH_H1940 is not set -# CONFIG_MACH_N30 is not set -# CONFIG_ARCH_BAST is not set -# CONFIG_MACH_OTOM is not set -# CONFIG_MACH_AML_M5900 is not set -# CONFIG_MACH_VR1000 is not set -CONFIG_MACH_QT2410=y -CONFIG_MACH_NEO1973_GTA01=y - -# -# S3C2412 Machines -# -# CONFIG_MACH_SMDK2413 is not set -# CONFIG_MACH_SMDK2412 is not set -# CONFIG_MACH_VSTMS is not set -CONFIG_CPU_S3C2440=y -CONFIG_S3C2440_DMA=y -CONFIG_S3C2440_C_FIQ=y - -# -# S3C2440 Machines -# -# CONFIG_MACH_ANUBIS is not set -# CONFIG_MACH_OSIRIS is not set -# CONFIG_MACH_RX3715 is not set -CONFIG_ARCH_S3C2440=y -# CONFIG_MACH_NEXCODER_2440 is not set -CONFIG_SMDK2440_CPU2440=y -# CONFIG_MACH_HXD8 is not set -CONFIG_MACH_NEO1973_GTA02=y -# CONFIG_NEO1973_GTA02_2440 is not set -CONFIG_CPU_S3C2442=y - -# -# S3C2442 Machines -# -CONFIG_SMDK2440_CPU2442=y - -# -# S3C2443 Machines -# -# CONFIG_MACH_SMDK2443 is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_ARM920T=y -CONFIG_CPU_32v4T=y -CONFIG_CPU_ABRT_EV4T=y -CONFIG_CPU_CACHE_V4WT=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_COPY_V4WB=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_WRITETHROUGH is not set -# CONFIG_OUTER_CACHE is not set - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -CONFIG_PREEMPT=y -CONFIG_NO_IDLE_HZ=y -CONFIG_HZ=200 -CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="unused -- bootloader passes ATAG list" -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y -CONFIG_ATAGS_PROC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set - -# -# Power management options -# -CONFIG_PM=y -CONFIG_PM_LEGACY=y -CONFIG_PM_DEBUG=y -# CONFIG_PM_VERBOSE is not set -CONFIG_PM_SLEEP=y -CONFIG_SUSPEND_UP_POSSIBLE=y -CONFIG_SUSPEND=y -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -CONFIG_XFRM_MIGRATE=y -CONFIG_NET_KEY=m -CONFIG_NET_KEY_MIGRATE=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_ASK_IP_FIB_HASH=y -# CONFIG_IP_FIB_TRIE is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_VERBOSE is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE=m -# CONFIG_NET_IPGRE_BROADCAST is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -# CONFIG_INET_LRO is not set -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -CONFIG_TCP_MD5SIG=y -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=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 is not set -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -# CONFIG_NETFILTER_XT_MATCH_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_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -# CONFIG_NETFILTER_XT_MATCH_TIME is not set -# 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 is not set -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -# CONFIG_NF_NAT_AMANDA is not set -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -# CONFIG_IP_NF_RAW is not set -# CONFIG_IP_NF_ARPTABLES is not set - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -# CONFIG_IP6_NF_RAW is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -CONFIG_NET_SCH_CBQ=m -CONFIG_NET_SCH_HTB=m -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_PRIO=m -# CONFIG_NET_SCH_RR is not set -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_INGRESS=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -# CONFIG_NET_EMATCH is not set -# CONFIG_NET_CLS_ACT is not set -# CONFIG_NET_CLS_POLICE is not set -# CONFIG_NET_CLS_IND is not set -CONFIG_NET_SCH_FIFO=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -# CONFIG_BT_HCIBTSDIO is not set -# CONFIG_BT_HCIUART is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set -CONFIG_FIB_RULES=y - -# -# Wireless -# -# CONFIG_CFG80211 is not set -CONFIG_WIRELESS_EXT=y -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_MTD_OOPS is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -CONFIG_MTD_ABSENT=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x8000000 -CONFIG_MTD_PHYSMAP_LEN=0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_VERIFY_WRITE=y -# CONFIG_MTD_NAND_ECC_SMC is not set -# CONFIG_MTD_NAND_MUSEUM_IDS is not set -CONFIG_MTD_NAND_IDS=y -CONFIG_MTD_NAND_S3C2410=y -# CONFIG_MTD_NAND_S3C2410_DEBUG is not set -CONFIG_MTD_NAND_S3C2410_HWECC=y -# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_NANDSIM is not set -# CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_ALAUDA is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_PNP=y -CONFIG_PNP_DEBUG=y - -# -# Protocols -# -# CONFIG_PNPACPI is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_UB=m -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m -CONFIG_SCSI_DMA=y -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=m -# CONFIG_CHR_DEV_ST is not set -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -CONFIG_SCSI_SCAN_ASYNC=y -CONFIG_SCSI_WAIT_SCAN=m - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -# CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set -# CONFIG_SCSI_SRP_ATTRS is not set -CONFIG_SCSI_LOWLEVEL=y -# CONFIG_ISCSI_TCP is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m -# CONFIG_VETH is not set -# CONFIG_NET_SB1000 is not set -# CONFIG_PHYLIB is not set -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -# CONFIG_AX88796 is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set -# CONFIG_IBM_NEW_EMAC_ZMII is not set -# CONFIG_IBM_NEW_EMAC_RGMII is not set -# CONFIG_IBM_NEW_EMAC_TAH is not set -# CONFIG_IBM_NEW_EMAC_EMAC4 is not set -CONFIG_NET_PCI=y -# CONFIG_B44 is not set -CONFIG_CS89x0=m -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET=y -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=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=y -CONFIG_INPUT_EVBUG=m - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_KEYBOARD_GPIO=m -CONFIG_KEYBOARD_NEO1973=y -CONFIG_KEYBOARD_QT2410=y -CONFIG_INPUT_MOUSE=y -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_APPLETOUCH is not set -# CONFIG_MOUSE_VSXXXAA is not set -# CONFIG_MOUSE_GPIO is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_FILTER=y -CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y -CONFIG_TOUCHSCREEN_FILTER_MEAN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -CONFIG_TOUCHSCREEN_S3C2410=y -# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=m -CONFIG_INPUT_LIS302DL=y - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_RAW is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_NR_TTY_DEVICES=4 -CONFIG_HW_CONSOLE=y -CONFIG_VT_HW_CONSOLE_BINDING=y -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_S3C2410=y -CONFIG_SERIAL_S3C2410_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_IPMI_HANDLER is not set -# CONFIG_HW_RANDOM is not set -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -CONFIG_I2C_S3C2410=y -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -CONFIG_SENSORS_PCF50606=y -CONFIG_SENSORS_PCF50633=y -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -CONFIG_SENSORS_TSL256X=m -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -CONFIG_SPI_BITBANG=y -CONFIG_SPI_S3C24XX=y -CONFIG_SPI_S3C24XX_GPIO=y - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -# CONFIG_PDA_POWER is not set -CONFIG_APM_POWER=y -# CONFIG_BATTERY_DS2760 is not set -CONFIG_BATTERY_BQ27000_HDQ=y -CONFIG_GTA02_HDQ=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_S3C2410_WATCHDOG=m - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set - -# -# Sonics Silicon Backplane -# -CONFIG_SSB_POSSIBLE=y -# CONFIG_SSB is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_MFD_GLAMO=y -CONFIG_MFD_GLAMO_FB=y -CONFIG_MFD_GLAMO_SPI_GPIO=y -CONFIG_MFD_GLAMO_SPI_FB=y -CONFIG_MFD_GLAMO_MCI=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -CONFIG_DAB=y -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_UVESA is not set -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_S3C2410=y -# CONFIG_FB_S3C2410_DEBUG is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y -# CONFIG_LCD_LTV350QV is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_CORGI is not set -CONFIG_BACKLIGHT_GTA01=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -CONFIG_DISPLAY_JBT6K74=y - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -CONFIG_FONT_6x11=y -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -# CONFIG_FONT_MINI_4x6 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# - -# -# SPI devices -# - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=m -CONFIG_SND_S3C24XX_SOC=m -CONFIG_SND_S3C24XX_SOC_I2S=m -CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m -CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=m - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_WM8753=m - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set -# CONFIG_HIDRAW is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -# CONFIG_USB_HIDDEV is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -CONFIG_USB_DEVICE_CLASS=y -# CONFIG_USB_DYNAMIC_MINORS is not set -CONFIG_USB_SUSPEND=y -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD 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=m -# CONFIG_USB_STORAGE_DEBUG is not set -CONFIG_USB_STORAGE_DATAFAB=y -CONFIG_USB_STORAGE_FREECOM=y -# CONFIG_USB_STORAGE_ISD200 is not set -CONFIG_USB_STORAGE_DPCM=y -CONFIG_USB_STORAGE_USBAT=y -CONFIG_USB_STORAGE_SDDR09=y -CONFIG_USB_STORAGE_SDDR55=y -CONFIG_USB_STORAGE_JUMPSHOT=y -CONFIG_USB_STORAGE_ALAUDA=y -CONFIG_USB_STORAGE_KARMA=y -CONFIG_USB_LIBUSUAL=y - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -CONFIG_USB_MON=y - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -CONFIG_USB_SERIAL_AIRPRIME=m -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -# CONFIG_USB_SERIAL_CH341 is not set -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=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG is not set -CONFIG_USB_EZUSB=y - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -CONFIG_USB_BERRY_CHARGE=m -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -CONFIG_USB_TRANCEVIBRATOR=m -CONFIG_USB_IOWARRIOR=m -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_ATMEL_USBA is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -CONFIG_USB_GADGET_S3C2410=y -CONFIG_USB_S3C2410=y -# CONFIG_USB_S3C2410_DEBUG is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set - -# -# SDIO support -# -CONFIG_SDIO=y -CONFIG_SDIO_S3C24XX=y -CONFIG_SDIO_S3C24XX_DMA=y -CONFIG_SDIO_AR6000_WLAN=y -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_UNSAFE_RESUME=y - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y -# CONFIG_SDIO_UART is not set - -# -# MMC/SD Host Controller Drivers -# -# CONFIG_MMC_SPI is not set -CONFIG_MMC_S3C=y -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_S3C24XX=m -# CONFIG_LEDS_GPIO is not set -CONFIG_LEDS_NEO1973_VIBRATOR=y -CONFIG_LEDS_NEO1973_GTA02=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_DEBUG=y - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -# CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1374 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_X1205 is not set -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set - -# -# SPI RTC drivers -# -# CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T59 is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# on-CPU RTC drivers -# -CONFIG_RTC_DRV_S3C=m - -# -# File systems -# -CONFIG_EXT2_FS=m -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -CONFIG_ROMFS_FS=y -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_CONFIGFS_FS=m - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_YAFFS_FS=y -CONFIG_YAFFS_YAFFS1=y -CONFIG_YAFFS_9BYTE_TAGS=y -CONFIG_YAFFS_YAFFS2=y -CONFIG_YAFFS_AUTO_YAFFS2=y -# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set -CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10 -# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set -# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set -CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -CONFIG_JFFS2_SUMMARY=y -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -# CONFIG_JFFS2_LZO is not set -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -CONFIG_NFS_V4=y -# CONFIG_NFS_DIRECTIO is not set -CONFIG_NFSD=m -CONFIG_NFSD_V3=y -# CONFIG_NFSD_V3_ACL is not set -CONFIG_NFSD_V4=y -CONFIG_NFSD_TCP=y -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -# CONFIG_SUNRPC_BIND34 is not set -CONFIG_RPCSEC_GSS_KRB5=y -# CONFIG_RPCSEC_GSS_SPKM3 is not set -# CONFIG_SMB_FS is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -CONFIG_CIFS_WEAK_PW_HASH=y -# CONFIG_CIFS_XATTR is not set -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -CONFIG_NLS_CODEPAGE_850=m -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -CONFIG_NLS_UTF8=m -# CONFIG_DLM is not set -CONFIG_INSTRUMENTATION=y -# CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_WARN_DEPRECATED=y -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -CONFIG_DETECT_SOFTLOCKUP=y -# CONFIG_SCHED_DEBUG is not set -# CONFIG_SCHEDSTATS is not set -CONFIG_TIMER_STATS=y -# CONFIG_DEBUG_SLAB is not set -CONFIG_DEBUG_PREEMPT=y -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_RT_MUTEX_TESTER is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_LIST is not set -# CONFIG_DEBUG_SG is not set -CONFIG_FRAME_POINTER=y -CONFIG_FORCED_INLINING=y -# 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 -CONFIG_DEBUG_S3C_UART=0 - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA256=m -CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_GF128MUL=m -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_LRW=m -# CONFIG_CRYPTO_XTS is not set -# CONFIG_CRYPTO_CRYPTD is not set -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -# CONFIG_CRYPTO_SEED is not set -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_TEST=m -# CONFIG_CRYPTO_AUTHENC is not set -CONFIG_CRYPTO_HW=y - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=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_DMA=y diff --git a/packages/linux/linux-openmoko-devel/defconfig-om-gta02 b/packages/linux/linux-openmoko-devel/defconfig-om-gta02 deleted file mode 100644 index f87c723d4c..0000000000 --- a/packages/linux/linux-openmoko-devel/defconfig-om-gta02 +++ /dev/null @@ -1,1769 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.24 -# Mon Feb 25 07:03:56 2008 -# -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=y -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_FIQ=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_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 is not set -# CONFIG_SYSFS_DEPRECATED is not set -# CONFIG_RELAY is not set -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -# CONFIG_EMBEDDED is not set -CONFIG_UID16=y -CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_SLABINFO=y -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=m -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=m -# CONFIG_DEFAULT_AS is not set -CONFIG_DEFAULT_DEADLINE=y -# CONFIG_DEFAULT_CFQ is not set -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="deadline" - -# -# System Type -# -# CONFIG_ARCH_AAEC2000 is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_EP93XX is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_NETX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_IOP13XX is not set -# CONFIG_ARCH_IOP32X is not set -# CONFIG_ARCH_IOP33X is not set -# CONFIG_ARCH_IXP23XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_KS8695 is not set -# CONFIG_ARCH_NS9XXX is not set -# CONFIG_ARCH_MXC is not set -# CONFIG_ARCH_PNX4008 is not set -# CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -CONFIG_ARCH_S3C2410=y -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_DAVINCI is not set -# CONFIG_ARCH_OMAP is not set -CONFIG_PLAT_S3C24XX=y -CONFIG_CPU_S3C244X=y -CONFIG_S3C2410_DMA=y -# CONFIG_S3C2410_DMA_DEBUG is not set -CONFIG_MACH_SMDK=y -CONFIG_MACH_NEO1973=y -CONFIG_PLAT_S3C=y -CONFIG_CPU_LLSERIAL_S3C2410=y -CONFIG_CPU_LLSERIAL_S3C2440=y - -# -# Boot options -# -# CONFIG_S3C_BOOT_WATCHDOG is not set -# CONFIG_S3C_BOOT_ERROR_RESET is not set - -# -# Power management -# -# CONFIG_S3C2410_PM_CHECK is not set -CONFIG_S3C_LOWLEVEL_UART_PORT=2 - -# -# S3C2400 Machines -# -CONFIG_CPU_S3C2410=y -CONFIG_CPU_S3C2410_DMA=y -CONFIG_S3C2410_PM=y -CONFIG_S3C2410_GPIO=y -CONFIG_S3C2410_CLOCK=y -CONFIG_S3C2410_PWM=y - -# -# S3C2410 Machines -# -# CONFIG_ARCH_SMDK2410 is not set -# CONFIG_ARCH_H1940 is not set -# CONFIG_MACH_N30 is not set -# CONFIG_ARCH_BAST is not set -# CONFIG_MACH_OTOM is not set -# CONFIG_MACH_AML_M5900 is not set -# CONFIG_MACH_VR1000 is not set -CONFIG_MACH_QT2410=y -CONFIG_MACH_NEO1973_GTA01=y - -# -# S3C2412 Machines -# -# CONFIG_MACH_SMDK2413 is not set -# CONFIG_MACH_SMDK2412 is not set -# CONFIG_MACH_VSTMS is not set -CONFIG_CPU_S3C2440=y -CONFIG_S3C2440_DMA=y -CONFIG_S3C2440_C_FIQ=y - -# -# S3C2440 Machines -# -# CONFIG_MACH_ANUBIS is not set -# CONFIG_MACH_OSIRIS is not set -# CONFIG_MACH_RX3715 is not set -CONFIG_ARCH_S3C2440=y -# CONFIG_MACH_NEXCODER_2440 is not set -CONFIG_SMDK2440_CPU2440=y -# CONFIG_MACH_HXD8 is not set -CONFIG_MACH_NEO1973_GTA02=y -# CONFIG_NEO1973_GTA02_2440 is not set -CONFIG_CPU_S3C2442=y - -# -# S3C2442 Machines -# -CONFIG_SMDK2440_CPU2442=y - -# -# S3C2443 Machines -# -# CONFIG_MACH_SMDK2443 is not set - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_ARM920T=y -CONFIG_CPU_32v4T=y -CONFIG_CPU_ABRT_EV4T=y -CONFIG_CPU_CACHE_V4WT=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_COPY_V4WB=y -CONFIG_CPU_TLB_V4WBI=y -CONFIG_CPU_CP15=y -CONFIG_CPU_CP15_MMU=y - -# -# Processor Features -# -CONFIG_ARM_THUMB=y -# CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_WRITETHROUGH is not set -# CONFIG_OUTER_CACHE is not set - -# -# Bus support -# -# CONFIG_PCI_SYSCALL is not set -# CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCCARD is not set - -# -# Kernel Features -# -# CONFIG_TICK_ONESHOT is not set -CONFIG_PREEMPT=y -CONFIG_NO_IDLE_HZ=y -CONFIG_HZ=200 -CONFIG_AEABI=y -CONFIG_OABI_COMPAT=y -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_VIRT_TO_BUS=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="unused -- bootloader passes ATAG list" -# CONFIG_XIP_KERNEL is not set -CONFIG_KEXEC=y -CONFIG_ATAGS_PROC=y - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_NWFPE_XP is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set - -# -# Power management options -# -CONFIG_PM=y -CONFIG_PM_LEGACY=y -CONFIG_PM_DEBUG=y -# CONFIG_PM_VERBOSE is not set -CONFIG_PM_SLEEP=y -CONFIG_SUSPEND_UP_POSSIBLE=y -CONFIG_SUSPEND=y -CONFIG_APM_EMULATION=y - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -CONFIG_XFRM_MIGRATE=y -CONFIG_NET_KEY=m -CONFIG_NET_KEY_MIGRATE=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_ASK_IP_FIB_HASH=y -# CONFIG_IP_FIB_TRIE is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -# CONFIG_IP_ROUTE_VERBOSE is not set -CONFIG_IP_PNP=y -# CONFIG_IP_PNP_DHCP is not set -# CONFIG_IP_PNP_BOOTP is not set -# CONFIG_IP_PNP_RARP is not set -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE=m -# CONFIG_NET_IPGRE_BROADCAST is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -# CONFIG_INET_LRO is not set -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -CONFIG_TCP_MD5SIG=y -# CONFIG_IP_VS is not set -CONFIG_IPV6=m -# CONFIG_IPV6_PRIVACY is not set -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=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 is not set -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -# CONFIG_NETFILTER_XT_MATCH_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_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -# CONFIG_NETFILTER_XT_MATCH_TIME is not set -# 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 is not set -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -# CONFIG_NF_NAT_AMANDA is not set -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -# CONFIG_IP_NF_RAW is not set -# CONFIG_IP_NF_ARPTABLES is not set - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -# CONFIG_IP6_NF_QUEUE is not set -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -# CONFIG_IP6_NF_RAW is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -CONFIG_NET_SCH_CBQ=m -CONFIG_NET_SCH_HTB=m -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_PRIO=m -# CONFIG_NET_SCH_RR is not set -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_INGRESS=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -# CONFIG_NET_EMATCH is not set -# CONFIG_NET_CLS_ACT is not set -# CONFIG_NET_CLS_POLICE is not set -# CONFIG_NET_CLS_IND is not set -CONFIG_NET_SCH_FIFO=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -# CONFIG_BT_HCIBTSDIO is not set -# CONFIG_BT_HCIUART is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_AF_RXRPC is not set -CONFIG_FIB_RULES=y - -# -# Wireless -# -# CONFIG_CFG80211 is not set -CONFIG_WIRELESS_EXT=y -# CONFIG_MAC80211 is not set -# CONFIG_IEEE80211 is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_MTD_OOPS is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -CONFIG_MTD_ABSENT=y - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -CONFIG_MTD_PHYSMAP=y -CONFIG_MTD_PHYSMAP_START=0x8000000 -CONFIG_MTD_PHYSMAP_LEN=0 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_M25P80 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_VERIFY_WRITE=y -# CONFIG_MTD_NAND_ECC_SMC is not set -# CONFIG_MTD_NAND_MUSEUM_IDS is not set -CONFIG_MTD_NAND_IDS=y -CONFIG_MTD_NAND_S3C2410=y -# CONFIG_MTD_NAND_S3C2410_DEBUG is not set -CONFIG_MTD_NAND_S3C2410_HWECC=y -# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_NAND_NANDSIM is not set -# CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_ALAUDA is not set -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_PNP=y -CONFIG_PNP_DEBUG=y - -# -# Protocols -# -# CONFIG_PNPACPI is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_UB=m -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -CONFIG_MISC_DEVICES=y -# CONFIG_EEPROM_93CX6 is not set -# CONFIG_IDE is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m -CONFIG_SCSI_DMA=y -# CONFIG_SCSI_TGT is not set -# CONFIG_SCSI_NETLINK is not set -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=m -# CONFIG_CHR_DEV_ST is not set -# CONFIG_CHR_DEV_OSST is not set -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -# CONFIG_CHR_DEV_SCH is not set - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -# CONFIG_SCSI_MULTI_LUN is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -CONFIG_SCSI_SCAN_ASYNC=y -CONFIG_SCSI_WAIT_SCAN=m - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -# CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set -# CONFIG_SCSI_SRP_ATTRS is not set -CONFIG_SCSI_LOWLEVEL=y -# CONFIG_ISCSI_TCP is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -CONFIG_TUN=m -# CONFIG_VETH is not set -# CONFIG_NET_SB1000 is not set -# CONFIG_PHYLIB is not set -CONFIG_NET_ETHERNET=y -CONFIG_MII=y -# CONFIG_AX88796 is not set -# CONFIG_SMC91X is not set -# CONFIG_DM9000 is not set -# CONFIG_IBM_NEW_EMAC_ZMII is not set -# CONFIG_IBM_NEW_EMAC_RGMII is not set -# CONFIG_IBM_NEW_EMAC_TAH is not set -# CONFIG_IBM_NEW_EMAC_EMAC4 is not set -CONFIG_NET_PCI=y -# CONFIG_B44 is not set -CONFIG_CS89x0=m -# CONFIG_NETDEV_1000 is not set -# CONFIG_NETDEV_10000 is not set - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET=y -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -# CONFIG_WAN is not set -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -# CONFIG_PPPOE is not set -# CONFIG_PPPOL2TP is not set -# CONFIG_SLIP is not set -CONFIG_SLHC=m -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_POLLDEV is not set - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=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=y -CONFIG_INPUT_EVBUG=m - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_NEWTON is not set -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_KEYBOARD_GPIO=m -CONFIG_KEYBOARD_NEO1973=y -CONFIG_KEYBOARD_QT2410=y -CONFIG_INPUT_MOUSE=y -# CONFIG_MOUSE_PS2 is not set -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_APPLETOUCH is not set -# CONFIG_MOUSE_VSXXXAA is not set -# CONFIG_MOUSE_GPIO is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_FILTER=y -CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y -CONFIG_TOUCHSCREEN_FILTER_MEAN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -CONFIG_TOUCHSCREEN_S3C2410=y -# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_MK712 is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_UCB1400 is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_ATI_REMOTE is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -CONFIG_INPUT_UINPUT=m -CONFIG_INPUT_LIS302DL=y - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -# CONFIG_SERIO_SERPORT is not set -# CONFIG_SERIO_RAW is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_NR_TTY_DEVICES=4 -CONFIG_HW_CONSOLE=y -CONFIG_VT_HW_CONSOLE_BINDING=y -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_S3C2410=y -CONFIG_SERIAL_S3C2410_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_IPMI_HANDLER is not set -# CONFIG_HW_RANDOM is not set -# CONFIG_NVRAM is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y - -# -# I2C Algorithms -# -# CONFIG_I2C_ALGOBIT is not set -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set - -# -# I2C Hardware Bus support -# -# CONFIG_I2C_GPIO is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PARPORT_LIGHT is not set -CONFIG_I2C_S3C2410=y -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Miscellaneous I2C Chip support -# -# CONFIG_SENSORS_DS1337 is not set -# CONFIG_SENSORS_DS1374 is not set -# CONFIG_DS1682 is not set -# CONFIG_SENSORS_EEPROM is not set -CONFIG_SENSORS_PCF50606=y -CONFIG_SENSORS_PCF50633=y -# CONFIG_SENSORS_PCF8574 is not set -# CONFIG_SENSORS_PCA9539 is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_SENSORS_MAX6875 is not set -# CONFIG_SENSORS_TSL2550 is not set -CONFIG_SENSORS_TSL256X=m -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -CONFIG_SPI_BITBANG=y -CONFIG_SPI_S3C24XX=y -CONFIG_SPI_S3C24XX_GPIO=y - -# -# SPI Protocol Masters -# -# CONFIG_SPI_AT25 is not set -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_W1 is not set -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -# CONFIG_PDA_POWER is not set -CONFIG_APM_POWER=y -# CONFIG_BATTERY_DS2760 is not set -CONFIG_BATTERY_BQ27000_HDQ=y -CONFIG_GTA02_HDQ=y -# CONFIG_HWMON is not set -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_S3C2410_WATCHDOG=m - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set - -# -# Sonics Silicon Backplane -# -CONFIG_SSB_POSSIBLE=y -# CONFIG_SSB is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_SM501 is not set -CONFIG_MFD_GLAMO=y -CONFIG_MFD_GLAMO_FB=y -CONFIG_MFD_GLAMO_SPI_GPIO=y -CONFIG_MFD_GLAMO_SPI_FB=y -CONFIG_MFD_GLAMO_MCI=y - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -CONFIG_DAB=y -# CONFIG_USB_DABUSB is not set - -# -# Graphics support -# -# CONFIG_VGASTATE is not set -# CONFIG_VIDEO_OUTPUT_CONTROL is not set -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -# CONFIG_FB_DDC is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set -# CONFIG_FB_SYS_FILLRECT is not set -# CONFIG_FB_SYS_COPYAREA is not set -# CONFIG_FB_SYS_IMAGEBLIT is not set -# CONFIG_FB_SYS_FOPS is not set -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -# CONFIG_FB_BACKLIGHT is not set -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_UVESA is not set -# CONFIG_FB_S1D13XXX is not set -CONFIG_FB_S3C2410=y -# CONFIG_FB_S3C2410_DEBUG is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y -# CONFIG_LCD_LTV350QV is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_CORGI is not set -CONFIG_BACKLIGHT_GTA01=y - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -CONFIG_DISPLAY_JBT6K74=y - -# -# Console display driver support -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -CONFIG_FONTS=y -# CONFIG_FONT_8x8 is not set -# CONFIG_FONT_8x16 is not set -CONFIG_FONT_6x11=y -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -# CONFIG_FONT_MINI_4x6 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=y - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# - -# -# SPI devices -# - -# -# USB devices -# -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_CAIAQ is not set - -# -# System on Chip audio support -# -CONFIG_SND_SOC=m -CONFIG_SND_S3C24XX_SOC=m -CONFIG_SND_S3C24XX_SOC_I2S=m -CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m -CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=m - -# -# SoC Audio support for SuperH -# -CONFIG_SND_SOC_WM8753=m - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set -# CONFIG_HIDRAW is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -# CONFIG_USB_HIDINPUT_POWERBOOK is not set -# CONFIG_HID_FF is not set -# CONFIG_USB_HIDDEV is not set - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -# CONFIG_USB_ARCH_HAS_EHCI is not set -CONFIG_USB=y -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -CONFIG_USB_DEVICE_CLASS=y -# CONFIG_USB_DYNAMIC_MINORS is not set -CONFIG_USB_SUSPEND=y -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_ISP116X_HCD is not set -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -# CONFIG_USB_SL811_HCD 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=m -# CONFIG_USB_STORAGE_DEBUG is not set -CONFIG_USB_STORAGE_DATAFAB=y -CONFIG_USB_STORAGE_FREECOM=y -# CONFIG_USB_STORAGE_ISD200 is not set -CONFIG_USB_STORAGE_DPCM=y -CONFIG_USB_STORAGE_USBAT=y -CONFIG_USB_STORAGE_SDDR09=y -CONFIG_USB_STORAGE_SDDR55=y -CONFIG_USB_STORAGE_JUMPSHOT=y -CONFIG_USB_STORAGE_ALAUDA=y -CONFIG_USB_STORAGE_KARMA=y -CONFIG_USB_LIBUSUAL=y - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -CONFIG_USB_MON=y - -# -# USB port drivers -# - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_AIRCABLE=m -CONFIG_USB_SERIAL_AIRPRIME=m -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -# CONFIG_USB_SERIAL_CH341 is not set -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=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG is not set -CONFIG_USB_EZUSB=y - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_AUERSWALD is not set -# CONFIG_USB_RIO500 is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -CONFIG_USB_BERRY_CHARGE=m -# CONFIG_USB_LED is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_PHIDGET is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_FTDI_ELAN is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_USB_LD is not set -CONFIG_USB_TRANCEVIBRATOR=m -CONFIG_USB_IOWARRIOR=m -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -# CONFIG_USB_GADGET_AMD5536UDC is not set -# CONFIG_USB_GADGET_ATMEL_USBA is not set -# CONFIG_USB_GADGET_FSL_USB2 is not set -# CONFIG_USB_GADGET_NET2280 is not set -# CONFIG_USB_GADGET_PXA2XX is not set -# CONFIG_USB_GADGET_M66592 is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -CONFIG_USB_GADGET_S3C2410=y -CONFIG_USB_S3C2410=y -# CONFIG_USB_S3C2410_DEBUG is not set -# CONFIG_USB_GADGET_AT91 is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=y -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set - -# -# SDIO support -# -CONFIG_SDIO=y -CONFIG_SDIO_S3C24XX=y -CONFIG_SDIO_S3C24XX_DMA=y -CONFIG_SDIO_AR6000_WLAN=y -CONFIG_MMC=y -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_UNSAFE_RESUME=y - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_BOUNCE=y -# CONFIG_SDIO_UART is not set - -# -# MMC/SD Host Controller Drivers -# -# CONFIG_MMC_SPI is not set -CONFIG_MMC_S3C=y -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y - -# -# LED drivers -# -CONFIG_LEDS_S3C24XX=m -# CONFIG_LEDS_GPIO is not set -CONFIG_LEDS_NEO1973_VIBRATOR=y -CONFIG_LEDS_NEO1973_GTA02=y - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_DEBUG=y - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -# CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1374 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_X1205 is not set -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set - -# -# SPI RTC drivers -# -# CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_CMOS is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T59 is not set -# CONFIG_RTC_DRV_V3020 is not set - -# -# on-CPU RTC drivers -# -CONFIG_RTC_DRV_S3C=m - -# -# File systems -# -CONFIG_EXT2_FS=m -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT2_FS_XIP is not set -CONFIG_EXT3_FS=y -# CONFIG_EXT3_FS_XATTR is not set -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_MINIX_FS is not set -CONFIG_ROMFS_FS=y -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -# CONFIG_QUOTA is not set -CONFIG_DNOTIFY=y -# CONFIG_AUTOFS_FS is not set -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -# CONFIG_ZISOFS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_TMPFS_POSIX_ACL is not set -# CONFIG_HUGETLB_PAGE is not set -CONFIG_CONFIGFS_FS=m - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_YAFFS_FS=y -CONFIG_YAFFS_YAFFS1=y -CONFIG_YAFFS_9BYTE_TAGS=y -CONFIG_YAFFS_YAFFS2=y -CONFIG_YAFFS_AUTO_YAFFS2=y -# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set -CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10 -# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set -# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set -CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -CONFIG_JFFS2_SUMMARY=y -# CONFIG_JFFS2_FS_XATTR is not set -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -# CONFIG_JFFS2_LZO is not set -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -CONFIG_CRAMFS=y -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -CONFIG_NFS_V4=y -# CONFIG_NFS_DIRECTIO is not set -CONFIG_NFSD=m -CONFIG_NFSD_V3=y -# CONFIG_NFSD_V3_ACL is not set -CONFIG_NFSD_V4=y -CONFIG_NFSD_TCP=y -CONFIG_ROOT_NFS=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -# CONFIG_SUNRPC_BIND34 is not set -CONFIG_RPCSEC_GSS_KRB5=y -# CONFIG_RPCSEC_GSS_SPKM3 is not set -# CONFIG_SMB_FS is not set -CONFIG_CIFS=m -# CONFIG_CIFS_STATS is not set -CONFIG_CIFS_WEAK_PW_HASH=y -# CONFIG_CIFS_XATTR is not set -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -CONFIG_NLS_CODEPAGE_850=m -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -CONFIG_NLS_UTF8=m -# CONFIG_DLM is not set -CONFIG_INSTRUMENTATION=y -# CONFIG_PROFILING is not set -# CONFIG_MARKERS is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_WARN_DEPRECATED=y -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_MAGIC_SYSRQ=y -# CONFIG_UNUSED_SYMBOLS is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -CONFIG_DETECT_SOFTLOCKUP=y -# CONFIG_SCHED_DEBUG is not set -# CONFIG_SCHEDSTATS is not set -CONFIG_TIMER_STATS=y -# CONFIG_DEBUG_SLAB is not set -CONFIG_DEBUG_PREEMPT=y -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_RT_MUTEX_TESTER is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_LIST is not set -# CONFIG_DEBUG_SG is not set -CONFIG_FRAME_POINTER=y -CONFIG_FORCED_INLINING=y -# 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 -CONFIG_DEBUG_S3C_UART=2 - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA256=m -CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_GF128MUL=m -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_LRW=m -# CONFIG_CRYPTO_XTS is not set -# CONFIG_CRYPTO_CRYPTD is not set -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -# CONFIG_CRYPTO_SEED is not set -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_TEST=m -# CONFIG_CRYPTO_AUTHENC is not set -CONFIG_CRYPTO_HW=y - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -# CONFIG_CRC_ITU_T is not set -CONFIG_CRC32=y -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=m -CONFIG_ZLIB_INFLATE=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_DMA=y diff --git a/packages/linux/linux-openmoko-devel/del-hardcoded-led-behaviour.patch b/packages/linux/linux-openmoko-devel/del-hardcoded-led-behaviour.patch deleted file mode 100644 index b2d091adbe..0000000000 --- a/packages/linux/linux-openmoko-devel/del-hardcoded-led-behaviour.patch +++ /dev/null @@ -1,16 +0,0 @@ -Index: git/arch/arm/mach-s3c2440/mach-gta02.c -=================================================================== ---- git.orig/arch/arm/mach-s3c2440/mach-gta02.c -+++ git/arch/arm/mach-s3c2440/mach-gta02.c -@@ -471,11 +471,9 @@ static int pmu_callback(struct device *d - break; - case PMU_EVT_CHARGER_IDLE: - /* printk(KERN_ERR"PMU_EVT_CHARGER_IDLE\n"); */ -- neo1973_gpb_setpin(GTA02_GPIO_AUX_LED, 0); - break; - case PMU_EVT_CHARGER_ACTIVE: - /* printk(KERN_ERR"PMU_EVT_CHARGER_ACTIVE\n"); */ -- neo1973_gpb_setpin(GTA02_GPIO_AUX_LED, 1); - break; - default: - break; diff --git a/packages/linux/linux-openmoko-devel/fix-defconfig-gta01.patch b/packages/linux/linux-openmoko-devel/fix-defconfig-gta01.patch deleted file mode 100644 index ccf7dfd233..0000000000 --- a/packages/linux/linux-openmoko-devel/fix-defconfig-gta01.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff -Nru a/defconfig-2.6.24 b/defconfig-2.6.24 ---- a/defconfig-2.6.24 2008-06-15 19:24:36.000000000 +0200 -+++ b/defconfig-2.6.24 2008-06-15 19:24:56.000000000 +0200 -@@ -163,7 +163,7 @@ - # - # CONFIG_S3C2410_PM_DEBUG is not set - # CONFIG_S3C2410_PM_CHECK is not set --CONFIG_S3C_LOWLEVEL_UART_PORT=2 -+CONFIG_S3C_LOWLEVEL_UART_PORT=0 - - # - # S3C2400 Machines -@@ -726,7 +726,7 @@ - # CONFIG_MTD_NAND_MUSEUM_IDS is not set - CONFIG_MTD_NAND_IDS=y - CONFIG_MTD_NAND_S3C2410=y --CONFIG_MTD_NAND_S3C2410_DEBUG=y -+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set - CONFIG_MTD_NAND_S3C2410_HWECC=y - # CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set - # CONFIG_MTD_NAND_DISKONCHIP is not set -@@ -1757,7 +1757,7 @@ - # CONFIG_DEBUG_LL is not set - # CONFIG_DEBUG_ICEDCC is not set - # CONFIG_DEBUG_S3C_PORT is not set --CONFIG_DEBUG_S3C_UART=2 -+CONFIG_DEBUG_S3C_UART=0 - - # - # Security options diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb index 9c14ebfa66..f8a315f558 100644 --- a/packages/linux/linux-openmoko-devel_git.bb +++ b/packages/linux/linux-openmoko-devel_git.bb @@ -14,14 +14,13 @@ PR = "r2" KERNEL_IMAGETYPE = "uImage" UBOOT_ENTRYPOINT = "30008000" -SRC_URI = "git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy" +SRC_URI = "\ + git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy \ + file://defconfig-oe" S = "${WORKDIR}/git" -SRC_URI_append-om-gta02 = " file://del-hardcoded-led-behaviour.patch;patch=1" -SRC_URI += "file://defconfig-${MACHINE}" - ############################################################## -# kernel image resides on a seperate flash partition (for now) +# kernel image resides on a seperate flash partition # FILES_kernel-image = "" ALLOW_EMPTY = "1" @@ -45,6 +44,11 @@ module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753" module_autoload_s3cmci = "s3cmci" do_configure_prepend() { - cp ${WORKDIR}/defconfig-${MACHINE} ${WORKDIR}/defconfig + install -m 0644 ${WORKDIR}/defconfig-oe ${WORKDIR}/defconfig + if [ ${MACHINE} == "om-gta01" ]; then + echo -n "fixing up configuration for Openmoko GTA01..." + sed -i -e s,CONFIG_S3C_LOWLEVEL_UART_PORT=2,CONFIG_S3C_LOWLEVEL_UART_PORT=0, ${WORKDIR}/defconfig + sed -i -e s,CONFIG_DEBUG_S3C_UART=2,CONFIG_DEBUG_S3C_UART=0, ${WORKDIR}/defconfig + echo "done" + fi } - diff --git a/packages/linux/linux-openmoko_2.6.24+git.bb b/packages/linux/linux-openmoko_2.6.24+git.bb index 88ea00a56c..46f80898bf 100644 --- a/packages/linux/linux-openmoko_2.6.24+git.bb +++ b/packages/linux/linux-openmoko_2.6.24+git.bb @@ -3,8 +3,7 @@ require linux-openmoko.inc DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ Openmoko" -PE = "1" -PV = "${KERNEL_RELEASE}+git${SRCREV}" +PV = "${KERNEL_RELEASE}+gitr${SRCREV}" PR = "r0" SRC_URI = "git://git.openmoko.org/git/kernel.git;protocol=git;branch=stable" -- cgit v1.2.3 From 06e686c1c8aee0ed4d9cdc6cdc39caf9ee5ca6ec Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 11:56:22 +0000 Subject: neuros-pkggen: update sources --- packages/neuros-pkggen/files/package.c | 13 +++++-------- packages/neuros-pkggen/files/package.h | 19 ++++++++----------- packages/neuros-pkggen/neuros-pkggen-native.bb | 2 +- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/packages/neuros-pkggen/files/package.c b/packages/neuros-pkggen/files/package.c index 853d4384db..70f219514d 100644 --- a/packages/neuros-pkggen/files/package.c +++ b/packages/neuros-pkggen/files/package.c @@ -1,12 +1,9 @@ /* - * Copyright(C) 2005 Neuros Technology International LLC. - * + * Copyright (C) 2006 - 2008 Neuros Technology LLC. * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; only support version 2 of the License. * * This program is distributed in the hope that, in addition to its * original purpose to support Neuros hardware, it will be useful @@ -380,7 +377,7 @@ int main(int argc, char *argv[]) package_header_t *phd = &p_head; struct stat buf; - printf("\npackage tool version %s ", VERSION); + printf("\npackage tool version %s \n", VERSION); strncpy((char *)phd->p_name, argv[1], NAMELEN-1); if ((fp_w = fopen((char *)phd->p_name, "wb+")) == NULL) diff --git a/packages/neuros-pkggen/files/package.h b/packages/neuros-pkggen/files/package.h index 225c53d129..b1178dcb18 100644 --- a/packages/neuros-pkggen/files/package.h +++ b/packages/neuros-pkggen/files/package.h @@ -1,12 +1,9 @@ /* - * Copyright(C) 2005 Neuros Technology International LLC. - * + * Copyright (C) 2006 - 2008 Neuros Technology LLC. * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; only support version 2 of the License. * * This program is distributed in the hope that, in addition to its * original purpose to support Neuros hardware, it will be useful @@ -51,7 +48,7 @@ #define IH_TYPE_ROOTFS 10 /* addr in flash */ -#define UBOOT_ADDR_START 0x00018000 +#define UBOOT_ADDR_START 0x000C0000 #define UBOOT_SIZE (1*1024*1024) #define UBOOT_ADDR_END (UBOOT_ADDR_START+UBOOT_SIZE-1) #define KERNEL_ADDR_START (UBOOT_ADDR_END+1) @@ -61,9 +58,9 @@ #define ROOTFS_ADDR_END (256*1024*1024 - 1) #define UBOOT_FILE_NAME "u-boot.bin" -#define KERNEL_FILE_NAME "kernel.img" -#define ROOTFS_FILE_NAME "rootfs.img" -#define SCRIPT_FILE_NAME "env.img" +#define KERNEL_FILE_NAME "uImage.jffs2" +#define ROOTFS_FILE_NAME "rootfs.yaffs2" +#define SCRIPT_FILE_NAME "default_env.img" #define UBOOT_VER_FILE "u-boot.version" #define KERNEL_VER_FILE "uImage.version" diff --git a/packages/neuros-pkggen/neuros-pkggen-native.bb b/packages/neuros-pkggen/neuros-pkggen-native.bb index 001b3a863a..2c5b5c40e2 100644 --- a/packages/neuros-pkggen/neuros-pkggen-native.bb +++ b/packages/neuros-pkggen/neuros-pkggen-native.bb @@ -1,6 +1,6 @@ DESCRIPTION = "Tool to generate ready to flash .pkg files for neuros machines" LICENSE = "GPLv2" -PR = "r1" +PR = "r2" inherit native -- cgit v1.2.3 From 8708d361c3c725f7eedd04e730c68528e4390751 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 12:10:36 +0000 Subject: neuros.inc: don't use lzo compression for kernel jffs2 partition, the current uboot config doesn't like it --- conf/machine/include/neuros.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/machine/include/neuros.inc b/conf/machine/include/neuros.inc index d744bf9082..96e2f1bd25 100644 --- a/conf/machine/include/neuros.inc +++ b/conf/machine/include/neuros.inc @@ -16,7 +16,7 @@ neuros_make_installkit () { cp ${IMAGE_NAME}.rootfs.yaffs2 ${IMAGE_NAME}-installkit/rootfs.yaffs2 cd ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-installkit/ - mkfs.jffs2 -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n + mkfs.jffs2 -x lzo -d ./temp -o uImage.jffs2 -e 0x20000 -s 0x800 -n echo "${MACHINE}" > rootfs.version echo "${MACHINE}" > u-boot.version echo "${MACHINE}" > uImage.version -- cgit v1.2.3 From 61c97701838acde5a7e6e2b25a0cd92b8dda8908 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Mon, 14 Jul 2008 15:57:53 +0000 Subject: pidgin updated to version 2.4.3: * ICQ works again * pidgin-cross-python.patch: worked-around python cross include clash --- packages/pidgin/pidgin/pidgin-cross-python.patch | 16 ++++++++++++++++ packages/pidgin/pidgin_2.4.2.bb | 17 ----------------- packages/pidgin/pidgin_2.4.3.bb | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 packages/pidgin/pidgin/pidgin-cross-python.patch delete mode 100644 packages/pidgin/pidgin_2.4.2.bb create mode 100644 packages/pidgin/pidgin_2.4.3.bb diff --git a/packages/pidgin/pidgin/pidgin-cross-python.patch b/packages/pidgin/pidgin/pidgin-cross-python.patch new file mode 100644 index 0000000000..ca88502b67 --- /dev/null +++ b/packages/pidgin/pidgin/pidgin-cross-python.patch @@ -0,0 +1,16 @@ +Index: pidgin-2.4.3/configure.ac +=================================================================== +--- pidgin-2.4.3.orig/configure.ac 2008-07-14 13:13:16.000000000 +0000 ++++ pidgin-2.4.3/configure.ac 2008-07-14 13:34:12.000000000 +0000 +@@ -1350,8 +1350,9 @@ + AC_CHECK_LIB(pthread, pthread_create, ) + AC_CHECK_LIB(util, openpty, ) + AC_CHECK_LIB(db, dbopen, ) +- PY_LIBS="-lpython$PY_VERSION -L$PY_EXEC_PREFIX/lib/python$PY_VERSION/config" +- PY_CFLAGS="-I$PY_PREFIX/include/python$PY_VERSION" ++ m4_pattern_allow([^PKG_CONFIG_SYSROOT_DIR$]) ++ PY_LIBS="-lpython$PY_VERSION -L$PKG_CONFIG_SYSROOT_DIR/usr/lib/python$PY_VERSION/config" ++ PY_CFLAGS="-I$PKG_CONFIG_SYSROOT_DIR/usr/include/python$PY_VERSION" + AC_DEFINE(USE_PYTHON, [1], [Define if python headers are available.]) + AC_MSG_RESULT(ok) + else diff --git a/packages/pidgin/pidgin_2.4.2.bb b/packages/pidgin/pidgin_2.4.2.bb deleted file mode 100644 index 99b4563523..0000000000 --- a/packages/pidgin/pidgin_2.4.2.bb +++ /dev/null @@ -1,17 +0,0 @@ -require pidgin.inc - -DEFAULT_PREFERENCE = "-1" - -SRC_URI = "${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2 \ - file://sanitize-configure.ac.patch;patch=1 \ - file://gconf-no-errors.patch;patch=1 \ - file://pidgin.desktop-set-icon.patch;patch=1 \ - file://purple-OE-branding.patch;patch=1 \ - " - -EXTRA_OECONF += " --disable-gtkspell \ - --disable-meanwhile \ - --disable-nm \ - " - -PR = "r0" diff --git a/packages/pidgin/pidgin_2.4.3.bb b/packages/pidgin/pidgin_2.4.3.bb new file mode 100644 index 0000000000..37ecbd5873 --- /dev/null +++ b/packages/pidgin/pidgin_2.4.3.bb @@ -0,0 +1,18 @@ +require pidgin.inc + +DEFAULT_PREFERENCE = "-1" + +SRC_URI = "${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2 \ + file://sanitize-configure.ac.patch;patch=1 \ + file://gconf-no-errors.patch;patch=1 \ + file://pidgin.desktop-set-icon.patch;patch=1 \ + file://purple-OE-branding.patch;patch=1 \ + file://pidgin-cross-python.patch;patch=1 \ + " + +EXTRA_OECONF += " --disable-gtkspell \ + --disable-meanwhile \ + --disable-nm \ + " + +PR = "r0" -- cgit v1.2.3 From a98f27b0cb171675d2eba5be2b3fb6e94df3184e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 14 Jul 2008 16:34:15 +0000 Subject: linux omap2 git: add patch that should fix hang on serial --- .../linux/linux-omap2-git/beagleboard/serialfix.diff | 18 ++++++++++++++++++ packages/linux/linux-omap2_git.bb | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-omap2-git/beagleboard/serialfix.diff diff --git a/packages/linux/linux-omap2-git/beagleboard/serialfix.diff b/packages/linux/linux-omap2-git/beagleboard/serialfix.diff new file mode 100644 index 0000000000..74c2ebaa69 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/serialfix.diff @@ -0,0 +1,18 @@ +--- /tmp/pm34xx.c 2008-07-14 18:09:08.000000000 +0200 ++++ git/arch/arm/mach-omap2/pm34xx.c 2008-07-14 18:09:42.453198000 +0200 +@@ -398,13 +398,13 @@ + INT_34XX_PRCM_MPU_IRQ); + goto err1; + } +- ++/* + ret = pwrdm_for_each(pwrdms_setup); + if (ret) { + printk(KERN_ERR "Failed to setup powerdomains\n"); + goto err2; + } +- ++*/ + mpu_pwrdm = pwrdm_lookup("mpu_pwrdm"); + if (mpu_pwrdm == NULL) { + printk(KERN_ERR "Failed to get mpu_pwrdm\n"); diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 69d3415faf..53bcd297d9 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" -PR = "r43" +PR = "r44" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -29,6 +29,7 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://06-ensure-fclk.diff;patch=1 \ file://07-set-burst-size.diff;patch=1 \ file://cache-display-fix.patch;patch=1 \ + file://serialfix.diff;patch=1 \ " SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ -- cgit v1.2.3 From a60238abb499861741ae7f2de9fc7a65526e8a06 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 07:21:09 +0000 Subject: linux-neuros: bump SRCREV --- packages/linux/linux-neuros_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-neuros_git.bb b/packages/linux/linux-neuros_git.bb index dc48e92e53..1a5bd607fa 100644 --- a/packages/linux/linux-neuros_git.bb +++ b/packages/linux/linux-neuros_git.bb @@ -2,10 +2,10 @@ require linux.inc DESCRIPTION = "Linux kernel for Neuros OSD devices" -SRCREV = "765db0a3a81756207809f982d65548bd4b3159e3" +SRCREV = "a4701816600fbfc6d3144fa169a27a57d05d2682" PV = "2.6.23-${PR}+git${SRCREV}" -PR = "r5" +PR = "r6" COMPATIBLE_MACHINE = "(neuros-osd|neuros-osd2)" -- cgit v1.2.3 From 72f2ae08c4f099602da7f670c7431fb85f2e98db Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 07:22:46 +0000 Subject: u-boot: bump SRCREV for neuros-osd2 --- packages/u-boot/u-boot_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index 81842921cc..df8b43014c 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,9 +1,9 @@ require u-boot.inc -PR="r10" +PR="r11" SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" SRCREV_beagleboard = "bde63587622c4b830a27d1ddf7265843de9e994f" -SRCREV_neuros-osd2 = "482dfe48845192c7f810bccfc93db93d0f1654f7" +SRCREV_neuros-osd2 = "70ee511d37ca99afee00edc27be36d0af2832bbc" SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git " SRC_URI_sequoia = "git://www.denx.de/git/u-boot.git;protocol=git;tag=cf3b41e0c1111dbb865b6e34e9f3c3d3145a6093 " -- cgit v1.2.3 From 4b897fcb15a36a8ad42d03764a3c7b041b116a4b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 07:39:01 +0000 Subject: rt73-firmware: add 1.8 --- packages/rt2x00/rt73-firmware_1.8.bb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 packages/rt2x00/rt73-firmware_1.8.bb diff --git a/packages/rt2x00/rt73-firmware_1.8.bb b/packages/rt2x00/rt73-firmware_1.8.bb new file mode 100644 index 0000000000..288acfd68f --- /dev/null +++ b/packages/rt2x00/rt73-firmware_1.8.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Firmware for rt73 based USB wifi adaptors" +LICENSE = "unknown" + +SRC_URI = "http://www.ralinktech.com.tw/data/RT71W_Firmware_V${PV}.zip" + +S = "${WORKDIR}/RT71W_Firmware_V${PV}" + +do_install() { + install -d ${D}/${base_libdir}/firmware + install -m 0644 rt73.bin ${D}/${base_libdir}/firmware/ +} + +FILES_${PN} = "${base_libdir}/firmware/" +PACKAGE_ARCH = "all" -- cgit v1.2.3 From 236ed784d3bd1b7975cff35fc8494094b3bfd46f Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 07:42:25 +0000 Subject: zd1211-firmware: add 1.4 --- packages/zd1211/zd1211-firmware_1.3.bb | 2 +- packages/zd1211/zd1211-firmware_1.4.bb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/zd1211/zd1211-firmware_1.4.bb diff --git a/packages/zd1211/zd1211-firmware_1.3.bb b/packages/zd1211/zd1211-firmware_1.3.bb index e6f006971d..372135d471 100644 --- a/packages/zd1211/zd1211-firmware_1.3.bb +++ b/packages/zd1211/zd1211-firmware_1.3.bb @@ -4,7 +4,7 @@ SECTION = "net" PRIORITY = "optional" LICENSE = "GPL" -SRC_URI = "${SOURCEFORGE_MIRROR}/zd1211/zd1211-firmware1.3.tar.bz2" +SRC_URI = "${SOURCEFORGE_MIRROR}/zd1211/zd1211-firmware${PV}.tar.bz2" S = "${WORKDIR}/${PN}" diff --git a/packages/zd1211/zd1211-firmware_1.4.bb b/packages/zd1211/zd1211-firmware_1.4.bb new file mode 100644 index 0000000000..b32ff2101b --- /dev/null +++ b/packages/zd1211/zd1211-firmware_1.4.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "ZyDAS ZD1211 Firmware" +HOMEPAGE = "http://zd1211.ath.cx/" +SECTION = "net" +PRIORITY = "optional" +LICENSE = "GPL" + +SRC_URI = "${SOURCEFORGE_MIRROR}/zd1211/zd1211-firmware-${PV}.tar.bz2" + +S = "${WORKDIR}/${PN}" + +do_install() { + install -d -m 0755 ${D}/lib/firmware/zd1211 + install -m 0644 ${S}/zd1211* ${D}/lib/firmware/zd1211/ +} + +FILES_${PN} = "/lib/firmware" -- cgit v1.2.3 From 1d182d63f0a92a74cc8975e65afd0e506c94a797 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 08:52:19 +0000 Subject: qtopia4core bbclass: set QT_DIR_NAME --- classes/qtopia4core.bbclass | 1 + 1 file changed, 1 insertion(+) diff --git a/classes/qtopia4core.bbclass b/classes/qtopia4core.bbclass index c6a05488ef..b5f10fa486 100644 --- a/classes/qtopia4core.bbclass +++ b/classes/qtopia4core.bbclass @@ -1,6 +1,7 @@ DEPENDS_prepend = "${@["qtopia-core ", ""][(bb.data.getVar('PN', d, 1) == 'qtopia-core')]}" inherit qmake2 +QT_DIR_NAME = "qtopia" # # override variables set by qmake-base to compile QtopiaCore apps # -- cgit v1.2.3 From f07b0542e6e677402f153d2b24a729add8d600c9 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 09:15:18 +0000 Subject: neuros-qt-plugins: add qt input driver for the neuros IR remote --- packages/neuros-public/.mtn2git_empty | 0 packages/neuros-public/neuros-qt-plugins_git.bb | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 packages/neuros-public/.mtn2git_empty create mode 100644 packages/neuros-public/neuros-qt-plugins_git.bb diff --git a/packages/neuros-public/.mtn2git_empty b/packages/neuros-public/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/neuros-public/neuros-qt-plugins_git.bb b/packages/neuros-public/neuros-qt-plugins_git.bb new file mode 100644 index 0000000000..c0e4b30b21 --- /dev/null +++ b/packages/neuros-public/neuros-qt-plugins_git.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Neuros qt-plugins" +LICENSE = "GPL" + +DEPENDS = "qt-embedded" + +inherit qtopia4core + +SRCREV = "6787bd510524155d783e1bce323fc5a14cf9ebd2" +SRC_URI = "git://git.neurostechnology.com/git/qt-plugins;protocol=git" +S = "${WORKDIR}/git/osdir" + +do_install() { + install -d ${D}/${libdir}/${QT_DIR_NAME}/plugins/inputmethods/ + install -m 0755 ${S}/build/*plugin* ${D}/${libdir}/${QT_DIR_NAME}/plugins/inputmethods/ +} + +FILES_${PN} += "${libdir}/${QT_DIR_NAME}/plugins" +FILES_${PN}-dbg += "${libdir}/${QT_DIR_NAME}/plugins/*/.debug" + -- cgit v1.2.3 From 33292f1f0025724bce20487552c52f8de5f2d0e0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 09:59:50 +0000 Subject: neuros-lib-widgets: add neuros Extra QT base widgets --- packages/neuros-public/neuros-lib-widgets_git.bb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 packages/neuros-public/neuros-lib-widgets_git.bb diff --git a/packages/neuros-public/neuros-lib-widgets_git.bb b/packages/neuros-public/neuros-lib-widgets_git.bb new file mode 100644 index 0000000000..0e1e22e6d2 --- /dev/null +++ b/packages/neuros-public/neuros-lib-widgets_git.bb @@ -0,0 +1,17 @@ +DESCRIPTION = "Neuros qt-plugins" +LICENSE = "GPL" + +DEPENDS = "qt-embedded" + +inherit qtopia4core + +SRCREV = "9988829eab1428f03f5f5dba8866b2f4da267d67" +SRC_URI = "git://git.neurostechnology.com/git/lib-widgets;protocol=git" +S = "${WORKDIR}/git/" + +do_install() { + install -d ${D}/${libdir}/ + install -m 0755 ${S}/build/lib* ${D}/${libdir} +} + + -- cgit v1.2.3 From 6f1fe5d72b6a3db1757e2c3c4badf8274c8d8d53 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 10:08:42 +0000 Subject: neuros-qt-plugin: it's an kbddriver, not an inputmethod --- packages/neuros-public/neuros-qt-plugins_git.bb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/neuros-public/neuros-qt-plugins_git.bb b/packages/neuros-public/neuros-qt-plugins_git.bb index c0e4b30b21..d0de64d945 100644 --- a/packages/neuros-public/neuros-qt-plugins_git.bb +++ b/packages/neuros-public/neuros-qt-plugins_git.bb @@ -1,6 +1,8 @@ DESCRIPTION = "Neuros qt-plugins" LICENSE = "GPL" +PR = "r1" + DEPENDS = "qt-embedded" inherit qtopia4core @@ -10,8 +12,8 @@ SRC_URI = "git://git.neurostechnology.com/git/qt-plugins;protocol=git" S = "${WORKDIR}/git/osdir" do_install() { - install -d ${D}/${libdir}/${QT_DIR_NAME}/plugins/inputmethods/ - install -m 0755 ${S}/build/*plugin* ${D}/${libdir}/${QT_DIR_NAME}/plugins/inputmethods/ + install -d ${D}/${libdir}/${QT_DIR_NAME}/plugins/kbddrivers/ + install -m 0755 ${S}/build/*plugin* ${D}/${libdir}/${QT_DIR_NAME}/plugins/kbddrivers/ } FILES_${PN} += "${libdir}/${QT_DIR_NAME}/plugins" -- cgit v1.2.3 From babee9ff4abc3839404e437858dc7f61c65b1139 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 10:30:16 +0000 Subject: codec-engine: package and stage cmem*.a --- packages/dsplink/codec-engine_2.10.bb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index f9e5757220..b26a8cbc94 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -5,7 +5,7 @@ RDEPENDS = "update-modules" inherit module -PR = "r3" +PR = "r4" PV = "2.10" # Get CE tarball from TI website, place in sources and calculate @@ -56,6 +56,18 @@ do_install() { mv ${D}/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp install -d ${D}/${base_sbindir} cd ${D} ; mv apitest apitestd multi_process multi_processd translate translated ${D}/${base_sbindir} + + install -d ${D}/${libdir} + for i in ${S}/cetools/packages/ti/sdo/linuxutils/cmem/lib/*.a ; do + install -m 0755 $i ${D}/${libdir}/ + done +} + +do_stage() { + install -d ${STAGING_LIBDIR} + for i in ${S}/cetools/packages/ti/sdo/linuxutils/cmem/lib/*.a ; do + install -m 0755 $i ${STAGING_LIBDIR}/ + done } pkg_postinst_${PN}-module () { -- cgit v1.2.3 From adbb7043b9b0ec1e056201e4ba5801a4efa61655 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 10:40:07 +0000 Subject: dsplink: package and stage dsplink.lib --- packages/dsplink/dsplink.inc | 9 +++++++++ packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 94489ee6ca..d9c3c07e02 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -101,6 +101,15 @@ do_install () { install -d ${D}/${bindir} install ${S}/gpp/BUILD/EXPORT/RELEASE/mpcsxfergpp ${D}/${bindir} install ${S}/gpp/BUILD/EXPORT/RELEASE/ringiogpp ${D}/${bindir} + + install -d ${D}/${libdir} + install -m 0755 ${S}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${D}/${libdir} +} + + +do_stage() { + install -d ${STAGING_LIBDIR} + install -m 0755 ${S}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${STAGING_LIBDIR}/ } pkg_postinst_${PN}-module () { diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index 561d26fd6b..cba9bf1f97 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r7" +PR = "r8" PE = "1" PV = "1.50" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index 7fa2c34558..d4a71b437e 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r7" +PR = "r8" PE = "1" PV = "1.51" -- cgit v1.2.3 From 884ef331b553ac6807bb5d6bf2c7c4e6cf75e7e3 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 11:04:24 +0000 Subject: u-boot env: update neuros-osd2 env --- packages/u-boot/files/neuros-osd2/default-env.ascr | 2 -- packages/u-boot/u-boot-env.bb | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/u-boot/files/neuros-osd2/default-env.ascr b/packages/u-boot/files/neuros-osd2/default-env.ascr index 965f778b44..d8453a7c41 100644 --- a/packages/u-boot/files/neuros-osd2/default-env.ascr +++ b/packages/u-boot/files/neuros-osd2/default-env.ascr @@ -31,8 +31,6 @@ setenv console console=ttyS0,115200n8 setenv mem_reserve mem=200M -setenv video_params video=davincifb:output=ntsc:format=composite - setenv ip ip=\192.168.1.100:\192.168.1.1:\192.168.1.1:\255.255.255.0:\neuros::off setenv nfs_mount_params udp,v3,rsize=4096,wsize=4096 diff --git a/packages/u-boot/u-boot-env.bb b/packages/u-boot/u-boot-env.bb index fc4d64ad78..1bee272d82 100644 --- a/packages/u-boot/u-boot-env.bb +++ b/packages/u-boot/u-boot-env.bb @@ -1,5 +1,7 @@ DESCRIPTION = "Dummy package to get uboot env image into deploy" +PR = "r1" + inherit kernel-arch SRC_URI = "file://default-env.ascr" -- cgit v1.2.3 From 69c57bbb3b7fdf5561683f2d16346d867e1da15c Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Tue, 15 Jul 2008 13:05:09 +0000 Subject: Added linux-rp-2.6.26: * based on linux-rp-2.6.25+2.6.26-rc4 (b82d34d538132713ba10d59d0209f562e276f44b) * ported sharpsl-rc-r1.patch * set DEFAULT_PREFERENCE_spitz (suspend works again) --- packages/linux/linux-rp-2.6.26/.mtn2git_empty | 0 .../linux-rp-2.6.26/binutils-buildid-arm.patch | 16 + .../connectplus-prevent-oops-HACK.patch | 17 + .../connectplus-remove-ide-HACK.patch | 12 + packages/linux/linux-rp-2.6.26/defconfig-akita | 1741 + packages/linux/linux-rp-2.6.26/defconfig-bootcdx86 | 1994 ++ packages/linux/linux-rp-2.6.26/defconfig-c7x0 | 1747 + packages/linux/linux-rp-2.6.26/defconfig-collie | 1437 + .../linux/linux-rp-2.6.26/defconfig-htcuniversal | 1308 + packages/linux/linux-rp-2.6.26/defconfig-hx2000 | 1733 + packages/linux/linux-rp-2.6.26/defconfig-poodle | 1757 + packages/linux/linux-rp-2.6.26/defconfig-qemuarm | 1582 + packages/linux/linux-rp-2.6.26/defconfig-qemux86 | 1993 ++ packages/linux/linux-rp-2.6.26/defconfig-spitz | 1834 + packages/linux/linux-rp-2.6.26/defconfig-zylonite | 1740 + .../linux-rp-2.6.26/hostap-monitor-mode.patch | 209 + .../linux/linux-rp-2.6.26/hrw-hostapcard.patch | 34 + packages/linux/linux-rp-2.6.26/htcuni-acx.patch | 33527 +++++++++++++++++++ packages/linux/linux-rp-2.6.26/htcuni.patch | 7899 +++++ .../linux/linux-rp-2.6.26/pxa-serial-hack.patch | 90 + .../linux/linux-rp-2.6.26/pxa_fb_overlay.patch | 26 + ...t-for-non-standard-xtals-to-16c950-driver.patch | 155 + packages/linux/linux-rp-2.6.26/sharpsl-rc-r1.patch | 555 + .../linux/linux-rp-2.6.26/spitz_h_rewrite.patch | 497 + .../linux/linux-rp-2.6.26/versatile-armv6.patch | 17 + packages/linux/linux-rp-2.6.26/zylonite-boot.patch | 45 + .../linux/linux-rp-2.6.26/zylonite_keypad-r0.patch | 1187 + .../linux/linux-rp-2.6.26/zylonite_mtd-r0.patch | 4093 +++ .../linux/linux-rp-2.6.26/zylonite_touch-r0.patch | 1548 + packages/linux/linux-rp_2.6.26.bb | 188 + 30 files changed, 68981 insertions(+) create mode 100644 packages/linux/linux-rp-2.6.26/.mtn2git_empty create mode 100644 packages/linux/linux-rp-2.6.26/binutils-buildid-arm.patch create mode 100644 packages/linux/linux-rp-2.6.26/connectplus-prevent-oops-HACK.patch create mode 100644 packages/linux/linux-rp-2.6.26/connectplus-remove-ide-HACK.patch create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-akita create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-bootcdx86 create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-c7x0 create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-collie create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-htcuniversal create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-hx2000 create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-poodle create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-qemuarm create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-qemux86 create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-spitz create mode 100644 packages/linux/linux-rp-2.6.26/defconfig-zylonite create mode 100644 packages/linux/linux-rp-2.6.26/hostap-monitor-mode.patch create mode 100644 packages/linux/linux-rp-2.6.26/hrw-hostapcard.patch create mode 100644 packages/linux/linux-rp-2.6.26/htcuni-acx.patch create mode 100644 packages/linux/linux-rp-2.6.26/htcuni.patch create mode 100644 packages/linux/linux-rp-2.6.26/pxa-serial-hack.patch create mode 100644 packages/linux/linux-rp-2.6.26/pxa_fb_overlay.patch create mode 100644 packages/linux/linux-rp-2.6.26/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch create mode 100644 packages/linux/linux-rp-2.6.26/sharpsl-rc-r1.patch create mode 100644 packages/linux/linux-rp-2.6.26/spitz_h_rewrite.patch create mode 100644 packages/linux/linux-rp-2.6.26/versatile-armv6.patch create mode 100644 packages/linux/linux-rp-2.6.26/zylonite-boot.patch create mode 100644 packages/linux/linux-rp-2.6.26/zylonite_keypad-r0.patch create mode 100644 packages/linux/linux-rp-2.6.26/zylonite_mtd-r0.patch create mode 100644 packages/linux/linux-rp-2.6.26/zylonite_touch-r0.patch create mode 100644 packages/linux/linux-rp_2.6.26.bb diff --git a/packages/linux/linux-rp-2.6.26/.mtn2git_empty b/packages/linux/linux-rp-2.6.26/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/linux-rp-2.6.26/binutils-buildid-arm.patch b/packages/linux/linux-rp-2.6.26/binutils-buildid-arm.patch new file mode 100644 index 0000000000..68e35e89e1 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/binutils-buildid-arm.patch @@ -0,0 +1,16 @@ +--- + arch/arm/kernel/vmlinux.lds.S | 1 + + 1 file changed, 1 insertion(+) + +Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S +=================================================================== +--- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200 ++++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200 +@@ -94,6 +94,7 @@ + TEXT_TEXT + SCHED_TEXT + LOCK_TEXT ++ *(.note.*) + #ifdef CONFIG_MMU + *(.fixup) + #endif diff --git a/packages/linux/linux-rp-2.6.26/connectplus-prevent-oops-HACK.patch b/packages/linux/linux-rp-2.6.26/connectplus-prevent-oops-HACK.patch new file mode 100644 index 0000000000..b5439c62e7 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/connectplus-prevent-oops-HACK.patch @@ -0,0 +1,17 @@ +Index: linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c +=================================================================== +--- linux-2.6.21.orig/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:45:39.000000000 +0100 ++++ linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:47:30.000000000 +0100 +@@ -2666,6 +2666,12 @@ + iface = netdev_priv(dev); + local = iface->local; + ++ if(dev->base_addr == 0) ++ { ++ printk(KERN_DEBUG "%s: IRQ before base_addr set\n", dev->name); ++ return IRQ_HANDLED; ++ } ++ + prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0); + + if (local->func->card_present && !local->func->card_present(local)) { diff --git a/packages/linux/linux-rp-2.6.26/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.26/connectplus-remove-ide-HACK.patch new file mode 100644 index 0000000000..4414b21191 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/connectplus-remove-ide-HACK.patch @@ -0,0 +1,12 @@ +Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c +=================================================================== +--- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100 ++++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100 +@@ -488,7 +488,6 @@ + PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4), + PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209), + PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e), +- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6), + PCMCIA_DEVICE_NULL, + }; + MODULE_DEVICE_TABLE(pcmcia, ide_ids); diff --git a/packages/linux/linux-rp-2.6.26/defconfig-akita b/packages/linux/linux-rp-2.6.26/defconfig-akita new file mode 100644 index 0000000000..e630a9abff --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-akita @@ -0,0 +1,1741 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:29:33 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +CONFIG_PXA_SHARPSL=y +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +# CONFIG_PXA_SHARPSL_25x is not set +CONFIG_PXA_SHARPSL_27x=y +# CONFIG_MACH_HX2750 is not set +CONFIG_MACH_AKITA=y +CONFIG_MACH_SPITZ=y +CONFIG_MACH_BORZOI=y +CONFIG_PXA27x=y +CONFIG_PXA_SHARP_Cxx00=y +CONFIG_PXA_SSP=y +# CONFIG_PXA_KEYS is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y +CONFIG_SHARP_PARAM=y +CONFIG_SHARPSL_PM=y +CONFIG_SHARP_SCOOP=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y +CONFIG_INPUT_APMPOWER=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=y +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_SHARP_SL=y +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_H1900 is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +CONFIG_MTD_NAND_SHARPSL=y +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_POWER=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_CORGI is not set +CONFIG_KEYBOARD_SPITZ=y +# CONFIG_KEYBOARD_PXA27x is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_CORGI=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_W100 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CORGI=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_AC97_CODEC is not set +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_I2S=m +CONFIG_SND_PXA2XX_SOC_SPITZ=m + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_WM8750=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +# CONFIG_AC97_BUS is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=m +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_SPITZ=y +# CONFIG_LEDS_TOSA is not set +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_IDE_DISK=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.26/defconfig-bootcdx86 new file mode 100644 index 0000000000..35e9b5cd22 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-bootcdx86 @@ -0,0 +1,1994 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:34:58 2008 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_SEMAPHORE_SLEEPERS=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_QUICKLIST=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_DMI=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_SUPPORTS_OPROFILE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_X86_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=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=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_TREE=y +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_LBD=y +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_SMP=y +CONFIG_X86_PC=y +# CONFIG_X86_ELAN is not set +# CONFIG_X86_VOYAGER is not set +# CONFIG_X86_NUMAQ is not set +# CONFIG_X86_SUMMIT is not set +# CONFIG_X86_BIGSMP is not set +# CONFIG_X86_VISWS is not set +# CONFIG_X86_GENERICARCH is not set +# CONFIG_X86_ES7000 is not set +# CONFIG_X86_VSMP is not set +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +CONFIG_M686=y +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MPSC is not set +# CONFIG_MCORE2 is not set +# CONFIG_GENERIC_CPU is not set +CONFIG_X86_GENERIC=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=7 +CONFIG_X86_XADD=y +CONFIG_X86_PPRO_FENCE=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_GOOD_APIC=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +CONFIG_HPET_TIMER=y +CONFIG_NR_CPUS=8 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_BKL=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_NONFATAL=y +CONFIG_X86_MCE_P4THERMAL=y +CONFIG_VM86=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_NR_QUICK=1 +CONFIG_VIRT_TO_BUS=y +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +# CONFIG_EFI is not set +CONFIG_IRQBALANCE=y +CONFIG_SECCOMP=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_KEXEC=y +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_HOTPLUG_CPU=y +CONFIG_COMPAT_VDSO=y + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_SMP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_HIBERNATION_SMP_POSSIBLE=y +# CONFIG_HIBERNATION is not set +CONFIG_ACPI=y +CONFIG_ACPI_SLEEP=y +# CONFIG_ACPI_PROCFS is not set +CONFIG_ACPI_PROCFS_POWER=y +CONFIG_ACPI_SYSFS_POWER=y +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +# CONFIG_ACPI_VIDEO is not set +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_ASUS is not set +# CONFIG_ACPI_TOSHIBA is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_SYSTEM=y +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_CONTAINER=y +# CONFIG_ACPI_SBS is not set +# CONFIG_APM is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_IDLE is not set + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_PCI_MSI=y +CONFIG_PCI_LEGACY=y +CONFIG_HT_IRQ=y +CONFIG_ISA_DMA_API=y +CONFIG_ISA=y +# CONFIG_EISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +CONFIG_K8_NB=y +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +# CONFIG_VIA_FIR is not set +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +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 is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y +# CONFIG_MTD is not set +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +# CONFIG_PARPORT_SERIAL is not set +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_AX88796 is not set +# CONFIG_PARPORT_1284 is not set +CONFIG_PNP=y +# CONFIG_PNP_DEBUG is not set + +# +# Protocols +# +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_FD=y +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_IBM_ASM is not set +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ASUS_LAPTOP is not set +# CONFIG_FUJITSU_LAPTOP is not set +# CONFIG_MSI_LAPTOP is not set +# CONFIG_SONY_LAPTOP is not set +# CONFIG_THINKPAD_ACPI is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_BLK_DEV_HD_IDE is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_IDEACPI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +CONFIG_BLK_DEV_CMD640=y +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_IDEPNP is not set + +# +# PCI IDE chipsets support +# +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_IDEPCI_PCIBUS_ORDER=y +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=y +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_RZ1000=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_ATIIXP is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_CS5535 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_JMICRON is not set +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_IT8213 is not set +# CONFIG_BLK_DEV_IT821X is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SIS5513 is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_TC86C001 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_BLK_DEV_IDEDMA=y +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=y +# 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_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +CONFIG_SCSI_DPT_I2O=m +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_SEAGATE is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_ULTRASTOR is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_EL3 is not set +# CONFIG_3C515 is not set +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_SMC9194=m +# CONFIG_NET_VENDOR_RACAL is not set +CONFIG_NET_TULIP=y +# CONFIG_DE2104X is not set +CONFIG_TULIP=m +CONFIG_TULIP_MWI=y +CONFIG_TULIP_MMIO=y +CONFIG_TULIP_NAPI=y +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +# CONFIG_E2100 is not set +# CONFIG_EWRK3 is not set +# CONFIG_EEXPRESS is not set +# CONFIG_EEXPRESS_PRO is not set +# CONFIG_HPLAN_PLUS is not set +# CONFIG_HPLAN is not set +# CONFIG_LP486E is not set +# CONFIG_ETH16I is not set +CONFIG_NE2000=y +# CONFIG_ZNET is not set +# CONFIG_SEEQ8005 is not set +# CONFIG_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=y +CONFIG_PCNET32=m +CONFIG_PCNET32_NAPI=y +CONFIG_AMD8111_ETH=m +CONFIG_AMD8111E_NAPI=y +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADAPTEC_STARFIRE_NAPI=y +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_FORCEDETH=m +CONFIG_FORCEDETH_NAPI=y +CONFIG_CS89x0=m +CONFIG_EEPRO100=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=y +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +CONFIG_SUNDANCE_MMIO=y +CONFIG_TLAN=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_RHINE_NAPI=y +CONFIG_SC92031=m +# CONFIG_NET_POCKET is not set +CONFIG_NETDEV_1000=y +CONFIG_ACENIC=m +CONFIG_ACENIC_OMIT_TIGON_I=y +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000_NAPI=y +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set +# CONFIG_E1000E is not set +# CONFIG_IP1000 is not set +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +CONFIG_R8169_NAPI=y +CONFIG_SIS190=m +CONFIG_SKGE=m +CONFIG_SKY2=m +CONFIG_SK98LIN=m +CONFIG_VIA_VELOCITY=m +CONFIG_TIGON3=m +CONFIG_BNX2=m +CONFIG_QLA3XXX=m +CONFIG_ATL1=m +CONFIG_NETDEV_10000=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set +# CONFIG_IXGBE is not set +# CONFIG_IXGB is not set +CONFIG_S2IO=m +# CONFIG_S2IO_NAPI is not set +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_NIU is not set +# CONFIG_MLX4_CORE is not set +# CONFIG_TEHUTI is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_LIBERTAS is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m +# CONFIG_PLX_HERMES is not set +# CONFIG_TMD_HERMES is not set +# CONFIG_NORTEL_HERMES is not set +# CONFIG_PCI_HERMES is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 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_PLX is not set +# CONFIG_HOSTAP_PCI is not set +# CONFIG_BCM43XX is not set +# CONFIG_ZD1211RW is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TABLET=y +# CONFIG_TABLET_USB_ACECAD is not set +# CONFIG_TABLET_USB_AIPTEK is not set +# CONFIG_TABLET_USB_GTCO is not set +# CONFIG_TABLET_USB_KBTAB is not set +CONFIG_TABLET_USB_WACOM=y +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_PCSPKR is not set +# CONFIG_INPUT_WISTRON_BTNS is not set +# CONFIG_INPUT_ATLAS_BTNS is not set +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_PRINTER=y +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_BATTERY_DS2760 is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB=m +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_STRADIS is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +CONFIG_AGP=m +CONFIG_AGP_ALI=m +CONFIG_AGP_ATI=m +CONFIG_AGP_AMD=m +CONFIG_AGP_AMD64=m +CONFIG_AGP_INTEL=m +CONFIG_AGP_NVIDIA=m +CONFIG_AGP_SIS=m +CONFIG_AGP_SWORKS=m +CONFIG_AGP_VIA=m +CONFIG_AGP_EFFICEON=m +CONFIG_DRM=m +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_I810 is not set +# CONFIG_DRM_I830 is not set +# CONFIG_DRM_I915 is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=m +CONFIG_FB_CFB_COPYAREA=m +CONFIG_FB_CFB_IMAGEBLIT=m +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +CONFIG_FB_UVESA=m +# CONFIG_FB_VESA is not set +# CONFIG_FB_EFI is not set +# CONFIG_FB_HECUBA is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_INTEL is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_CYBLA is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_GEODE is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CORGI=m +# CONFIG_BACKLIGHT_PROGEAR is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VIDEO_SELECT=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 +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_SEQUENCER=y +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_SEQUENCER_OSS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=y +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_MTS64 is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +# CONFIG_SND_PORTMAN2X4 is not set + +# +# ISA devices +# +# CONFIG_SND_ADLIB is not set +# CONFIG_SND_AD1816A is not set +# CONFIG_SND_AD1848 is not set +# CONFIG_SND_ALS100 is not set +# CONFIG_SND_AZT2320 is not set +# CONFIG_SND_CMI8330 is not set +# CONFIG_SND_CS4231 is not set +# CONFIG_SND_CS4232 is not set +# CONFIG_SND_CS4236 is not set +# CONFIG_SND_DT019X is not set +# CONFIG_SND_ES968 is not set +# CONFIG_SND_ES1688 is not set +# CONFIG_SND_ES18XX is not set +# CONFIG_SND_SC6000 is not set +# CONFIG_SND_GUSCLASSIC is not set +# CONFIG_SND_GUSEXTREME is not set +# CONFIG_SND_GUSMAX is not set +# CONFIG_SND_INTERWAVE is not set +# CONFIG_SND_INTERWAVE_STB is not set +# CONFIG_SND_OPL3SA2 is not set +# CONFIG_SND_OPTI92X_AD1848 is not set +# CONFIG_SND_OPTI92X_CS4231 is not set +# CONFIG_SND_OPTI93X is not set +# CONFIG_SND_MIRO is not set +# CONFIG_SND_SB8 is not set +# CONFIG_SND_SB16 is not set +# CONFIG_SND_SBAWE is not set +# CONFIG_SND_SGALAXY is not set +# CONFIG_SND_SSCAPE is not set +# CONFIG_SND_WAVEFRONT is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +CONFIG_SND_INTEL8X0=y +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_AC97_POWER_SAVE is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_USX2Y is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=y +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_SUSPEND=y +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_SPLIT_ISO=y +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_SL811_HCD=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGERS is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +# CONFIG_RTC_CLASS is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_VIRTUALIZATION=y +# CONFIG_KVM is not set +# CONFIG_LGUEST is not set + +# +# Userspace I/O +# +# CONFIG_UIO is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +CONFIG_DMIID=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +CONFIG_UDF_FS=y +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +# CONFIG_NFSD_V4 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=y +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_KPROBES is not set +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_SAMPLES is not set +CONFIG_EARLY_PRINTK=y +CONFIG_X86_FIND_SMP_CONFIG=y +CONFIG_X86_MPPARSE=y +CONFIG_DOUBLEFAULT=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +# CONFIG_CRYPTO_TWOFISH_586 is not set +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +# CONFIG_CRYPTO_AES_586 is not set +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-c7x0 b/packages/linux/linux-rp-2.6.26/defconfig-c7x0 new file mode 100644 index 0000000000..6c188e7b57 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-c7x0 @@ -0,0 +1,1747 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:27:11 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +CONFIG_PXA_SHARPSL=y +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_SHARPSL_25x=y +# CONFIG_PXA_SHARPSL_27x is not set +# CONFIG_MACH_HX2750 is not set +# CONFIG_MACH_POODLE is not set +CONFIG_MACH_CORGI=y +CONFIG_MACH_SHEPHERD=y +CONFIG_MACH_HUSKY=y +# CONFIG_MACH_TOSA is not set +CONFIG_PXA25x=y +CONFIG_PXA_SHARP_C7xx=y +CONFIG_PXA_SSP=y +# CONFIG_PXA_KEYS is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y +CONFIG_SHARP_PARAM=y +CONFIG_SHARPSL_PM=y +CONFIG_SHARP_SCOOP=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_CPU_FREQ_PXA25x=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_DEBUG=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y +CONFIG_INPUT_APMPOWER=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=y +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_SHARP_SL=y +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_H1900 is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +CONFIG_MTD_NAND_SHARPSL=y +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_POWER=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_CORGI=y +# CONFIG_KEYBOARD_SPITZ is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_CORGI=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_PXA is not set +# 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 +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_AC97_CODEC is not set +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_I2S=m +CONFIG_SND_PXA2XX_SOC_CORGI=m + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_WM8731=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +# CONFIG_AC97_BUS is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +CONFIG_USB_GADGET_PXA2XX=y +CONFIG_USB_PXA2XX=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_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 +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-collie b/packages/linux/linux-rp-2.6.26/defconfig-collie new file mode 100644 index 0000000000..271bfd5881 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-collie @@ -0,0 +1,1437 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Mon Jan 21 22:14:20 2008 +# +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 +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_ELF_CORE is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_CERF is not set +CONFIG_SA1100_COLLIE=y +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_SSP is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA1100=y +CONFIG_CPU_32v4=y +CONFIG_CPU_ABRT_EV4=y +CONFIG_CPU_CACHE_V4WB=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WB=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_SHARP_LOCOMO=y +CONFIG_SHARP_PARAM=y +CONFIG_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 +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +CONFIG_PCMCIA_SA1100=m + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +CONFIG_PREEMPT=y +CONFIG_NO_IDLE_HZ=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_NODES_SHIFT=2 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_DISCONTIGMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_DISCONTIGMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_NEED_MULTIPLE_NODES=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=m +CONFIG_INPUT_APMPOWER=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=m +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +CONFIG_SA1100_FIR=m +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +CONFIG_MTD_SHARP=y + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# 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_PNP is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_IDE=m +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +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_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +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 +# CONFIG_DM9000 is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_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 +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +CONFIG_PCMCIA_RAYCS=m +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_CS=m +CONFIG_LIBERTAS_SDIO=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=m +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_POWER=m + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_LOCOMO=m +# 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 + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA11X0=y +CONFIG_MCP_UCB1200=y +CONFIG_MCP_UCB1200_TS=m +# CONFIG_MCP_COLLIE_TS is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_CPIA is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +CONFIG_FB_SA1100=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_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 + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_DUMMY=m +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# + +# +# SPI devices +# + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# 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 +# CONFIG_USB_SUPPORT is not set +CONFIG_MMC=m +CONFIG_MMC_DEBUG=y +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_SPI=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_LOCOMO=m +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +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 + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=m + +# +# File systems +# +CONFIG_EXT2_FS=m +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_FS_MBCACHE=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=m + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=m +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 +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=m +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +# CONFIG_PROFILING is not set +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +# CONFIG_CRYPTO_PCBC 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 +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +# CONFIG_CRYPTO_LZO 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 is not set + +# +# Library routines +# +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_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.26/defconfig-htcuniversal new file mode 100644 index 0000000000..8b2a31dbb0 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-htcuniversal @@ -0,0 +1,1308 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 21:46:02 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +# 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 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +# CONFIG_UID16 is not set +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_DMABOUNCE=y + +# +# Intel PXA2xx/PXA3xx Implementations +# +CONFIG_ARCH_LUBBOCK=y +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA25x=y +# CONFIG_PXA_KEYS is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_CPU_FREQ_PXA25x=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_DEBUG=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +CONFIG_CPU_FREQ_GOV_USERSPACE=y +# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_SUSPEND_UP_POSSIBLE=y +# CONFIG_SUSPEND is not set +CONFIG_APM_EMULATION=y +CONFIG_INPUT_APMPOWER=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=y + +# +# IrDA protocols +# +CONFIG_IRLAN=y +# CONFIG_IRNET is not set +CONFIG_IRCOMM=y +CONFIG_IRDA_ULTRA=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_DEBUG=y + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=y + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +CONFIG_PXA_FICP=y +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_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_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=0 +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_NET_ETHERNET is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +CONFIG_NET_RADIO=y +# CONFIG_NET_WIRELESS_RTNETLINK is not set +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set +CONFIG_ACX=m +CONFIG_ACX_MEM=y +# CONFIG_ACX_CS is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +# CONFIG_INPUT_POWER is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_ASIC3=y +CONFIG_INPUT_MOUSE=y +# CONFIG_MOUSE_PS2 is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=32 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +# CONFIG_I2C_ALGOBIT is not set +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_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=y + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_DS2482 is not set +CONFIG_W1_MASTER_DS1WM=y + +# +# 1-wire Slaves +# +# CONFIG_W1_SLAVE_THERM is not set +# CONFIG_W1_SLAVE_SMEM is not set +# CONFIG_W1_SLAVE_DS2433 is not set +CONFIG_W1_SLAVE_DS2760=y +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PDA_POWER=y +CONFIG_APM_POWER=y +CONFIG_BATTERY_DS2760=y +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_HTC_ASIC3=y +CONFIG_HTC_ASIC3_DS1WM=y + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +# CONFIG_FB_PXA_OVERLAY is not set +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CORGI=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# 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 +# CONFIG_HIDRAW is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +# CONFIG_USB is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +CONFIG_USB_GADGET_PXA2XX=y +CONFIG_USB_PXA2XX=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_PXA is not set +CONFIG_MMC_ASIC3=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_ASIC3=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_DEBUG=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_SQUASHFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +CONFIG_NLS_CODEPAGE_1250=y +CONFIG_NLS_CODEPAGE_1251=y +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +# CONFIG_PROFILING is not set +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +CONFIG_DEBUG_MUTEXES=y +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_VM=y +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# 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=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=y +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +# CONFIG_CRYPTO_CBC is not set +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_ARC4=m +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=y +# CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set +# CONFIG_CRYPTO_AUTHENC is not set +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-hx2000 b/packages/linux/linux-rp-2.6.26/defconfig-hx2000 new file mode 100644 index 0000000000..0f2557c0f7 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-hx2000 @@ -0,0 +1,1733 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:10:53 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +CONFIG_MACH_HX2750=y +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA27x=y +CONFIG_PXA_SSP=y +CONFIG_PXA_KEYS=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=y + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_PXA2XX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m +# CONFIG_ZD1211RW is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=240 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_POWER=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_PXA27x=m +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_TOUCHSCREEN_TSC2101=y +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +CONFIG_MFD_TSC2101=y +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_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 +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=y +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_IDE_DISK=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-poodle b/packages/linux/linux-rp-2.6.26/defconfig-poodle new file mode 100644 index 0000000000..7d41252b15 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-poodle @@ -0,0 +1,1757 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 22:47:47 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +CONFIG_PXA_SHARPSL=y +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA_SHARPSL_25x=y +# CONFIG_PXA_SHARPSL_27x is not set +# CONFIG_MACH_HX2750 is not set +# CONFIG_MACH_HTCUNIVERSAL is not set +CONFIG_MACH_POODLE=y +# CONFIG_MACH_CORGI is not set +# CONFIG_MACH_SHEPHERD is not set +# CONFIG_MACH_HUSKY is not set +# CONFIG_MACH_TOSA is not set +CONFIG_PXA25x=y +CONFIG_PXA_SSP=y +# CONFIG_PXA_KEYS is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y +CONFIG_SHARP_LOCOMO=y +CONFIG_SHARP_PARAM=y +CONFIG_SHARPSL_PM=y +CONFIG_SHARP_SCOOP=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=y + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +CONFIG_CPU_FREQ_PXA25x=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_DEBUG=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y +CONFIG_INPUT_APMPOWER=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=y +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_SHARP_SL=y +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_H1900 is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +CONFIG_MTD_NAND_SHARPSL=y +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m +# CONFIG_ZD1211RW is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=240 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_POWER=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_LOCOMO=y +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_CORGI is not set +# CONFIG_KEYBOARD_SPITZ is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_CORGI=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +CONFIG_FB_PXA_LCD_QVGA=y +# CONFIG_FB_PXA_LCD_VGA is not set +CONFIG_FB_PXA_OVERLAY=y +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_W100 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_LOCOMO=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +CONFIG_FONT_MINI_4x6=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_AC97_CODEC is not set +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_I2S=m +CONFIG_SND_PXA2XX_SOC_POODLE=m + +# +# SoC Audio support for SuperH +# +CONFIG_SND_SOC_WM8731=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +# CONFIG_AC97_BUS is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +CONFIG_USB_GADGET_PXA2XX=y +CONFIG_USB_PXA2XX=y +# CONFIG_USB_PXA2XX_SMALL is not set +# CONFIG_USB_GADGET_M66592 is not set +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_LOCOMO=y +# CONFIG_LEDS_TOSA is not set +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_IDE_DISK=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-qemuarm b/packages/linux/linux-rp-2.6.26/defconfig-qemuarm new file mode 100644 index 0000000000..e636b6c671 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-qemuarm @@ -0,0 +1,1582 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 22:28:17 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +# CONFIG_GENERIC_GPIO is not set +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_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=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +CONFIG_ARCH_VERSATILE=y +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA 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 + +# +# Boot options +# + +# +# Power management +# + +# +# Versatile platform type +# +CONFIG_ARCH_VERSATILE_PB=y +# CONFIG_MACH_VERSATILE_AB is not set + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM926T=y +# CONFIG_CPU_V6 is not set +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5TJ=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_ARM_VIC=y +CONFIG_ICST307=y + +# +# Bus support +# +CONFIG_ARM_AMBA=y +CONFIG_PCI=y +CONFIG_PCI_SYSCALL=y +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCI_LEGACY=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_LEDS=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyAMA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=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 +CONFIG_VFP=y + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +# CONFIG_APM_EMULATION is not set + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_VLSI_FIR is not set +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +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 is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_AFS_PARTS=y + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_INTEL_VR_NOR 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=m +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=m +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_CAFE is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=51200 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH 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 + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=y +# 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_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_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=y +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +# CONFIG_SCSI_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 is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_FUSION 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_VETH is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=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=y +# CONFIG_DM9000 is not set +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 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 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +# CONFIG_PLX_HERMES is not set +# CONFIG_TMD_HERMES is not set +# CONFIG_NORTEL_HERMES is not set +# CONFIG_PCI_HERMES is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 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_PLX is not set +# CONFIG_HOSTAP_PCI is not set +# CONFIG_BCM43XX is not set +# CONFIG_ZD1211RW is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# 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 is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TABLET=y +# CONFIG_TABLET_USB_ACECAD is not set +# CONFIG_TABLET_USB_AIPTEK is not set +# CONFIG_TABLET_USB_GTCO is not set +# CONFIG_TABLET_USB_KBTAB is not set +CONFIG_TABLET_USB_WACOM=y +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_STRADIS is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_DRM is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +CONFIG_FB_ARMCLCD=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CORGI=m + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +# CONFIG_SOUND is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_UHCI_HCD is not set +CONFIG_USB_SL811_HCD=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_PL031 is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +# CONFIG_NFSD_V4 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=y +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-qemux86 b/packages/linux/linux-rp-2.6.26/defconfig-qemux86 new file mode 100644 index 0000000000..42f6740201 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-qemux86 @@ -0,0 +1,1993 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:20:37 2008 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_SEMAPHORE_SLEEPERS=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_QUICKLIST=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_DMI=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_SUPPORTS_OPROFILE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_X86_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_KTIME_SCALAR=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=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=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_TREE=y +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=15 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_LBD=y +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_SMP=y +CONFIG_X86_PC=y +# CONFIG_X86_ELAN is not set +# CONFIG_X86_VOYAGER is not set +# CONFIG_X86_NUMAQ is not set +# CONFIG_X86_SUMMIT is not set +# CONFIG_X86_BIGSMP is not set +# CONFIG_X86_VISWS is not set +# CONFIG_X86_GENERICARCH is not set +# CONFIG_X86_ES7000 is not set +# CONFIG_X86_VSMP is not set +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +# CONFIG_PARAVIRT_GUEST is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +CONFIG_M686=y +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MPSC is not set +# CONFIG_MCORE2 is not set +# CONFIG_GENERIC_CPU is not set +CONFIG_X86_GENERIC=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=7 +CONFIG_X86_XADD=y +CONFIG_X86_PPRO_FENCE=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_GOOD_APIC=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +# CONFIG_HPET_TIMER is not set +CONFIG_NR_CPUS=8 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_BKL=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_NONFATAL=y +CONFIG_X86_MCE_P4THERMAL=y +CONFIG_VM86=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_X86_PAE is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_NR_QUICK=1 +CONFIG_VIRT_TO_BUS=y +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +# CONFIG_EFI is not set +CONFIG_IRQBALANCE=y +CONFIG_SECCOMP=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_KEXEC=y +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_HOTPLUG_CPU=y +CONFIG_COMPAT_VDSO=y + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_SMP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_HIBERNATION_SMP_POSSIBLE=y +# CONFIG_HIBERNATION is not set +CONFIG_ACPI=y +CONFIG_ACPI_SLEEP=y +# CONFIG_ACPI_PROCFS is not set +CONFIG_ACPI_PROCFS_POWER=y +CONFIG_ACPI_SYSFS_POWER=y +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +# CONFIG_ACPI_VIDEO is not set +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_ASUS is not set +# CONFIG_ACPI_TOSHIBA is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_SYSTEM=y +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_CONTAINER=y +# CONFIG_ACPI_SBS is not set +# CONFIG_APM is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set +# CONFIG_CPU_IDLE is not set + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCIEPORTBUS is not set +CONFIG_ARCH_SUPPORTS_MSI=y +# CONFIG_PCI_MSI is not set +CONFIG_PCI_LEGACY=y +CONFIG_HT_IRQ=y +CONFIG_ISA_DMA_API=y +CONFIG_ISA=y +# CONFIG_EISA is not set +# CONFIG_MCA is not set +# CONFIG_SCx200 is not set +CONFIG_K8_NB=y +# CONFIG_PCCARD is not set +# CONFIG_HOTPLUG_PCI is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +# CONFIG_VIA_FIR is not set +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +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 is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y +# CONFIG_MTD is not set +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=y +# CONFIG_PARPORT_SERIAL is not set +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_AX88796 is not set +# CONFIG_PARPORT_1284 is not set +CONFIG_PNP=y +# CONFIG_PNP_DEBUG is not set + +# +# Protocols +# +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_FD=y +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_IBM_ASM is not set +# CONFIG_PHANTOM is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ASUS_LAPTOP is not set +# CONFIG_FUJITSU_LAPTOP is not set +# CONFIG_MSI_LAPTOP is not set +# CONFIG_SONY_LAPTOP is not set +# CONFIG_THINKPAD_ACPI is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_BLK_DEV_HD_IDE is not set +CONFIG_BLK_DEV_IDEDISK=y +CONFIG_IDEDISK_MULTI_MODE=y +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_IDEACPI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +CONFIG_BLK_DEV_CMD640=y +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_IDEPNP is not set + +# +# PCI IDE chipsets support +# +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_IDEPCI_SHARE_IRQ=y +CONFIG_IDEPCI_PCIBUS_ORDER=y +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=y +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_RZ1000=y +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_ATIIXP is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_CS5535 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_JMICRON is not set +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_IT8213 is not set +# CONFIG_BLK_DEV_IT821X is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SIS5513 is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_TC86C001 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_BLK_DEV_IDEDMA=y +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=y +# 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_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC94XX is not set +CONFIG_SCSI_DPT_I2O=m +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_LPFC is not set +# CONFIG_SCSI_SEAGATE is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_ULTRASTOR is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_SRP is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_IEEE1394 is not set +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_EL3 is not set +# CONFIG_3C515 is not set +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_SMC9194=m +# CONFIG_NET_VENDOR_RACAL is not set +CONFIG_NET_TULIP=y +# CONFIG_DE2104X is not set +CONFIG_TULIP=m +CONFIG_TULIP_MWI=y +CONFIG_TULIP_MMIO=y +CONFIG_TULIP_NAPI=y +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +# CONFIG_E2100 is not set +# CONFIG_EWRK3 is not set +# CONFIG_EEXPRESS is not set +# CONFIG_EEXPRESS_PRO is not set +# CONFIG_HPLAN_PLUS is not set +# CONFIG_HPLAN is not set +# CONFIG_LP486E is not set +# CONFIG_ETH16I is not set +CONFIG_NE2000=y +# CONFIG_ZNET is not set +# CONFIG_SEEQ8005 is not set +# CONFIG_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=y +CONFIG_PCNET32=m +CONFIG_PCNET32_NAPI=y +CONFIG_AMD8111_ETH=m +CONFIG_AMD8111E_NAPI=y +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADAPTEC_STARFIRE_NAPI=y +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_FORCEDETH=m +CONFIG_FORCEDETH_NAPI=y +CONFIG_CS89x0=m +CONFIG_EEPRO100=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=y +# CONFIG_8139CP is not set +CONFIG_8139TOO=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +CONFIG_SUNDANCE_MMIO=y +CONFIG_TLAN=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_RHINE_NAPI=y +CONFIG_SC92031=m +# CONFIG_NET_POCKET is not set +CONFIG_NETDEV_1000=y +CONFIG_ACENIC=m +CONFIG_ACENIC_OMIT_TIGON_I=y +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000_NAPI=y +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set +# CONFIG_E1000E is not set +# CONFIG_IP1000 is not set +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +CONFIG_R8169_NAPI=y +CONFIG_SIS190=m +CONFIG_SKGE=m +CONFIG_SKY2=m +CONFIG_SK98LIN=m +CONFIG_VIA_VELOCITY=m +CONFIG_TIGON3=m +CONFIG_BNX2=m +CONFIG_QLA3XXX=m +CONFIG_ATL1=m +CONFIG_NETDEV_10000=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set +# CONFIG_IXGBE is not set +# CONFIG_IXGB is not set +CONFIG_S2IO=m +# CONFIG_S2IO_NAPI is not set +# CONFIG_MYRI10GE is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_NIU is not set +# CONFIG_MLX4_CORE is not set +# CONFIG_TEHUTI is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +# CONFIG_LIBERTAS is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m +# CONFIG_PLX_HERMES is not set +# CONFIG_TMD_HERMES is not set +# CONFIG_NORTEL_HERMES is not set +# CONFIG_PCI_HERMES is not set +# CONFIG_ATMEL is not set +# CONFIG_PRISM54 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_PLX is not set +# CONFIG_HOSTAP_PCI is not set +# CONFIG_BCM43XX is not set +# CONFIG_ZD1211RW is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_INPORT is not set +# CONFIG_MOUSE_LOGIBM is not set +# CONFIG_MOUSE_PC110PAD is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TABLET=y +# CONFIG_TABLET_USB_ACECAD is not set +# CONFIG_TABLET_USB_AIPTEK is not set +# CONFIG_TABLET_USB_GTCO is not set +# CONFIG_TABLET_USB_KBTAB is not set +CONFIG_TABLET_USB_WACOM=y +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_PCSPKR is not set +# CONFIG_INPUT_WISTRON_BTNS is not set +# CONFIG_INPUT_ATLAS_BTNS is not set +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +# CONFIG_SERIAL_JSM is not set +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_PRINTER=y +# CONFIG_LP_CONSOLE is not set +# CONFIG_PPDEV is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set +# CONFIG_MWAVE is not set +# CONFIG_PC8736x_GPIO is not set +# CONFIG_NSC_GPIO is not set +# CONFIG_CS5535_GPIO is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_BATTERY_DS2760 is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB=m +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_STRADIS is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +# CONFIG_USB_DABUSB is not set + +# +# Graphics support +# +CONFIG_AGP=m +CONFIG_AGP_ALI=m +CONFIG_AGP_ATI=m +CONFIG_AGP_AMD=m +CONFIG_AGP_AMD64=m +CONFIG_AGP_INTEL=m +CONFIG_AGP_NVIDIA=m +CONFIG_AGP_SIS=m +CONFIG_AGP_SWORKS=m +CONFIG_AGP_VIA=m +CONFIG_AGP_EFFICEON=m +CONFIG_DRM=m +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_I810 is not set +# CONFIG_DRM_I830 is not set +# CONFIG_DRM_I915 is not set +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=m +CONFIG_FB_CFB_COPYAREA=m +CONFIG_FB_CFB_IMAGEBLIT=m +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +CONFIG_FB_UVESA=m +# CONFIG_FB_VESA is not set +# CONFIG_FB_EFI is not set +# CONFIG_FB_HECUBA is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I810 is not set +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_INTEL is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_CYBLA is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_GEODE is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CORGI=m +# CONFIG_BACKLIGHT_PROGEAR is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VIDEO_SELECT=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 +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_SEQUENCER=y +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_SEQUENCER_OSS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=y +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_MTS64 is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +# CONFIG_SND_PORTMAN2X4 is not set + +# +# ISA devices +# +# CONFIG_SND_ADLIB is not set +# CONFIG_SND_AD1816A is not set +# CONFIG_SND_AD1848 is not set +# CONFIG_SND_ALS100 is not set +# CONFIG_SND_AZT2320 is not set +# CONFIG_SND_CMI8330 is not set +# CONFIG_SND_CS4231 is not set +# CONFIG_SND_CS4232 is not set +# CONFIG_SND_CS4236 is not set +# CONFIG_SND_DT019X is not set +# CONFIG_SND_ES968 is not set +# CONFIG_SND_ES1688 is not set +# CONFIG_SND_ES18XX is not set +# CONFIG_SND_SC6000 is not set +# CONFIG_SND_GUSCLASSIC is not set +# CONFIG_SND_GUSEXTREME is not set +# CONFIG_SND_GUSMAX is not set +# CONFIG_SND_INTERWAVE is not set +# CONFIG_SND_INTERWAVE_STB is not set +# CONFIG_SND_OPL3SA2 is not set +# CONFIG_SND_OPTI92X_AD1848 is not set +# CONFIG_SND_OPTI92X_CS4231 is not set +# CONFIG_SND_OPTI93X is not set +# CONFIG_SND_MIRO is not set +# CONFIG_SND_SB8 is not set +# CONFIG_SND_SB16 is not set +# CONFIG_SND_SBAWE is not set +# CONFIG_SND_SGALAXY is not set +# CONFIG_SND_SSCAPE is not set +# CONFIG_SND_WAVEFRONT is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDA_INTEL is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +CONFIG_SND_INTEL8X0=y +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_AC97_POWER_SAVE is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_USX2Y is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=y +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_SUSPEND=y +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_SPLIT_ISO=y +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_SL811_HCD=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# + +# +# LED Triggers +# +# CONFIG_LEDS_TRIGGERS is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +# CONFIG_RTC_CLASS is not set +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_VIRTUALIZATION=y +# CONFIG_KVM is not set +# CONFIG_LGUEST is not set + +# +# Userspace I/O +# +# CONFIG_UIO is not set + +# +# Firmware Drivers +# +# CONFIG_EDD is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DCDBAS is not set +CONFIG_DMIID=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +CONFIG_UDF_FS=y +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +# CONFIG_NFSD_V4 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=y +# CONFIG_SMB_NLS_DEFAULT is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_KPROBES is not set +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_SAMPLES is not set +CONFIG_EARLY_PRINTK=y +CONFIG_X86_FIND_SMP_CONFIG=y +CONFIG_X86_MPPARSE=y +CONFIG_DOUBLEFAULT=y + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +# CONFIG_CRYPTO_TWOFISH_586 is not set +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +# CONFIG_CRYPTO_AES_586 is not set +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-spitz b/packages/linux/linux-rp-2.6.26/defconfig-spitz new file mode 100644 index 0000000000..9c8f0ae8a1 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-spitz @@ -0,0 +1,1834 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.26-rc4 +# Sun Jun 1 18:56:45 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_SUPPORTS_AOUT=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +# CONFIG_GROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_RELAY is not set +# CONFIG_NAMESPACES is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_SYSCTL_SYSCALL_CHECK=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_COMPAT_BRK=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_PROFILING=y +# CONFIG_MARKERS is not set +CONFIG_OPROFILE=m +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +# CONFIG_HAVE_DMA_ATTRS is not set +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" +CONFIG_CLASSIC_RCU=y + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_ORION5X is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +# CONFIG_ARCH_MSM7X00A is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +# CONFIG_ARCH_GUMSTIX is not set +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +CONFIG_PXA_SHARPSL=y +# CONFIG_ARCH_PXA_ESERIES is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_HX2750 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_COLIBRI is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_LITTLETON is not set +# CONFIG_MACH_ARMCORE is not set +# CONFIG_MACH_MAGICIAN is not set +# CONFIG_MACH_PCM027 is not set +# CONFIG_MACH_HTCUNIVERSAL is not set +# CONFIG_PXA_SHARPSL_25x is not set +CONFIG_PXA_SHARPSL_27x=y +CONFIG_MACH_AKITA=y +CONFIG_MACH_SPITZ=y +CONFIG_MACH_BORZOI=y +CONFIG_PXA27x=y +CONFIG_PXA_SHARP_Cxx00=y +CONFIG_PXA_SSP=y +# CONFIG_PXA_KEYS is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_PABRT_NOIFAR=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y +CONFIG_SHARP_PARAM=y +CONFIG_SHARPSL_PM=y +CONFIG_SHARP_SCOOP=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=y + +# +# Kernel Features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_APM_EMULATION=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK_QUEUE is not set +# CONFIG_NETFILTER_NETLINK_LOG is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=m +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_SHARP_SL=m +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_VERIFY_WRITE=y +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_H1900 is not set +CONFIG_MTD_NAND_IDS=m +# CONFIG_MTD_NAND_DISKONCHIP is not set +CONFIG_MTD_NAND_SHARPSL=m +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +CONFIG_HAVE_IDE=y +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +# CONFIG_BLK_DEV_HD_ONLY is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_AX88796 is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_IWLWIFI_LEDS is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_PCMCIA_AXNET is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_APMPOWER=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_CORGI is not set +CONFIG_KEYBOARD_SPITZ=y +# CONFIG_KEYBOARD_PXA27x is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_CORGI=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_WM97XX is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +CONFIG_DEVKMEM=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_IPWIRELESS is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set +# CONFIG_I2C_PCA_PLATFORM is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_PCF8575 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_TPS65010 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set +# CONFIG_SPI is not set +CONFIG_HAVE_GPIO_LIB=y + +# +# GPIO Support +# +# CONFIG_DEBUG_GPIO is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set + +# +# SPI GPIO expanders: +# +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_HTC_EGPIO is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# + +# +# Multimedia core support +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L2_COMMON=m +CONFIG_VIDEO_ALLOW_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +# CONFIG_DVB_CORE is not set +CONFIG_VIDEO_MEDIA=m + +# +# Multimedia drivers +# +# CONFIG_MEDIA_ATTACH is not set +CONFIG_MEDIA_TUNER=m +# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC5000=m +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_V4L1=m +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +# CONFIG_USB_STKWEBCAM is not set +# CONFIG_SOC_CAMERA is not set +# CONFIG_VIDEO_PXA27x is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_USB_DSBR=m +# CONFIG_USB_SI470X is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_FOREIGN_ENDIAN is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +# CONFIG_FB_PXA_SMARTPANEL is not set +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_W100 is not set +# CONFIG_FB_AM200EPD is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CORGI=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_I2S=m +CONFIG_SND_PXA2XX_SOC_SPITZ=m + +# +# ALSA SoC audio for Freescale SOCs +# + +# +# SoC Audio for the Texas Instruments OMAP +# +CONFIG_SND_SOC_WM8750=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +# CONFIG_USB_WDM is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +CONFIG_USB_EZUSB=y +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +# CONFIG_USB_SERIAL_IUU is not set +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MOTOROLA is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_M66592 is not set +CONFIG_USB_GADGET_PXA27X=y +CONFIG_USB_PXA27X=m +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_ZERO=m +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_SPITZ=y +# 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_LEDS_TRIGGER_DEFAULT_ON is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_S35390A is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y +# CONFIG_UIO is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_DNOTIFY=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=1024 +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_NULL=m +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_TEST=m + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_SEQIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=m +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=m +# CONFIG_CRYPTO_LRW is not set +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_XTS is not set + +# +# Hash modes +# +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +# CONFIG_CRYPTO_TGR192 is not set +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +# +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_KHAZAD=m +# CONFIG_CRYPTO_SALSA20 is not set +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +# CONFIG_GENERIC_FIND_FIRST_BIT is not set +# CONFIG_GENERIC_FIND_NEXT_BIT is not set +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/defconfig-zylonite b/packages/linux/linux-rp-2.6.26/defconfig-zylonite new file mode 100644 index 0000000000..cc2fc482ae --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/defconfig-zylonite @@ -0,0 +1,1740 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-rc8 +# Sun Jan 20 18:42:35 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=m +CONFIG_IOSCHED_CFQ=m +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# + +# +# Supported PXA3xx Processor Variants +# +CONFIG_CPU_PXA300=y +CONFIG_CPU_PXA310=y +CONFIG_CPU_PXA320=y +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_HX2750 is not set +# CONFIG_MACH_EM_X270 is not set +CONFIG_MACH_ZYLONITE=y +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA3xx=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSC3=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 +CONFIG_IO_36=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=m + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,38400 root=/dev/mtdblock2 rootfstype=jffs2 mem=64M dyntick=enable debug" +# CONFIG_XIP_KERNEL is not set +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IP_VS is not set +CONFIG_IPV6=m +# CONFIG_IPV6_PRIVACY is not set +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set + +# +# Core Netfilter Configuration +# +# CONFIG_NETFILTER_NETLINK is not set +# CONFIG_NF_CONNTRACK_ENABLED is not set +# CONFIG_NF_CONNTRACK is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +# CONFIG_IP6_NF_QUEUE is not set +# CONFIG_IP6_NF_IPTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +# CONFIG_BT_HCIUART_LL is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +CONFIG_MTD_ROM=y +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_H1900 is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_SHARPSL is not set +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_ALAUDA is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_MISC_DEVICES=y +# CONFIG_EEPROM_93CX6 is not set +CONFIG_IDE=y +CONFIG_IDE_MAX_HWIFS=4 +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +# CONFIG_DM_MULTIPATH_RDAC is not set +# CONFIG_DM_MULTIPATH_HP is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +CONFIG_TUN=m +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_AX88796 is not set +CONFIG_SMC91X=y +# CONFIG_DM9000 is not set +# CONFIG_SMC911X is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +# CONFIG_ATMEL is not set +CONFIG_AIRO_CS=m +# CONFIG_PCMCIA_WL3501 is not set +# CONFIG_USB_ZD1201 is not set +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set +CONFIG_HOSTAP_CS=m +# CONFIG_ZD1211RW is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=m +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +CONFIG_USB_NET_CDC_SUBSET=m +# CONFIG_USB_ALI_M5632 is not set +# CONFIG_USB_AN2720 is not set +# CONFIG_USB_BELKIN is not set +CONFIG_USB_ARMLINUX=y +# CONFIG_USB_EPSON2888 is not set +# CONFIG_USB_KC2190 is not set +# CONFIG_USB_NET_ZAURUS is not set +# CONFIG_NET_PCMCIA is not set +# CONFIG_WAN is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPP_MPPE is not set +# CONFIG_PPPOE is not set +# CONFIG_PPPOL2TP is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=m +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set +CONFIG_INPUT_POWER=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set + +# +# I2C Hardware Bus support +# +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_PXA=y +# CONFIG_I2C_PXA_SLAVE is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +# CONFIG_VIDEO_VIVI is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set +# CONFIG_VIDEO_SAA5246A is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +CONFIG_V4L_USB_DRIVERS=y +# CONFIG_VIDEO_PVRUSB2 is not set +# CONFIG_VIDEO_EM28XX is not set +# CONFIG_VIDEO_USBVISION is not set +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +# CONFIG_USB_QUICKCAM_MESSENGER is not set +# CONFIG_USB_ET61X251 is not set +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +# CONFIG_USB_ZC0301 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_ZR364XX is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_USB_DSBR=m +# CONFIG_DVB_CORE is not set +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +# CONFIG_FB_DEFERRED_IO is not set +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +# CONFIG_FB_PXA_LCD_QVGA is not set +CONFIG_FB_PXA_LCD_VGA=y +CONFIG_FB_PXA_OVERLAY=y +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CORGI=m + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +# CONFIG_LOGO_LINUX_CLUT224 is not set +CONFIG_LOGO_OHAND_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=m +# CONFIG_HID_DEBUG is not set +# CONFIG_HIDRAW is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_SL811_HCD 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=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +CONFIG_USB_SERIAL_BELKIN=m +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_CP2101 is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +# CONFIG_USB_SERIAL_OPTION is not set +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +# CONFIG_USB_ADUTUX is not set +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +CONFIG_USB_CYTHERM=m +# CONFIG_USB_PHIDGET is not set +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_M66592=y +CONFIG_USB_M66592=y +# CONFIG_USB_GADGET_PXA27X is not set +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_GADGETFS is not set +CONFIG_USB_FILE_STORAGE=m +# CONFIG_USB_FILE_STORAGE_TEST is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_UNSAFE_RESUME=y + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_GPIO is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_IDE_DISK=y +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=m +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_SYSFS is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +CONFIG_JFFS2_RUBIN=y +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +CONFIG_NFS_V4=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +# CONFIG_NFSD_V3_ACL is not set +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_MARKERS is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=m +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_DES=m +# CONFIG_CRYPTO_FCRYPT is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_SEED is not set +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/packages/linux/linux-rp-2.6.26/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.26/hostap-monitor-mode.patch new file mode 100644 index 0000000000..641fd19e50 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/hostap-monitor-mode.patch @@ -0,0 +1,209 @@ +This is a patch that I've been maintaining for a few years, and I'd +really like to see it added to the mainstream zaurus kernel so I can +finally stop distributing my own. + +This patch only effects the card while in monitor mode, and does not +cause any known stability issues. + +http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch + +Rick Farina (Zero_Chaos) + +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400 +@@ -69,6 +69,9 @@ + iface = netdev_priv(dev); + local = iface->local; + ++ if (local->iw_mode == IW_MODE_MONITOR) ++ goto xmit; ++ + if (skb->len < ETH_HLEN) { + printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb " + "(len=%d)\n", dev->name, skb->len); +@@ -234,6 +237,7 @@ + memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN); + } + ++xmit: + iface->stats.tx_packets++; + iface->stats.tx_bytes += skb->len; + +@@ -404,8 +408,6 @@ + } + + if (skb->len < 24) { +- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb " +- "(len=%d)\n", dev->name, skb->len); + ret = 0; + iface->stats.tx_dropped++; + goto fail; +Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig +Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400 +@@ -1005,6 +1005,35 @@ + return fid; + } + ++static int prism2_monitor_enable(struct net_device *dev) ++{ ++ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) { ++ printk(KERN_DEBUG "Port type setting for monitor mode " ++ "failed\n"); ++ return -EOPNOTSUPP; ++ } ++ ++ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8), ++ 0, NULL, NULL)) { ++ printk(KERN_DEBUG "Could not enter testmode 0x0a\n"); ++ return -EOPNOTSUPP; ++ } ++ ++ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS, ++ HFA384X_WEPFLAGS_PRIVACYINVOKED | ++ HFA384X_WEPFLAGS_HOSTENCRYPT | ++ HFA384X_WEPFLAGS_HOSTDECRYPT)) { ++ printk(KERN_DEBUG "WEP flags setting failed\n"); ++ return -EOPNOTSUPP; ++ } ++ ++ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) { ++ printk(KERN_DEBUG "Could not set promiscuous mode\n"); ++ return -EOPNOTSUPP; ++ } ++ ++ return 0; ++} + + static int prism2_reset_port(struct net_device *dev) + { +@@ -1031,6 +1060,10 @@ + "port\n", dev->name); + } + ++ if (local->iw_mode == IW_MODE_MONITOR) ++ /* force mode 0x0a after port 0 reset */ ++ return prism2_monitor_enable(dev); ++ + /* It looks like at least some STA firmware versions reset + * fragmentation threshold back to 2346 after enable command. Restore + * the configured value, if it differs from this default. */ +@@ -1466,6 +1499,10 @@ + return 1; + } + ++ if (local->iw_mode == IW_MODE_MONITOR) ++ /* force mode 0x0a after port 0 reset */ ++ prism2_monitor_enable(dev); ++ + local->hw_ready = 1; + local->hw_reset_tries = 0; + local->hw_resetting = 0; +@@ -3156,6 +3193,7 @@ + local->func->hw_config = prism2_hw_config; + local->func->hw_reset = prism2_hw_reset; + local->func->hw_shutdown = prism2_hw_shutdown; ++ local->func->monitor_enable = prism2_monitor_enable; + local->func->reset_port = prism2_reset_port; + local->func->schedule_reset = prism2_schedule_reset; + #ifdef PRISM2_DOWNLOAD_SUPPORT +Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400 +@@ -1104,33 +1104,7 @@ + + printk(KERN_DEBUG "Enabling monitor mode\n"); + hostap_monitor_set_type(local); +- +- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, +- HFA384X_PORTTYPE_PSEUDO_IBSS)) { +- printk(KERN_DEBUG "Port type setting for monitor mode " +- "failed\n"); +- return -EOPNOTSUPP; +- } +- +- /* Host decrypt is needed to get the IV and ICV fields; +- * however, monitor mode seems to remove WEP flag from frame +- * control field */ +- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS, +- HFA384X_WEPFLAGS_HOSTENCRYPT | +- HFA384X_WEPFLAGS_HOSTDECRYPT)) { +- printk(KERN_DEBUG "WEP flags setting failed\n"); +- return -EOPNOTSUPP; +- } +- +- if (local->func->reset_port(dev) || +- local->func->cmd(dev, HFA384X_CMDCODE_TEST | +- (HFA384X_TEST_MONITOR << 8), +- 0, NULL, NULL)) { +- printk(KERN_DEBUG "Setting monitor mode failed\n"); +- return -EOPNOTSUPP; +- } +- +- return 0; ++ return local->func->reset_port(dev); + } + + +@@ -1199,7 +1173,7 @@ + local->iw_mode = *mode; + + if (local->iw_mode == IW_MODE_MONITOR) +- hostap_monitor_mode_enable(local); ++ return hostap_monitor_mode_enable(local); + else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt && + !local->fw_encrypt_ok) { + printk(KERN_DEBUG "%s: defaulting to host-based encryption as " +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400 +@@ -331,7 +331,7 @@ + if (local->iw_mode == IW_MODE_REPEAT) + return HFA384X_PORTTYPE_WDS; + if (local->iw_mode == IW_MODE_MONITOR) +- return HFA384X_PORTTYPE_PSEUDO_IBSS; ++ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/ + return HFA384X_PORTTYPE_HOSTAP; + } + +Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400 +@@ -48,6 +48,8 @@ + { 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID }, + /* Samsung MagicLAN SWL-2210P */ + { 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID }, ++ /* NETGEAR MA311 */ ++ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID }, + { 0 } + }; + +Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400 +@@ -101,6 +101,7 @@ + { 0xc250, 0x0002 } /* EMTAC A2424i */, + { 0xd601, 0x0002 } /* Z-Com XI300 */, + { 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */, ++ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */, + { 0, 0} + }; + +Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig +diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h +--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400 ++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400 +@@ -575,6 +575,7 @@ + int (*hw_config)(struct net_device *dev, int initial); + void (*hw_reset)(struct net_device *dev); + void (*hw_shutdown)(struct net_device *dev, int no_disable); ++ int (*monitor_enable)(struct net_device *dev); + int (*reset_port)(struct net_device *dev); + void (*schedule_reset)(local_info_t *local); + int (*download)(local_info_t *local, diff --git a/packages/linux/linux-rp-2.6.26/hrw-hostapcard.patch b/packages/linux/linux-rp-2.6.26/hrw-hostapcard.patch new file mode 100644 index 0000000000..67fc5b7c70 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/hrw-hostapcard.patch @@ -0,0 +1,34 @@ + +From: Marcin Juszkiewicz + +Card reported by Ångström user: +http://bugs.openembedded.net/show_bug.cgi?id=3236 + +Socket 1: + product info: "Wireless LAN", "11Mbps PC Card", "Version 01.02", "" + manfid: 0x0156, 0x0002 + function: 6 (network) + +Signed-off-by: Marcin Juszkiewicz +Acked-by: Pavel Roskin + +--- + drivers/net/wireless/hostap/hostap_cs.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- linux-2.6.24.orig/drivers/net/wireless/hostap/hostap_cs.c ++++ linux-2.6.24/drivers/net/wireless/hostap/hostap_cs.c +@@ -892,10 +892,13 @@ static struct pcmcia_device_id hostap_cs + 0xa21501a, 0x59868926, 0xc9049a39), + PCMCIA_DEVICE_PROD_ID1234( + "The Linksys Group, Inc.", "Wireless Network CF Card", "ISL37300P", + "RevA", + 0xa5f472c2, 0x9c05598d, 0xc9049a39, 0x57a66194), ++ PCMCIA_DEVICE_PROD_ID123( ++ "Wireless LAN" , "11Mbps PC Card", "Version 01.02", ++ 0x4b8870ff, 0x70e946d1, 0x4b74baa0), + PCMCIA_DEVICE_NULL + }; + MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids); + + diff --git a/packages/linux/linux-rp-2.6.26/htcuni-acx.patch b/packages/linux/linux-rp-2.6.26/htcuni-acx.patch new file mode 100644 index 0000000000..1ccebddc8d --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/htcuni-acx.patch @@ -0,0 +1,33527 @@ +--- + drivers/net/wireless/Kconfig | 31 + drivers/net/wireless/Makefile | 2 + drivers/net/wireless/acx/Kconfig | 113 + drivers/net/wireless/acx/Makefile | 21 + drivers/net/wireless/acx/acx.h | 14 + drivers/net/wireless/acx/acx_config.h | 50 + drivers/net/wireless/acx/acx_func.h | 710 ++ + drivers/net/wireless/acx/acx_hw.h | 18 + drivers/net/wireless/acx/acx_struct.h | 2114 ++++++++ + drivers/net/wireless/acx/common.c | 7388 ++++++++++++++++++++++++++++ + drivers/net/wireless/acx/conv.c | 504 + + drivers/net/wireless/acx/cs.c | 5703 +++++++++++++++++++++ + drivers/net/wireless/acx/htcsable_acx.c | 118 + drivers/net/wireless/acx/htcuniversal_acx.c | 108 + drivers/net/wireless/acx/hx4700_acx.c | 108 + drivers/net/wireless/acx/ioctl.c | 2748 ++++++++++ + drivers/net/wireless/acx/mem.c | 5363 ++++++++++++++++++++ + drivers/net/wireless/acx/pci.c | 4234 ++++++++++++++++ + drivers/net/wireless/acx/rx3000_acx.c | 110 + drivers/net/wireless/acx/setrate.c | 213 + drivers/net/wireless/acx/usb.c | 1922 +++++++ + drivers/net/wireless/acx/wlan.c | 424 + + drivers/net/wireless/acx/wlan_compat.h | 260 + drivers/net/wireless/acx/wlan_hdr.h | 497 + + drivers/net/wireless/acx/wlan_mgmt.h | 582 ++ + 25 files changed, 33355 insertions(+) + +Index: linux-2.6.23/drivers/net/wireless/acx/acx_config.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/acx_config.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,50 @@ ++#define ACX_RELEASE "v0.3.36" ++ ++/* ++ * Test out all the channels in reg domain 0x10 ++ */ ++#define ACX_ALLOW_ALLCHANNELS ++ ++/* set to 0 if you don't want any debugging code to be compiled in */ ++/* set to 1 if you want some debugging */ ++/* set to 2 if you want extensive debug log */ ++#define ACX_DEBUG 0 ++ ++/* ++ * Since we'll be changing channels a lot ++#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT) ++*/ ++#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT) ++ ++/* assume 32bit I/O width ++ * (16bit is also compatible with Compact Flash) */ ++#define ACX_IO_WIDTH 32 ++ ++/* Set this to 1 if you want monitor mode to use ++ * phy header. Currently it is not useful anyway since we ++ * don't know what useful info (if any) is in phy header. ++ * If you want faster/smaller code, say 0 here */ ++#define WANT_PHY_HDR 0 ++ ++/* whether to do Tx descriptor cleanup in softirq (i.e. not in IRQ ++ * handler) or not. Note that doing it later does slightly increase ++ * system load, so still do that stuff in the IRQ handler for now, ++ * even if that probably means worse latency */ ++#define TX_CLEANUP_IN_SOFTIRQ 0 ++ ++/* if you want very experimental 802.11 power save mode features */ ++#define POWER_SAVE_80211 0 ++ ++/* if you want very early packet fragmentation bits and pieces */ ++#define ACX_FRAGMENTATION 0 ++ ++/* Locking: */ ++/* very talkative */ ++/* #define PARANOID_LOCKING 1 */ ++/* normal (use when bug-free) */ ++#define DO_LOCKING 1 ++/* else locking is disabled! */ ++ ++/* 0 - normal mode */ ++/* 1 - development/debug: probe for IEs on modprobe */ ++#define CMD_DISCOVERY 0 +Index: linux-2.6.23/drivers/net/wireless/acx/acx_func.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/acx_func.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,710 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++ ++/*********************************************************************** ++** LOGGING ++** ++** - Avoid SHOUTING needlessly. Avoid excessive verbosity. ++** Gradually remove messages which are old debugging aids. ++** ++** - Use printk() for messages which are to be always logged. ++** Supply either 'acx:' or ':' prefix so that user ++** can figure out who's speaking among other kernel chatter. ++** acx: is for general issues (e.g. "acx: no firmware image!") ++** while : is related to a particular device ++** (think about multi-card setup). Double check that message ++** is not confusing to the average user. ++** ++** - use printk KERN_xxx level only if message is not a WARNING ++** but is INFO, ERR etc. ++** ++** - Use printk_ratelimited() for messages which may flood ++** (e.g. "rx DUP pkt!"). ++** ++** - Use log() for messages which may be omitted (and they ++** _will_ be omitted in non-debug builds). Note that ++** message levels may be disabled at compile-time selectively, ++** thus select them wisely. Example: L_DEBUG is the lowest ++** (most likely to be compiled out) -> use for less important stuff. ++** ++** - Do not print important stuff with log(), or else people ++** will never build non-debug driver. ++** ++** Style: ++** hex: capital letters, zero filled (e.g. 0x02AC) ++** str: dont start from capitals, no trailing periods ("tx: queue is stopped") ++*/ ++#if ACX_DEBUG > 1 ++ ++void log_fn_enter(const char *funcname); ++void log_fn_exit(const char *funcname); ++void log_fn_exit_v(const char *funcname, int v); ++ ++#define FN_ENTER \ ++ do { \ ++ if (unlikely(acx_debug & L_FUNC)) { \ ++ log_fn_enter(__func__); \ ++ } \ ++ } while (0) ++ ++#define FN_EXIT1(v) \ ++ do { \ ++ if (unlikely(acx_debug & L_FUNC)) { \ ++ log_fn_exit_v(__func__, v); \ ++ } \ ++ } while (0) ++#define FN_EXIT0 \ ++ do { \ ++ if (unlikely(acx_debug & L_FUNC)) { \ ++ log_fn_exit(__func__); \ ++ } \ ++ } while (0) ++ ++#else ++ ++#define FN_ENTER ++#define FN_EXIT1(v) ++#define FN_EXIT0 ++ ++#endif /* ACX_DEBUG > 1 */ ++ ++ ++#if ACX_DEBUG ++ ++#define log(chan, args...) \ ++ do { \ ++ if (acx_debug & (chan)) \ ++ printk(KERN_DEBUG args); \ ++ } while (0) ++#define printk_ratelimited(args...) printk(args) ++ ++#else /* Non-debug build: */ ++ ++#define log(chan, args...) ++/* Standard way of log flood prevention */ ++#define printk_ratelimited(args...) \ ++do { \ ++ if (printk_ratelimit()) \ ++ printk(args); \ ++} while (0) ++ ++#endif /* ACX_DEBUG */ ++ ++void acx_print_mac(const char *head, const u8 *mac, const char *tail); ++ ++/* Optimized out to nothing in non-debug build */ ++static inline void ++acxlog_mac(int level, const char *head, const u8 *mac, const char *tail) ++{ ++ if (acx_debug & level) { ++ acx_print_mac(head, mac, tail); ++ } ++} ++ ++ ++/*********************************************************************** ++** MAC address helpers ++*/ ++static inline void ++MAC_COPY(u8 *mac, const u8 *src) ++{ ++ *(u32*)mac = *(u32*)src; ++ ((u16*)mac)[2] = ((u16*)src)[2]; ++ /* kernel's memcpy will do the same: memcpy(dst, src, ETH_ALEN); */ ++} ++ ++static inline void ++MAC_FILL(u8 *mac, u8 val) ++{ ++ memset(mac, val, ETH_ALEN); ++} ++ ++static inline void ++MAC_BCAST(u8 *mac) ++{ ++ ((u16*)mac)[2] = *(u32*)mac = -1; ++} ++ ++static inline void ++MAC_ZERO(u8 *mac) ++{ ++ ((u16*)mac)[2] = *(u32*)mac = 0; ++} ++ ++static inline int ++mac_is_equal(const u8 *a, const u8 *b) ++{ ++ /* can't beat this */ ++ return memcmp(a, b, ETH_ALEN) == 0; ++} ++ ++static inline int ++mac_is_bcast(const u8 *mac) ++{ ++ /* AND together 4 first bytes with sign-extended 2 last bytes ++ ** Only bcast address gives 0xffffffff. +1 gives 0 */ ++ return ( *(s32*)mac & ((s16*)mac)[2] ) + 1 == 0; ++} ++ ++static inline int ++mac_is_zero(const u8 *mac) ++{ ++ return ( *(u32*)mac | ((u16*)mac)[2] ) == 0; ++} ++ ++static inline int ++mac_is_directed(const u8 *mac) ++{ ++ return (mac[0] & 1)==0; ++} ++ ++static inline int ++mac_is_mcast(const u8 *mac) ++{ ++ return (mac[0] & 1) && !mac_is_bcast(mac); ++} ++ ++#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X" ++#define MAC(bytevector) \ ++ ((unsigned char *)bytevector)[0], \ ++ ((unsigned char *)bytevector)[1], \ ++ ((unsigned char *)bytevector)[2], \ ++ ((unsigned char *)bytevector)[3], \ ++ ((unsigned char *)bytevector)[4], \ ++ ((unsigned char *)bytevector)[5] ++ ++ ++/*********************************************************************** ++** Random helpers ++*/ ++#define TO_STRING(x) #x ++#define STRING(x) TO_STRING(x) ++ ++#define CLEAR_BIT(val, mask) ((val) &= ~(mask)) ++#define SET_BIT(val, mask) ((val) |= (mask)) ++ ++/* undefined if v==0 */ ++static inline unsigned int ++lowest_bit(u16 v) ++{ ++ unsigned int n = 0; ++ while (!(v & 0xf)) { v>>=4; n+=4; } ++ while (!(v & 1)) { v>>=1; n++; } ++ return n; ++} ++ ++/* undefined if v==0 */ ++static inline unsigned int ++highest_bit(u16 v) ++{ ++ unsigned int n = 0; ++ while (v>0xf) { v>>=4; n+=4; } ++ while (v>1) { v>>=1; n++; } ++ return n; ++} ++ ++/* undefined if v==0 */ ++static inline int ++has_only_one_bit(u16 v) ++{ ++ return ((v-1) ^ v) >= v; ++} ++ ++ ++static inline int ++is_hidden_essid(char *essid) ++{ ++ return (('\0' == essid[0]) || ++ ((' ' == essid[0]) && ('\0' == essid[1]))); ++} ++ ++/*********************************************************************** ++** LOCKING ++** We have adev->sem and adev->lock. ++** ++** We employ following naming convention in order to get locking right: ++** ++** acx_e_xxxx - external entry points called from process context. ++** It is okay to sleep. adev->sem is to be taken on entry. ++** acx_i_xxxx - external entry points possibly called from atomic context. ++** Sleeping is not allowed (and thus down(sem) is not legal!) ++** acx_s_xxxx - potentially sleeping functions. Do not ever call under lock! ++** acx_l_xxxx - functions which expect lock to be already taken. ++** rest - non-sleeping functions which do not require locking ++** but may be run under lock ++** ++** A small number of local helpers do not have acx_[eisl]_ prefix. ++** They are always close to caller and are to be reviewed locally. ++** ++** Theory of operation: ++** ++** All process-context entry points (_e_ functions) take sem ++** immediately. IRQ handler and other 'atomic-context' entry points ++** (_i_ functions) take lock immediately on entry, but dont take sem ++** because that might sleep. ++** ++** Thus *all* code is either protected by sem or lock, or both. ++** ++** Code which must not run concurrently with IRQ takes lock. ++** Such code is marked with _l_. ++** ++** This results in the following rules of thumb useful in code review: ++** ++** + If a function calls _s_ fn, it must be an _s_ itself. ++** + You can call _l_ fn only (a) from another _l_ fn ++** or (b) from _s_, _e_ or _i_ fn by taking lock, calling _l_, ++** and dropping lock. ++** + All IRQ code runs under lock. ++** + Any _s_ fn is running under sem. ++** + Code under sem can race only with IRQ code. ++** + Code under sem+lock cannot race with anything. ++*/ ++ ++/* These functions *must* be inline or they will break horribly on SPARC, due ++ * to its weird semantics for save/restore flags */ ++ ++#if defined(PARANOID_LOCKING) /* Lock debugging */ ++ ++void acx_lock_debug(acx_device_t *adev, const char* where); ++void acx_unlock_debug(acx_device_t *adev, const char* where); ++void acx_down_debug(acx_device_t *adev, const char* where); ++void acx_up_debug(acx_device_t *adev, const char* where); ++void acx_lock_unhold(void); ++void acx_sem_unhold(void); ++ ++static inline void ++acx_lock_helper(acx_device_t *adev, unsigned long *fp, const char* where) ++{ ++ acx_lock_debug(adev, where); ++ spin_lock_irqsave(&adev->lock, *fp); ++} ++static inline void ++acx_unlock_helper(acx_device_t *adev, unsigned long *fp, const char* where) ++{ ++ acx_unlock_debug(adev, where); ++ spin_unlock_irqrestore(&adev->lock, *fp); ++} ++static inline void ++acx_down_helper(acx_device_t *adev, const char* where) ++{ ++ acx_down_debug(adev, where); ++} ++static inline void ++acx_up_helper(acx_device_t *adev, const char* where) ++{ ++ acx_up_debug(adev, where); ++} ++#define acx_lock(adev, flags) acx_lock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__)) ++#define acx_unlock(adev, flags) acx_unlock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__)) ++#define acx_sem_lock(adev) acx_down_helper(adev, __FILE__ ":" STRING(__LINE__)) ++#define acx_sem_unlock(adev) acx_up_helper(adev, __FILE__ ":" STRING(__LINE__)) ++ ++#elif defined(DO_LOCKING) ++ ++#define acx_lock(adev, flags) spin_lock_irqsave(&adev->lock, flags) ++#define acx_unlock(adev, flags) spin_unlock_irqrestore(&adev->lock, flags) ++#define acx_sem_lock(adev) down(&adev->sem) ++#define acx_sem_unlock(adev) up(&adev->sem) ++#define acx_lock_unhold() ((void)0) ++#define acx_sem_unhold() ((void)0) ++ ++#else /* no locking! :( */ ++ ++#define acx_lock(adev, flags) ((void)0) ++#define acx_unlock(adev, flags) ((void)0) ++#define acx_sem_lock(adev) ((void)0) ++#define acx_sem_unlock(adev) ((void)0) ++#define acx_lock_unhold() ((void)0) ++#define acx_sem_unhold() ((void)0) ++ ++#endif ++ ++ ++/*********************************************************************** ++*/ ++ ++/* Can race with rx path (which is not protected by sem): ++** rx -> process_[re]assocresp() -> set_status(ASSOCIATED) -> wake_queue() ++** Can race with tx_complete IRQ: ++** IRQ -> acxpci_l_clean_txdesc -> acx_wake_queue ++** Review carefully all callsites */ ++static inline void ++acx_stop_queue(struct net_device *ndev, const char *msg) ++{ ++ if (netif_queue_stopped(ndev)) ++ return; ++ ++ netif_stop_queue(ndev); ++ if (msg) ++ log(L_BUFT, "tx: stop queue %s\n", msg); ++} ++ ++static inline int ++acx_queue_stopped(struct net_device *ndev) ++{ ++ return netif_queue_stopped(ndev); ++} ++ ++/* ++static inline void ++acx_start_queue(struct net_device *ndev, const char *msg) ++{ ++ netif_start_queue(ndev); ++ if (msg) ++ log(L_BUFT, "tx: start queue %s\n", msg); ++} ++*/ ++ ++static inline void ++acx_wake_queue(struct net_device *ndev, const char *msg) ++{ ++ netif_wake_queue(ndev); ++ if (msg) ++ log(L_BUFT, "tx: wake queue %s\n", msg); ++} ++ ++static inline void ++acx_carrier_off(struct net_device *ndev, const char *msg) ++{ ++ netif_carrier_off(ndev); ++ if (msg) ++ log(L_BUFT, "tx: carrier off %s\n", msg); ++} ++ ++static inline void ++acx_carrier_on(struct net_device *ndev, const char *msg) ++{ ++ netif_carrier_on(ndev); ++ if (msg) ++ log(L_BUFT, "tx: carrier on %s\n", msg); ++} ++ ++/* This function does not need locking UNLESS you call it ++** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can ++** wake queue. This can race with stop_queue elsewhere. */ ++void acx_set_status(acx_device_t *adev, u16 status); ++ ++ ++/*********************************************************************** ++** Communication with firmware ++*/ ++#define CMD_TIMEOUT_MS(n) (n) ++#define ACX_CMD_TIMEOUT_DEFAULT CMD_TIMEOUT_MS(50) ++ ++#if ACX_DEBUG ++ ++/* We want to log cmd names */ ++int acxpci_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr); ++int acxmem_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr); ++int acxusb_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr); ++static inline int ++acx_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr) ++{ ++ if (IS_MEM(adev)) ++ return acxmem_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr); ++ if (IS_PCI(adev)) ++ return acxpci_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr); ++ return acxusb_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr); ++} ++#define acx_s_issue_cmd(adev,cmd,param,len) \ ++ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,ACX_CMD_TIMEOUT_DEFAULT,#cmd) ++#define acx_s_issue_cmd_timeo(adev,cmd,param,len,timeo) \ ++ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,timeo,#cmd) ++int acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* str); ++#define acx_s_configure(adev,pdr,type) \ ++ acx_s_configure_debug(adev,pdr,type,#type) ++int acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type, const char* str); ++#define acx_s_interrogate(adev,pdr,type) \ ++ acx_s_interrogate_debug(adev,pdr,type,#type) ++ ++#else ++ ++int acxpci_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout); ++int acxmem_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout); ++int acxusb_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout); ++static inline int ++acx_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout) ++{ ++ if (IS_MEM(adev)) ++ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, timeout); ++ if (IS_PCI(adev)) ++ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, timeout); ++ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, timeout); ++} ++static inline int ++acx_s_issue_cmd(acx_device_t *adev, unsigned cmd, void *param, unsigned len) ++{ ++ if (IS_MEM(adev)) ++ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT); ++ if (IS_PCI(adev)) ++ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT); ++ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT); ++} ++int acx_s_configure(acx_device_t *adev, void *pdr, int type); ++int acx_s_interrogate(acx_device_t *adev, void *pdr, int type); ++ ++#endif ++ ++void acx_s_cmd_start_scan(acx_device_t *adev); ++ ++ ++/*********************************************************************** ++** Ioctls ++*/ ++int ++acx111pci_ioctl_info( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra); ++int ++acx100pci_ioctl_set_phy_amp_bias( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra); ++int ++acx100mem_ioctl_set_phy_amp_bias( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra); ++ ++ ++/*********************************************************************** ++** /proc ++*/ ++#ifdef CONFIG_PROC_FS ++int acx_proc_register_entries(const struct net_device *ndev); ++int acx_proc_unregister_entries(const struct net_device *ndev); ++#else ++static inline int ++acx_proc_register_entries(const struct net_device *ndev) { return OK; } ++static inline int ++acx_proc_unregister_entries(const struct net_device *ndev) { return OK; } ++#endif ++ ++ ++/*********************************************************************** ++*/ ++firmware_image_t *acx_s_read_fw(struct device *dev, const char *file, u32 *size); ++int acxpci_s_upload_radio(acx_device_t *adev); ++int acxmem_s_upload_radio(acx_device_t *adev); ++ ++ ++/*********************************************************************** ++** Unsorted yet :) ++*/ ++int acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf); ++int acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf); ++int acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf); ++static inline int ++acx_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf) ++{ ++ if (IS_MEM(adev)) ++ return acxmem_s_read_phy_reg(adev, reg, charbuf); ++ if (IS_PCI(adev)) ++ return acxpci_s_read_phy_reg(adev, reg, charbuf); ++ return acxusb_s_read_phy_reg(adev, reg, charbuf); ++} ++ ++int acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value); ++int acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value); ++int acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value); ++static inline int ++acx_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value) ++{ ++ if (IS_MEM(adev)) ++ return acxmem_s_write_phy_reg(adev, reg, value); ++ if (IS_PCI(adev)) ++ return acxpci_s_write_phy_reg(adev, reg, value); ++ return acxusb_s_write_phy_reg(adev, reg, value); ++} ++ ++tx_t* acxpci_l_alloc_tx(acx_device_t *adev); ++tx_t* acxmem_l_alloc_tx(acx_device_t *adev); ++tx_t* acxusb_l_alloc_tx(acx_device_t *adev); ++static inline tx_t* ++acx_l_alloc_tx(acx_device_t *adev) ++{ ++ if (IS_MEM(adev)) ++ return acxmem_l_alloc_tx(adev); ++ if (IS_PCI(adev)) ++ return acxpci_l_alloc_tx(adev); ++ return acxusb_l_alloc_tx(adev); ++} ++ ++void acxusb_l_dealloc_tx(tx_t *tx_opaque); ++void acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque); ++static inline void ++acx_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque) ++{ ++#ifdef ACX_MEM ++ acxmem_l_dealloc_tx (adev, tx_opaque); ++#else ++ if (IS_USB(adev)) ++ acxusb_l_dealloc_tx(tx_opaque); ++#endif ++} ++ ++void* acxpci_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque); ++void* acxmem_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque); ++void* acxusb_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque); ++static inline void* ++acx_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque) ++{ ++#if defined (ACX_MEM) ++ return acxmem_l_get_txbuf(adev, tx_opaque); ++#else ++ if (IS_PCI(adev)) ++ return acxpci_l_get_txbuf(adev, tx_opaque); ++ return acxusb_l_get_txbuf(adev, tx_opaque); ++#endif ++} ++ ++void acxpci_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len); ++void acxmem_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len); ++void acxusb_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len); ++static inline void ++acx_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len) ++{ ++#if defined (ACX_MEM) ++ acxmem_l_tx_data(adev, tx_opaque, len); ++#else ++ if (IS_PCI(adev)) ++ acxpci_l_tx_data(adev, tx_opaque, len); ++ else ++ acxusb_l_tx_data(adev, tx_opaque, len); ++#endif ++} ++ ++static inline wlan_hdr_t* ++acx_get_wlan_hdr(acx_device_t *adev, const rxbuffer_t *rxbuf) ++{ ++ return (wlan_hdr_t*)((u8*)&rxbuf->hdr_a3 + adev->phy_header_len); ++} ++ ++void acxpci_l_power_led(acx_device_t *adev, int enable); ++int acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf); ++unsigned int acxpci_l_clean_txdesc(acx_device_t *adev); ++void acxpci_l_clean_txdesc_emergency(acx_device_t *adev); ++int acxpci_s_create_hostdesc_queues(acx_device_t *adev); ++void acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start); ++void acxpci_free_desc_queues(acx_device_t *adev); ++char* acxpci_s_proc_diag_output(char *p, acx_device_t *adev); ++int acxpci_proc_eeprom_output(char *p, acx_device_t *adev); ++void acxpci_set_interrupt_mask(acx_device_t *adev); ++int acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm); ++ ++void acxmem_l_power_led(acx_device_t *adev, int enable); ++int acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf); ++unsigned int acxmem_l_clean_txdesc(acx_device_t *adev); ++void acxmem_l_clean_txdesc_emergency(acx_device_t *adev); ++int acxmem_s_create_hostdesc_queues(acx_device_t *adev); ++void acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start); ++void acxmem_free_desc_queues(acx_device_t *adev); ++char* acxmem_s_proc_diag_output(char *p, acx_device_t *adev); ++int acxmem_proc_eeprom_output(char *p, acx_device_t *adev); ++void acxmem_set_interrupt_mask(acx_device_t *adev); ++int acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm); ++ ++void acx_s_msleep(int ms); ++int acx_s_init_mac(acx_device_t *adev); ++void acx_set_reg_domain(acx_device_t *adev, unsigned char reg_dom_id); ++void acx_set_timer(acx_device_t *adev, int timeout_us); ++void acx_update_capabilities(acx_device_t *adev); ++void acx_s_start(acx_device_t *adev); ++ ++void acx_s_update_card_settings(acx_device_t *adev); ++void acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg); ++void acx_l_update_ratevector(acx_device_t *adev); ++ ++void acx_init_task_scheduler(acx_device_t *adev); ++void acx_schedule_task(acx_device_t *adev, unsigned int set_flag); ++ ++int acx_e_ioctl_old(struct net_device *ndev, struct ifreq *ifr, int cmd); ++ ++client_t *acx_l_sta_list_get(acx_device_t *adev, const u8 *address); ++void acx_l_sta_list_del(acx_device_t *adev, client_t *clt); ++ ++int acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt); ++void acx_i_timer(unsigned long a); ++int acx_s_complete_scan(acx_device_t *adev); ++ ++struct sk_buff *acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf); ++int acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb); ++ ++u8 acx_signal_determine_quality(u8 signal, u8 noise); ++ ++void acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf); ++void acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc, ++ u16 intended_rate, u8 rate100, u16 rate111, u8 error, ++ int pkts_to_ignore); ++ ++void acx_dump_bytes(const void *, int); ++void acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr); ++ ++u8 acx_rate111to100(u16); ++ ++void acx_s_set_defaults(acx_device_t *adev); ++ ++#if !ACX_DEBUG ++static inline const char* acx_get_packet_type_string(u16 fc) { return ""; } ++#else ++const char* acx_get_packet_type_string(u16 fc); ++#endif ++const char* acx_cmd_status_str(unsigned int state); ++ ++int acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev); ++ ++void great_inquisitor(acx_device_t *adev); ++ ++void acx_s_get_firmware_version(acx_device_t *adev); ++void acx_display_hardware_details(acx_device_t *adev); ++ ++int acx_e_change_mtu(struct net_device *ndev, int mtu); ++struct net_device_stats* acx_e_get_stats(struct net_device *ndev); ++struct iw_statistics* acx_e_get_wireless_stats(struct net_device *ndev); ++ ++#ifdef ACX_MEM ++int __init acxmem_e_init_module(void); ++void __exit acxmem_e_cleanup_module(void); ++void acxmem_e_release(struct device *dev); ++#else ++int __init acxpci_e_init_module(void); ++int __init acxusb_e_init_module(void); ++void __exit acxpci_e_cleanup_module(void); ++void __exit acxusb_e_cleanup_module(void); ++#endif ++int __init acx_cs_init(void); ++void __exit acx_cs_cleanup(void); +Index: linux-2.6.23/drivers/net/wireless/acx/acx.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/acx.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,14 @@ ++#if defined(CONFIG_ACX_MEM) && !defined(ACX_MEM) ++#define ACX_MEM ++#endif ++ ++#if defined(CONFIG_ACX_CS) && !defined(ACX_MEM) ++#define ACX_MEM ++#endif ++ ++#include "acx_config.h" ++#include "wlan_compat.h" ++#include "wlan_hdr.h" ++#include "wlan_mgmt.h" ++#include "acx_struct.h" ++#include "acx_func.h" +Index: linux-2.6.23/drivers/net/wireless/acx/acx_hw.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/acx_hw.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,18 @@ ++/* ++ * Interface for ACX slave memory driver ++ * ++ * Copyright (c) 2006 SDG Systems, LLC ++ * ++ * GPL ++ * ++ */ ++ ++#ifndef _ACX_HW_H ++#define _ACX_HW_H ++ ++struct acx_hardware_data { ++ int (*start_hw)( void ); ++ int (*stop_hw)( void ); ++}; ++ ++#endif /* _ACX_HW_H */ +Index: linux-2.6.23/drivers/net/wireless/acx/acx_struct.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/acx_struct.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,2114 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++/*********************************************************************** ++** Forward declarations of types ++*/ ++typedef struct tx tx_t; ++typedef struct acx_device acx_device_t; ++typedef struct client client_t; ++typedef struct rxdesc rxdesc_t; ++typedef struct txdesc txdesc_t; ++typedef struct rxhostdesc rxhostdesc_t; ++typedef struct txhostdesc txhostdesc_t; ++ ++ ++/*********************************************************************** ++** Debug / log functionality ++*/ ++enum { ++ L_LOCK = (ACX_DEBUG>1)*0x0001, /* locking debug log */ ++ L_INIT = (ACX_DEBUG>0)*0x0002, /* special card initialization logging */ ++ L_IRQ = (ACX_DEBUG>0)*0x0004, /* interrupt stuff */ ++ L_ASSOC = (ACX_DEBUG>0)*0x0008, /* assocation (network join) and station log */ ++ L_FUNC = (ACX_DEBUG>1)*0x0020, /* logging of function enter / leave */ ++ L_XFER = (ACX_DEBUG>1)*0x0080, /* logging of transfers and mgmt */ ++ L_DATA = (ACX_DEBUG>1)*0x0100, /* logging of transfer data */ ++ L_DEBUG = (ACX_DEBUG>1)*0x0200, /* log of debug info */ ++ L_IOCTL = (ACX_DEBUG>0)*0x0400, /* log ioctl calls */ ++ L_CTL = (ACX_DEBUG>1)*0x0800, /* log of low-level ctl commands */ ++ L_BUFR = (ACX_DEBUG>1)*0x1000, /* debug rx buffer mgmt (ring buffer etc.) */ ++ L_XFER_BEACON = (ACX_DEBUG>1)*0x2000, /* also log beacon packets */ ++ L_BUFT = (ACX_DEBUG>1)*0x4000, /* debug tx buffer mgmt (ring buffer etc.) */ ++ L_USBRXTX = (ACX_DEBUG>0)*0x8000, /* debug USB rx/tx operations */ ++ L_BUF = L_BUFR + L_BUFT, ++ L_ANY = 0xffff ++}; ++ ++#if ACX_DEBUG ++extern unsigned int acx_debug; ++#else ++enum { acx_debug = 0 }; ++#endif ++ ++ ++/*********************************************************************** ++** Random helpers ++*/ ++#define ACX_PACKED __attribute__ ((packed)) ++ ++#define VEC_SIZE(a) (sizeof(a)/sizeof(a[0])) ++ ++/* Use worker_queues for 2.5/2.6 kernels and queue tasks for 2.4 kernels ++ (used for the 'bottom half' of the interrupt routine) */ ++ ++#include ++#define USE_WORKER_TASKS ++#define WORK_STRUCT struct work_struct ++#define SCHEDULE_WORK schedule_work ++#define FLUSH_SCHEDULED_WORK flush_scheduled_work ++ ++ ++/*********************************************************************** ++** Constants ++*/ ++#define OK 0 ++#define NOT_OK 1 ++ ++/* The supported chip models */ ++#define CHIPTYPE_ACX100 1 ++#define CHIPTYPE_ACX111 2 ++ ++#define IS_ACX100(adev) ((adev)->chip_type == CHIPTYPE_ACX100) ++#define IS_ACX111(adev) ((adev)->chip_type == CHIPTYPE_ACX111) ++ ++/* Supported interfaces */ ++#define DEVTYPE_PCI 0 ++#define DEVTYPE_USB 1 ++#define DEVTYPE_MEM 2 ++ ++#if !defined(CONFIG_ACX_PCI) && !defined(CONFIG_ACX_USB) && !defined(CONFIG_ACX_MEM) && !defined(CONFIG_ACX_CS) ++#error Driver must include PCI, USB, PCMCIA or memory mapped interface support. You selected none of them. ++#endif ++ ++#if defined(CONFIG_ACX_PCI) ++ #if !defined(CONFIG_ACX_USB) ++ #define IS_PCI(adev) 1 ++ #else ++ #define IS_PCI(adev) ((adev)->dev_type == DEVTYPE_PCI) ++ #endif ++#else ++ #define IS_PCI(adev) 0 ++#endif ++ ++#if defined(CONFIG_ACX_USB) ++ #if !defined(CONFIG_ACX_PCI) ++ #define IS_USB(adev) 1 ++ #else ++ #define IS_USB(adev) ((adev)->dev_type == DEVTYPE_USB) ++ #endif ++#else ++ #define IS_USB(adev) 0 ++#endif ++ ++#if defined(CONFIG_ACX_MEM) || defined(CONFIG_ACX_CS) ++ #define IS_MEM(adev) 1 ++#else ++ #define IS_MEM(adev) 0 ++#endif ++ ++/* Driver defaults */ ++#define DEFAULT_DTIM_INTERVAL 10 ++/* used to be 2048, but FreeBSD driver changed it to 4096 to work properly ++** in noisy wlans */ ++#define DEFAULT_MSDU_LIFETIME 4096 ++#define DEFAULT_RTS_THRESHOLD 2312 /* max. size: disable RTS mechanism */ ++#define DEFAULT_BEACON_INTERVAL 100 ++ ++#define ACX100_BAP_DATALEN_MAX 4096 ++#define ACX100_RID_GUESSING_MAXLEN 2048 /* I'm not really sure */ ++#define ACX100_RIDDATA_MAXLEN ACX100_RID_GUESSING_MAXLEN ++ ++/* Support Constants */ ++/* Radio type names, found in Win98 driver's TIACXLN.INF */ ++#define RADIO_MAXIM_0D 0x0d ++#define RADIO_RFMD_11 0x11 ++#define RADIO_RALINK_15 0x15 ++/* used in ACX111 cards (WG311v2, WL-121, ...): */ ++#define RADIO_RADIA_16 0x16 ++/* most likely *sometimes* used in ACX111 cards: */ ++#define RADIO_UNKNOWN_17 0x17 ++/* FwRad19.bin was found in a Safecom driver; must be an ACX111 radio: */ ++#define RADIO_UNKNOWN_19 0x19 ++#define RADIO_UNKNOWN_1B 0x1b /* radio in SafeCom SWLUT-54125 USB adapter; entirely unknown!! */ ++ ++/* Controller Commands */ ++/* can be found in table cmdTable in firmware "Rev. 1.5.0" (FW150) */ ++#define ACX1xx_CMD_RESET 0x00 ++#define ACX1xx_CMD_INTERROGATE 0x01 ++#define ACX1xx_CMD_CONFIGURE 0x02 ++#define ACX1xx_CMD_ENABLE_RX 0x03 ++#define ACX1xx_CMD_ENABLE_TX 0x04 ++#define ACX1xx_CMD_DISABLE_RX 0x05 ++#define ACX1xx_CMD_DISABLE_TX 0x06 ++#define ACX1xx_CMD_FLUSH_QUEUE 0x07 ++#define ACX1xx_CMD_SCAN 0x08 ++#define ACX1xx_CMD_STOP_SCAN 0x09 ++#define ACX1xx_CMD_CONFIG_TIM 0x0a ++#define ACX1xx_CMD_JOIN 0x0b ++#define ACX1xx_CMD_WEP_MGMT 0x0c ++#ifdef OLD_FIRMWARE_VERSIONS ++#define ACX100_CMD_HALT 0x0e /* mapped to unknownCMD in FW150 */ ++#else ++#define ACX1xx_CMD_MEM_READ 0x0d ++#define ACX1xx_CMD_MEM_WRITE 0x0e ++#endif ++#define ACX1xx_CMD_SLEEP 0x0f ++#define ACX1xx_CMD_WAKE 0x10 ++#define ACX1xx_CMD_UNKNOWN_11 0x11 /* mapped to unknownCMD in FW150 */ ++#define ACX100_CMD_INIT_MEMORY 0x12 ++#define ACX1FF_CMD_DISABLE_RADIO 0x12 /* new firmware? TNETW1450? */ ++#define ACX1xx_CMD_CONFIG_BEACON 0x13 ++#define ACX1xx_CMD_CONFIG_PROBE_RESPONSE 0x14 ++#define ACX1xx_CMD_CONFIG_NULL_DATA 0x15 ++#define ACX1xx_CMD_CONFIG_PROBE_REQUEST 0x16 ++#define ACX1xx_CMD_FCC_TEST 0x17 ++#define ACX1xx_CMD_RADIOINIT 0x18 ++#define ACX111_CMD_RADIOCALIB 0x19 ++#define ACX1FF_CMD_NOISE_HISTOGRAM 0x1c /* new firmware? TNETW1450? */ ++#define ACX1FF_CMD_RX_RESET 0x1d /* new firmware? TNETW1450? */ ++#define ACX1FF_CMD_LNA_CONTROL 0x20 /* new firmware? TNETW1450? */ ++#define ACX1FF_CMD_CONTROL_DBG_TRACE 0x21 /* new firmware? TNETW1450? */ ++ ++/* 'After Interrupt' Commands */ ++#define ACX_AFTER_IRQ_CMD_STOP_SCAN 0x01 ++#define ACX_AFTER_IRQ_CMD_ASSOCIATE 0x02 ++#define ACX_AFTER_IRQ_CMD_RADIO_RECALIB 0x04 ++#define ACX_AFTER_IRQ_UPDATE_CARD_CFG 0x08 ++#define ACX_AFTER_IRQ_TX_CLEANUP 0x10 ++#define ACX_AFTER_IRQ_COMPLETE_SCAN 0x20 ++#define ACX_AFTER_IRQ_RESTART_SCAN 0x40 ++ ++/*********************************************************************** ++** Tx/Rx buffer sizes and watermarks ++** ++** This will alloc and use DMAable buffers of ++** WLAN_A4FR_MAXLEN_WEP_FCS * (RX_CNT + TX_CNT) bytes ++** RX/TX_CNT=32 -> ~150k DMA buffers ++** RX/TX_CNT=16 -> ~75k DMA buffers ++** ++** 2005-10-10: reduced memory usage by lowering both to 16 ++*/ ++#define RX_CNT 16 ++#define TX_CNT 16 ++ ++/* we clean up txdescs when we have N free txdesc: */ ++#define TX_CLEAN_BACKLOG (TX_CNT/4) ++#define TX_START_CLEAN (TX_CNT - TX_CLEAN_BACKLOG) ++#define TX_EMERG_CLEAN 2 ++/* we stop queue if we have < N free txbufs: */ ++#define TX_STOP_QUEUE 3 ++/* we start queue if we have >= N free txbufs: */ ++#define TX_START_QUEUE 5 ++ ++/*********************************************************************** ++** Interrogate/Configure cmd constants ++** ++** NB: length includes JUST the data part of the IE ++** (does not include size of the (type,len) pair) ++** ++** TODO: seems that acx100, acx100usb, acx111 have some differences, ++** fix code with regard to this! ++*/ ++ ++#define DEF_IE(name, val, len) enum { ACX##name=val, ACX##name##_LEN=len } ++ ++/* Information Elements: Network Parameters, Static Configuration Entities */ ++/* these are handled by real_cfgtable in firmware "Rev 1.5.0" (FW150) */ ++DEF_IE(1xx_IE_UNKNOWN_00 ,0x0000, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(100_IE_ACX_TIMER ,0x0001, 0x10); ++DEF_IE(1xx_IE_POWER_MGMT ,0x0002, 0x06); /* TNETW1450: length 0x18!! */ ++DEF_IE(1xx_IE_QUEUE_CONFIG ,0x0003, 0x1c); ++DEF_IE(100_IE_BLOCK_SIZE ,0x0004, 0x02); ++DEF_IE(1FF_IE_SLOT_TIME ,0x0004, 0x08); /* later firmware versions only? */ ++DEF_IE(1xx_IE_MEMORY_CONFIG_OPTIONS ,0x0005, 0x14); ++DEF_IE(1FF_IE_QUEUE_HEAD ,0x0005, 0x14 /* FIXME: length? */); ++DEF_IE(1xx_IE_RATE_FALLBACK ,0x0006, 0x01); /* TNETW1450: length 2 */ ++DEF_IE(100_IE_WEP_OPTIONS ,0x0007, 0x03); ++DEF_IE(111_IE_RADIO_BAND ,0x0007, -1); ++DEF_IE(1FF_IE_TIMING_CFG ,0x0007, -1); /* later firmware versions; TNETW1450 only? */ ++DEF_IE(100_IE_SSID ,0x0008, 0x20); /* huh? */ ++DEF_IE(1xx_IE_MEMORY_MAP ,0x0008, 0x28); /* huh? TNETW1450 has length 0x40!! */ ++DEF_IE(1xx_IE_SCAN_STATUS ,0x0009, 0x04); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(1xx_IE_ASSOC_ID ,0x000a, 0x02); ++DEF_IE(1xx_IE_UNKNOWN_0B ,0x000b, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(1FF_IE_TX_POWER_LEVEL_TABLE ,0x000b, 0x18); /* later firmware versions; TNETW1450 only? */ ++DEF_IE(100_IE_UNKNOWN_0C ,0x000c, -1); /* very small implementation in FW150! */ ++/* ACX100 has an equivalent struct in the cmd mailbox directly after reset. ++ * 0x14c seems extremely large, will trash stack on failure (memset!) ++ * in case of small input struct --> OOPS! */ ++DEF_IE(111_IE_CONFIG_OPTIONS ,0x000c, 0x14c); ++DEF_IE(1xx_IE_FWREV ,0x000d, 0x18); ++DEF_IE(1xx_IE_FCS_ERROR_COUNT ,0x000e, 0x04); ++DEF_IE(1xx_IE_MEDIUM_USAGE ,0x000f, 0x08); ++DEF_IE(1xx_IE_RXCONFIG ,0x0010, 0x04); ++DEF_IE(100_IE_UNKNOWN_11 ,0x0011, -1); /* NONBINARY: large implementation in FW150! link quality readings or so? */ ++DEF_IE(111_IE_QUEUE_THRESH ,0x0011, -1); ++DEF_IE(100_IE_UNKNOWN_12 ,0x0012, -1); /* NONBINARY: VERY large implementation in FW150!! */ ++DEF_IE(111_IE_BSS_POWER_SAVE ,0x0012, /* -1 */ 2); ++DEF_IE(1xx_IE_FIRMWARE_STATISTICS ,0x0013, 0x9c); /* TNETW1450: length 0x134!! */ ++DEF_IE(1FF_IE_RX_INTR_CONFIG ,0x0014, 0x14); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1xx_IE_FEATURE_CONFIG ,0x0015, 0x08); ++DEF_IE(111_IE_KEY_CHOOSE ,0x0016, 0x04); /* for rekeying. really len=4?? */ ++DEF_IE(1FF_IE_MISC_CONFIG_TABLE ,0x0017, 0x04); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_WONE_CONFIG ,0x0018, -1); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_TID_CONFIG ,0x001a, 0x2c); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_CALIB_ASSESSMENT ,0x001e, 0x04); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_BEACON_FILTER_OPTIONS ,0x001f, 0x02); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_LOW_RSSI_THRESH_OPT ,0x0020, 0x04); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_NOISE_HISTOGRAM_RESULTS ,0x0021, 0x30); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_PACKET_DETECT_THRESH ,0x0023, 0x04); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_TX_CONFIG_OPTIONS ,0x0024, 0x04); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_CCA_THRESHOLD ,0x0025, 0x02); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_EVENT_MASK ,0x0026, 0x08); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_DTIM_PERIOD ,0x0027, 0x02); /* later firmware versions, TNETW1450 only? */ ++DEF_IE(1FF_IE_ACI_CONFIG_SET ,0x0029, 0x06); /* later firmware versions; maybe TNETW1450 only? */ ++DEF_IE(1FF_IE_EEPROM_VER ,0x0030, 0x04); /* later firmware versions; maybe TNETW1450 only? */ ++DEF_IE(1xx_IE_DOT11_STATION_ID ,0x1001, 0x06); ++DEF_IE(100_IE_DOT11_UNKNOWN_1002 ,0x1002, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(111_IE_DOT11_FRAG_THRESH ,0x1002, -1); /* mapped to cfgInvalid in FW150; TNETW1450 has length 2!! */ ++DEF_IE(100_IE_DOT11_BEACON_PERIOD ,0x1003, 0x02); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(1xx_IE_DOT11_DTIM_PERIOD ,0x1004, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(1FF_IE_DOT11_MAX_RX_LIFETIME ,0x1004, -1); /* later firmware versions; maybe TNETW1450 only? */ ++DEF_IE(1xx_IE_DOT11_SHORT_RETRY_LIMIT ,0x1005, 0x01); /* TNETW1450: length 2 */ ++DEF_IE(1xx_IE_DOT11_LONG_RETRY_LIMIT ,0x1006, 0x01); /* TNETW1450: length 2 */ ++DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE ,0x1007, 0x20); /* configure default keys; TNETW1450 has length 0x24!! */ ++DEF_IE(1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME ,0x1008, 0x04); ++DEF_IE(1xx_IE_DOT11_GROUP_ADDR ,0x1009, -1); ++DEF_IE(1xx_IE_DOT11_CURRENT_REG_DOMAIN ,0x100a, 0x02); ++/* It's harmless to have larger struct. Use USB case always. */ ++DEF_IE(1xx_IE_DOT11_CURRENT_ANTENNA ,0x100b, 0x02); /* in fact len=1 for PCI */ ++DEF_IE(1xx_IE_DOT11_UNKNOWN_100C ,0x100c, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(1xx_IE_DOT11_TX_POWER_LEVEL ,0x100d, 0x01); /* TNETW1450 has length 2!! */ ++DEF_IE(1xx_IE_DOT11_CURRENT_CCA_MODE ,0x100e, 0x02); /* in fact len=1 for PCI */ ++/* USB doesn't return anything - len==0?! */ ++DEF_IE(100_IE_DOT11_ED_THRESHOLD ,0x100f, 0x04); ++DEF_IE(1xx_IE_DOT11_WEP_DEFAULT_KEY_SET ,0x1010, 0x01); /* set default key ID; TNETW1450: length 2 */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1011 ,0x1011, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(1FF_IE_DOT11_CURR_5GHZ_REGDOM ,0x1011, -1); /* later firmware versions; maybe TNETW1450 only? */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1012 ,0x1012, -1); /* mapped to cfgInvalid in FW150 */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1013 ,0x1013, -1); /* mapped to cfgInvalid in FW150 */ ++ ++#if 0 ++/* Experimentally obtained on acx100, fw 1.9.8.b ++** -1 means that fw returned 'invalid IE' ++** 0200 FC00 nnnn... are test read contents: u16 type, u16 len, data ++** (AA are poison bytes marking bytes not written by fw) ++** ++** Looks like acx100 fw does not update len field (thus len=256-4=FC here) ++** A number of IEs seem to trash type,len fields ++** IEs marked 'huge' return gobs of data (no poison bytes remain) ++*/ ++DEF_IE(100_IE_INVAL_00, 0x0000, -1); ++DEF_IE(100_IE_INVAL_01, 0x0001, -1); /* IE_ACX_TIMER, len=16 on older fw */ ++DEF_IE(100_IE_POWER_MGMT, 0x0002, 4); /* 0200FC00 00040000 AAAAAAAA */ ++DEF_IE(100_IE_QUEUE_CONFIG, 0x0003, 28); /* 0300FC00 48060000 9CAD0000 0101AAAA DCB00000 E4B00000 9CAA0000 00AAAAAA */ ++DEF_IE(100_IE_BLOCK_SIZE, 0x0004, 2); /* 0400FC00 0001AAAA AAAAAAAA AAAAAAAA */ ++/* write only: */ ++DEF_IE(100_IE_MEMORY_CONFIG_OPTIONS, 0x0005, 20); ++DEF_IE(100_IE_RATE_FALLBACK, 0x0006, 1); /* 0600FC00 00AAAAAA AAAAAAAA AAAAAAAA */ ++/* write only: */ ++DEF_IE(100_IE_WEP_OPTIONS, 0x0007, 3); ++DEF_IE(100_IE_MEMORY_MAP, 0x0008, 40); /* huge: 0800FC00 30000000 6CA20000 70A20000... */ ++/* gives INVAL on read: */ ++DEF_IE(100_IE_SCAN_STATUS, 0x0009, -1); ++DEF_IE(100_IE_ASSOC_ID, 0x000a, 2); /* huge: 0A00FC00 00000000 01040800 00000000... */ ++DEF_IE(100_IE_INVAL_0B, 0x000b, -1); ++/* 'command rejected': */ ++DEF_IE(100_IE_CONFIG_OPTIONS, 0x000c, -3); ++DEF_IE(100_IE_FWREV, 0x000d, 24); /* 0D00FC00 52657620 312E392E 382E6200 AAAAAAAA AAAAAAAA 05050201 AAAAAAAA */ ++DEF_IE(100_IE_FCS_ERROR_COUNT, 0x000e, 4); ++DEF_IE(100_IE_MEDIUM_USAGE, 0x000f, 8); /* E41F0000 2D780300 FCC91300 AAAAAAAA */ ++DEF_IE(100_IE_RXCONFIG, 0x0010, 4); /* 1000FC00 00280000 AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_QUEUE_THRESH, 0x0011, 12); /* 1100FC00 AAAAAAAA 00000000 00000000 */ ++DEF_IE(100_IE_BSS_POWER_SAVE, 0x0012, 1); /* 1200FC00 00AAAAAA AAAAAAAA AAAAAAAA */ ++/* read only, variable len */ ++DEF_IE(100_IE_FIRMWARE_STATISTICS, 0x0013, 256); /* 0000AC00 00000000 ... */ ++DEF_IE(100_IE_INT_CONFIG, 0x0014, 20); /* 00000000 00000000 00000000 00000000 5D74D105 00000000 AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_FEATURE_CONFIG, 0x0015, 8); /* 1500FC00 16000000 AAAAAAAA AAAAAAAA */ ++/* returns 'invalid MAC': */ ++DEF_IE(100_IE_KEY_CHOOSE, 0x0016, -4); ++DEF_IE(100_IE_INVAL_17, 0x0017, -1); ++DEF_IE(100_IE_UNKNOWN_18, 0x0018, 0); /* null len?! 1800FC00 AAAAAAAA AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_UNKNOWN_19, 0x0019, 256); /* huge: 1900FC00 9C1F00EA FEFFFFEA FEFFFFEA... */ ++DEF_IE(100_IE_INVAL_1A, 0x001A, -1); ++ ++DEF_IE(100_IE_DOT11_INVAL_1000, 0x1000, -1); ++DEF_IE(100_IE_DOT11_STATION_ID, 0x1001, 6); /* huge: 0110FC00 58B10E2F 03000000 00000000... */ ++DEF_IE(100_IE_DOT11_INVAL_1002, 0x1002, -1); ++DEF_IE(100_IE_DOT11_INVAL_1003, 0x1003, -1); ++DEF_IE(100_IE_DOT11_INVAL_1004, 0x1004, -1); ++DEF_IE(100_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1); ++DEF_IE(100_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1); ++/* write only: */ ++DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, 32); ++DEF_IE(100_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); /* huge: 0810FC00 00020000 F4010000 00000000... */ ++/* undoc but returns something */ ++DEF_IE(100_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* huge: 0910FC00 00000000 00000000 00000000... */ ++DEF_IE(100_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); /* 0A10FC00 30AAAAAA AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_DOT11_CURRENT_ANTENNA, 0x100b, 1); /* 0B10FC00 8FAAAAAA AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_DOT11_INVAL_100C, 0x100c, -1); ++DEF_IE(100_IE_DOT11_TX_POWER_LEVEL, 0x100d, 2); /* 00000000 0100AAAA AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_DOT11_CURRENT_CCA_MODE, 0x100e, 1); /* 0E10FC00 0DAAAAAA AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_DOT11_ED_THRESHOLD, 0x100f, 4); /* 0F10FC00 70000000 AAAAAAAA AAAAAAAA */ ++/* set default key ID */ ++DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); /* 1010FC00 00AAAAAA AAAAAAAA AAAAAAAA */ ++DEF_IE(100_IE_DOT11_INVAL_1011, 0x1011, -1); ++DEF_IE(100_IE_DOT11_INVAL_1012, 0x1012, -1); ++DEF_IE(100_IE_DOT11_INVAL_1013, 0x1013, -1); ++DEF_IE(100_IE_DOT11_UNKNOWN_1014, 0x1014, 256); /* huge */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1015, 0x1015, 256); /* huge */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1016, 0x1016, 256); /* huge */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1017, 0x1017, 256); /* huge */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1018, 0x1018, 256); /* huge */ ++DEF_IE(100_IE_DOT11_UNKNOWN_1019, 0x1019, 256); /* huge */ ++#endif ++ ++#if 0 ++/* Experimentally obtained on PCI acx111 Xterasys XN-2522g, fw 1.2.1.34 ++** -1 means that fw returned 'invalid IE' ++** 0400 0800 nnnn... are test read contents: u16 type, u16 len, data ++** (AA are poison bytes marking bytes not written by fw) ++** ++** Looks like acx111 fw reports real len! ++*/ ++DEF_IE(111_IE_INVAL_00, 0x0000, -1); ++DEF_IE(111_IE_INVAL_01, 0x0001, -1); ++DEF_IE(111_IE_POWER_MGMT, 0x0002, 12); ++/* write only, variable len: 12 + rxqueue_cnt*8 + txqueue_cnt*4: */ ++DEF_IE(111_IE_MEMORY_CONFIG, 0x0003, 24); ++DEF_IE(111_IE_BLOCK_SIZE, 0x0004, 8); /* 04000800 AA00AAAA AAAAAAAA */ ++/* variable len: 8 + rxqueue_cnt*8 + txqueue_cnt*8: */ ++DEF_IE(111_IE_QUEUE_HEAD, 0x0005, 24); ++DEF_IE(111_IE_RATE_FALLBACK, 0x0006, 1); ++/* acx100 name:WEP_OPTIONS */ ++/* said to have len:1 (not true, actually returns 12 bytes): */ ++DEF_IE(111_IE_RADIO_BAND, 0x0007, 12); /* 07000C00 AAAA1F00 FF03AAAA AAAAAAAA */ ++DEF_IE(111_IE_MEMORY_MAP, 0x0008, 48); ++/* said to have len:4, but gives INVAL on read: */ ++DEF_IE(111_IE_SCAN_STATUS, 0x0009, -1); ++DEF_IE(111_IE_ASSOC_ID, 0x000a, 2); ++/* write only, len is not known: */ ++DEF_IE(111_IE_UNKNOWN_0B, 0x000b, 0); ++/* read only, variable len. I see 67 byte reads: */ ++DEF_IE(111_IE_CONFIG_OPTIONS, 0x000c, 67); /* 0C004300 01160500 ... */ ++DEF_IE(111_IE_FWREV, 0x000d, 24); ++DEF_IE(111_IE_FCS_ERROR_COUNT, 0x000e, 4); ++DEF_IE(111_IE_MEDIUM_USAGE, 0x000f, 8); ++DEF_IE(111_IE_RXCONFIG, 0x0010, 4); ++DEF_IE(111_IE_QUEUE_THRESH, 0x0011, 12); ++DEF_IE(111_IE_BSS_POWER_SAVE, 0x0012, 1); ++/* read only, variable len. I see 240 byte reads: */ ++DEF_IE(111_IE_FIRMWARE_STATISTICS, 0x0013, 240); /* 1300F000 00000000 ... */ ++/* said to have len=17. looks like fw pads it to 20: */ ++DEF_IE(111_IE_INT_CONFIG, 0x0014, 20); /* 14001400 00000000 00000000 00000000 00000000 00000000 */ ++DEF_IE(111_IE_FEATURE_CONFIG, 0x0015, 8); ++/* said to be name:KEY_INDICATOR, len:4, but gives INVAL on read: */ ++DEF_IE(111_IE_KEY_CHOOSE, 0x0016, -1); ++/* said to have len:4, but in fact returns 8: */ ++DEF_IE(111_IE_MAX_USB_XFR, 0x0017, 8); /* 17000800 00014000 00000000 */ ++DEF_IE(111_IE_INVAL_18, 0x0018, -1); ++DEF_IE(111_IE_INVAL_19, 0x0019, -1); ++/* undoc but returns something: */ ++/* huh, fw indicates len=20 but uses 4 more bytes in buffer??? */ ++DEF_IE(111_IE_UNKNOWN_1A, 0x001A, 20); /* 1A001400 AA00AAAA 0000020F FF030000 00020000 00000007 04000000 */ ++ ++DEF_IE(111_IE_DOT11_INVAL_1000, 0x1000, -1); ++DEF_IE(111_IE_DOT11_STATION_ID, 0x1001, 6); ++DEF_IE(111_IE_DOT11_FRAG_THRESH, 0x1002, 2); ++/* acx100 only? gives INVAL on read: */ ++DEF_IE(111_IE_DOT11_BEACON_PERIOD, 0x1003, -1); ++/* said to be MAX_RECV_MSDU_LIFETIME: */ ++DEF_IE(111_IE_DOT11_DTIM_PERIOD, 0x1004, 4); ++DEF_IE(111_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1); ++DEF_IE(111_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1); ++/* acx100 only? gives INVAL on read: */ ++DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, -1); ++DEF_IE(111_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); ++/* undoc but returns something. maybe it's 2 multicast MACs to listen to? */ ++DEF_IE(111_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* 09100C00 00000000 00000000 00000000 */ ++DEF_IE(111_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); ++DEF_IE(111_IE_DOT11_CURRENT_ANTENNA, 0x100b, 2); ++DEF_IE(111_IE_DOT11_INVAL_100C, 0x100c, -1); ++DEF_IE(111_IE_DOT11_TX_POWER_LEVEL, 0x100d, 1); ++/* said to have len=1 but gives INVAL on read: */ ++DEF_IE(111_IE_DOT11_CURRENT_CCA_MODE, 0x100e, -1); ++/* said to have len=4 but gives INVAL on read: */ ++DEF_IE(111_IE_DOT11_ED_THRESHOLD, 0x100f, -1); ++/* set default key ID. write only: */ ++DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); ++/* undoc but returns something: */ ++DEF_IE(111_IE_DOT11_UNKNOWN_1011, 0x1011, 1); /* 11100100 20 */ ++DEF_IE(111_IE_DOT11_INVAL_1012, 0x1012, -1); ++DEF_IE(111_IE_DOT11_INVAL_1013, 0x1013, -1); ++#endif ++ ++ ++/*********************************************************************** ++**Information Frames Structures ++*/ ++ ++/* Used in beacon frames and the like */ ++#define DOT11RATEBYTE_1 (1*2) ++#define DOT11RATEBYTE_2 (2*2) ++#define DOT11RATEBYTE_5_5 (5*2+1) ++#define DOT11RATEBYTE_11 (11*2) ++#define DOT11RATEBYTE_22 (22*2) ++#define DOT11RATEBYTE_6_G (6*2) ++#define DOT11RATEBYTE_9_G (9*2) ++#define DOT11RATEBYTE_12_G (12*2) ++#define DOT11RATEBYTE_18_G (18*2) ++#define DOT11RATEBYTE_24_G (24*2) ++#define DOT11RATEBYTE_36_G (36*2) ++#define DOT11RATEBYTE_48_G (48*2) ++#define DOT11RATEBYTE_54_G (54*2) ++#define DOT11RATEBYTE_BASIC 0x80 /* flags rates included in basic rate set */ ++ ++ ++/*********************************************************************** ++** rxbuffer_t ++** ++** This is the format of rx data returned by acx ++*/ ++ ++/* I've hoped it's a 802.11 PHY header, but no... ++ * so far, I've seen on acx111: ++ * 0000 3a00 0000 0000 IBSS Beacons ++ * 0000 3c00 0000 0000 ESS Beacons ++ * 0000 2700 0000 0000 Probe requests ++ * --vda ++ */ ++typedef struct phy_hdr { ++ u8 unknown[4]; ++ u8 acx111_unknown[4]; ++} ACX_PACKED phy_hdr_t; ++ ++/* seems to be a bit similar to hfa384x_rx_frame. ++ * These fields are still not quite obvious, though. ++ * Some seem to have different meanings... */ ++ ++#define RXBUF_HDRSIZE 12 ++#define RXBUF_BYTES_RCVD(adev, rxbuf) \ ++ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) - (adev)->phy_header_len) ++#define RXBUF_BYTES_USED(rxbuf) \ ++ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) + RXBUF_HDRSIZE) ++/* USBism */ ++#define RXBUF_IS_TXSTAT(rxbuf) (le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0x8000) ++/* ++mac_cnt_rcvd: ++ 12 bits: length of frame from control field to first byte of FCS ++ 3 bits: reserved ++ 1 bit: 1 = it's a tx status info, not a rx packet (USB only) ++ ++mac_cnt_mblks: ++ 6 bits: number of memory block used to store frame in adapter memory ++ 1 bit: Traffic Indicator bit in TIM of received Beacon was set ++ ++mac_status: 1 byte (bitmap): ++ 7 Matching BSSID ++ 6 Matching SSID ++ 5 BDCST Address 1 field is a broadcast ++ 4 VBM received beacon frame has more than one set bit (?!) ++ 3 TIM Set bit representing this station is set in TIM of received beacon ++ 2 GROUP Address 1 is a multicast ++ 1 ADDR1 Address 1 matches our MAC ++ 0 FCSGD FSC is good ++ ++phy_stat_baseband: 1 byte (bitmap): ++ 7 Preamble frame had a long preamble ++ 6 PLCP Error CRC16 error in PLCP header ++ 5 Unsup_Mod unsupported modulation ++ 4 Selected Antenna antenna 1 was used to receive this frame ++ 3 PBCC/CCK frame used: 1=PBCC, 0=CCK modulation ++ 2 OFDM frame used OFDM modulation ++ 1 TI Protection protection frame was detected ++ 0 Reserved ++ ++phy_plcp_signal: 1 byte: ++ Receive PLCP Signal field from the Baseband Processor ++ ++phy_level: 1 byte: ++ receive AGC gain level (can be used to measure receive signal strength) ++ ++phy_snr: 1 byte: ++ estimated noise power of equalized receive signal ++ at input of FEC decoder (can be used to measure receive signal quality) ++ ++time: 4 bytes: ++ timestamp sampled from either the Access Manager TSF counter ++ or free-running microsecond counter when the MAC receives ++ first byte of PLCP header. ++*/ ++ ++typedef struct rxbuffer { ++ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */ ++ u8 mac_cnt_mblks; ++ u8 mac_status; ++ u8 phy_stat_baseband; /* bit 0x80: used LNA (Low-Noise Amplifier) */ ++ u8 phy_plcp_signal; ++ u8 phy_level; /* PHY stat */ ++ u8 phy_snr; /* PHY stat */ ++ u32 time; /* timestamp upon MAC rcv first byte */ ++/* 4-byte (acx100) or 8-byte (acx111) phy header will be here ++** if RX_CFG1_INCLUDE_PHY_HDR is in effect: ++** phy_hdr_t phy */ ++ wlan_hdr_a3_t hdr_a3; ++ /* maximally sized data part of wlan packet */ ++ u8 data_a3[WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN]; ++ /* can add hdr/data_a4 if needed */ ++} ACX_PACKED rxbuffer_t; ++ ++ ++/*--- Firmware statistics ----------------------------------------------------*/ ++ ++/* define a random 100 bytes more to catch firmware versions which ++ * provide a bigger struct */ ++#define FW_STATS_FUTURE_EXTENSION 100 ++ ++typedef struct fw_stats_tx { ++ u32 tx_desc_of; ++} ACX_PACKED fw_stats_tx_t; ++ ++typedef struct fw_stats_rx { ++ u32 rx_oom; ++ u32 rx_hdr_of; ++ u32 rx_hw_stuck; /* old: u32 rx_hdr_use_next */ ++ u32 rx_dropped_frame; ++ u32 rx_frame_ptr_err; ++ u32 rx_xfr_hint_trig; ++ u32 rx_aci_events; /* later versions only */ ++ u32 rx_aci_resets; /* later versions only */ ++} ACX_PACKED fw_stats_rx_t; ++ ++typedef struct fw_stats_dma { ++ u32 rx_dma_req; ++ u32 rx_dma_err; ++ u32 tx_dma_req; ++ u32 tx_dma_err; ++} ACX_PACKED fw_stats_dma_t; ++ ++typedef struct fw_stats_irq { ++ u32 cmd_cplt; ++ u32 fiq; ++ u32 rx_hdrs; ++ u32 rx_cmplt; ++ u32 rx_mem_of; ++ u32 rx_rdys; ++ u32 irqs; ++ u32 tx_procs; ++ u32 decrypt_done; ++ u32 dma_0_done; ++ u32 dma_1_done; ++ u32 tx_exch_complet; ++ u32 commands; ++ u32 rx_procs; ++ u32 hw_pm_mode_changes; ++ u32 host_acks; ++ u32 pci_pm; ++ u32 acm_wakeups; ++} ACX_PACKED fw_stats_irq_t; ++ ++typedef struct fw_stats_wep { ++ u32 wep_key_count; ++ u32 wep_default_key_count; ++ u32 dot11_def_key_mib; ++ u32 wep_key_not_found; ++ u32 wep_decrypt_fail; ++ u32 wep_pkt_decrypt; ++ u32 wep_decrypt_irqs; ++} ACX_PACKED fw_stats_wep_t; ++ ++typedef struct fw_stats_pwr { ++ u32 tx_start_ctr; ++ u32 no_ps_tx_too_short; ++ u32 rx_start_ctr; ++ u32 no_ps_rx_too_short; ++ u32 lppd_started; ++ u32 no_lppd_too_noisy; ++ u32 no_lppd_too_short; ++ u32 no_lppd_matching_frame; ++} ACX_PACKED fw_stats_pwr_t; ++ ++typedef struct fw_stats_mic { ++ u32 mic_rx_pkts; ++ u32 mic_calc_fail; ++} ACX_PACKED fw_stats_mic_t; ++ ++typedef struct fw_stats_aes { ++ u32 aes_enc_fail; ++ u32 aes_dec_fail; ++ u32 aes_enc_pkts; ++ u32 aes_dec_pkts; ++ u32 aes_enc_irq; ++ u32 aes_dec_irq; ++} ACX_PACKED fw_stats_aes_t; ++ ++typedef struct fw_stats_event { ++ u32 heartbeat; ++ u32 calibration; ++ u32 rx_mismatch; ++ u32 rx_mem_empty; ++ u32 rx_pool; ++ u32 oom_late; ++ u32 phy_tx_err; ++ u32 tx_stuck; ++} ACX_PACKED fw_stats_event_t; ++ ++/* mainly for size calculation only */ ++typedef struct fw_stats { ++ u16 type; ++ u16 len; ++ fw_stats_tx_t tx; ++ fw_stats_rx_t rx; ++ fw_stats_dma_t dma; ++ fw_stats_irq_t irq; ++ fw_stats_wep_t wep; ++ fw_stats_pwr_t pwr; ++ fw_stats_mic_t mic; ++ fw_stats_aes_t aes; ++ fw_stats_event_t evt; ++ u8 _padding[FW_STATS_FUTURE_EXTENSION]; ++} fw_stats_t; ++ ++/* Firmware version struct */ ++ ++typedef struct fw_ver { ++ u16 cmd; ++ u16 size; ++ char fw_id[20]; ++ u32 hw_id; ++} ACX_PACKED fw_ver_t; ++ ++#define FW_ID_SIZE 20 ++ ++typedef struct shared_queueindicator { ++ u32 indicator; ++ u16 host_lock; ++ u16 fw_lock; ++} ACX_PACKED queueindicator_t; ++ ++/*--- WEP stuff --------------------------------------------------------------*/ ++#define DOT11_MAX_DEFAULT_WEP_KEYS 4 ++ ++/* non-firmware struct, no packing necessary */ ++typedef struct wep_key { ++ size_t size; /* most often used member first */ ++ u8 index; ++ u8 key[29]; ++ u16 strange_filler; ++} wep_key_t; /* size = 264 bytes (33*8) */ ++/* FIXME: We don't have size 264! Or is there 2 bytes beyond the key ++ * (strange_filler)? */ ++ ++/* non-firmware struct, no packing necessary */ ++typedef struct key_struct { ++ u8 addr[ETH_ALEN]; /* 0x00 */ ++ u16 filler1; /* 0x06 */ ++ u32 filler2; /* 0x08 */ ++ u32 index; /* 0x0c */ ++ u16 len; /* 0x10 */ ++ u8 key[29]; /* 0x12; is this long enough??? */ ++} key_struct_t; /* size = 276. FIXME: where is the remaining space?? */ ++ ++ ++/*--- Client (peer) info -----------------------------------------------------*/ ++/* adev->sta_list[] is used for: ++** accumulating and processing of scan results ++** keeping client info in AP mode ++** keeping AP info in STA mode (AP is the only one 'client') ++** keeping peer info in ad-hoc mode ++** non-firmware struct --> no packing necessary */ ++enum { ++ CLIENT_EMPTY_SLOT_0 = 0, ++ CLIENT_EXIST_1 = 1, ++ CLIENT_AUTHENTICATED_2 = 2, ++ CLIENT_ASSOCIATED_3 = 3, ++ CLIENT_JOIN_CANDIDATE = 4 ++}; ++struct client { ++ /* most frequent access first */ ++ u8 used; /* misnamed, more like 'status' */ ++ struct client* next; ++ unsigned long mtime; /* last time we heard it, in jiffies */ ++ size_t essid_len; /* length of ESSID (without '\0') */ ++ u32 sir; /* Standard IR */ ++ u32 snr; /* Signal to Noise Ratio */ ++ u16 aid; /* association ID */ ++ u16 seq; /* from client's auth req */ ++ u16 auth_alg; /* from client's auth req */ ++ u16 cap_info; /* from client's assoc req */ ++ u16 rate_cap; /* what client supports (all rates) */ ++ u16 rate_bas; /* what client supports (basic rates) */ ++ u16 rate_cfg; /* what is allowed (by iwconfig etc) */ ++ u16 rate_cur; /* currently used rate mask */ ++ u8 rate_100; /* currently used rate byte (acx100 only) */ ++ u8 address[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; /* ad-hoc hosts can have bssid != mac */ ++ u8 channel; ++ u8 auth_step; ++ u8 ignore_count; ++ u8 fallback_count; ++ u8 stepup_count; ++ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID and trailing '\0' */ ++/* FIXME: this one is too damn big */ ++ char challenge_text[WLAN_CHALLENGE_LEN]; ++}; ++ ++ ++/*********************************************************************** ++** Hardware structures ++*/ ++ ++/* An opaque typesafe helper type ++ * ++ * Some hardware fields are actually pointers, ++ * but they have to remain u32, since using ptr instead ++ * (8 bytes on 64bit systems!) would disrupt the fixed descriptor ++ * format the acx firmware expects in the non-user area. ++ * Since we cannot cram an 8 byte ptr into 4 bytes, we need to ++ * enforce that pointed to data remains in low memory ++ * (address value needs to fit in 4 bytes) on 64bit systems. ++ * ++ * This is easy to get wrong, thus we are using a small struct ++ * and special macros to access it. Macros will check for ++ * attempts to overflow an acx_ptr with value > 0xffffffff. ++ * ++ * Attempts to use acx_ptr without macros result in compile-time errors */ ++ ++typedef struct { ++ u32 v; ++} ACX_PACKED acx_ptr; ++ ++#if ACX_DEBUG ++#define CHECK32(n) BUG_ON(sizeof(n)>4 && (long)(n)>0xffffff00) ++#else ++#define CHECK32(n) ((void)0) ++#endif ++ ++/* acx_ptr <-> integer conversion */ ++#define cpu2acx(n) ({ CHECK32(n); ((acx_ptr){ .v = cpu_to_le32(n) }); }) ++#define acx2cpu(a) (le32_to_cpu(a.v)) ++ ++/* acx_ptr <-> pointer conversion */ ++#define ptr2acx(p) ({ CHECK32(p); ((acx_ptr){ .v = cpu_to_le32((u32)(long)(p)) }); }) ++#define acx2ptr(a) ((void*)le32_to_cpu(a.v)) ++ ++/* Values for rate field (acx100 only) */ ++#define RATE100_1 10 ++#define RATE100_2 20 ++#define RATE100_5 55 ++#define RATE100_11 110 ++#define RATE100_22 220 ++/* This bit denotes use of PBCC: ++** (PBCC encoding is usable with 11 and 22 Mbps speeds only) */ ++#define RATE100_PBCC511 0x80 ++ ++/* Bit values for rate111 field */ ++#define RATE111_1 0x0001 /* DBPSK */ ++#define RATE111_2 0x0002 /* DQPSK */ ++#define RATE111_5 0x0004 /* CCK or PBCC */ ++#define RATE111_6 0x0008 /* CCK-OFDM or OFDM */ ++#define RATE111_9 0x0010 /* CCK-OFDM or OFDM */ ++#define RATE111_11 0x0020 /* CCK or PBCC */ ++#define RATE111_12 0x0040 /* CCK-OFDM or OFDM */ ++#define RATE111_18 0x0080 /* CCK-OFDM or OFDM */ ++#define RATE111_22 0x0100 /* PBCC */ ++#define RATE111_24 0x0200 /* CCK-OFDM or OFDM */ ++#define RATE111_36 0x0400 /* CCK-OFDM or OFDM */ ++#define RATE111_48 0x0800 /* CCK-OFDM or OFDM */ ++#define RATE111_54 0x1000 /* CCK-OFDM or OFDM */ ++#define RATE111_RESERVED 0x2000 ++#define RATE111_PBCC511 0x4000 /* PBCC mod at 5.5 or 11Mbit (else CCK) */ ++#define RATE111_SHORTPRE 0x8000 /* short preamble */ ++/* Special 'try everything' value */ ++#define RATE111_ALL 0x1fff ++/* These bits denote acx100 compatible settings */ ++#define RATE111_ACX100_COMPAT 0x0127 ++/* These bits denote 802.11b compatible settings */ ++#define RATE111_80211B_COMPAT 0x0027 ++ ++/* Descriptor Ctl field bits ++ * init value is 0x8e, "idle" value is 0x82 (in idle tx descs) ++ */ ++#define DESC_CTL_SHORT_PREAMBLE 0x01 /* preamble type: 0 = long; 1 = short */ ++#define DESC_CTL_FIRSTFRAG 0x02 /* this is the 1st frag of the frame */ ++#define DESC_CTL_AUTODMA 0x04 ++#define DESC_CTL_RECLAIM 0x08 /* ready to reuse */ ++#define DESC_CTL_HOSTDONE 0x20 /* host has finished processing */ ++#define DESC_CTL_ACXDONE 0x40 /* acx has finished processing */ ++/* host owns the desc [has to be released last, AFTER modifying all other desc fields!] */ ++#define DESC_CTL_HOSTOWN 0x80 ++#define DESC_CTL_ACXDONE_HOSTOWN (DESC_CTL_ACXDONE | DESC_CTL_HOSTOWN) ++ ++/* Descriptor Status field ++ */ ++#define DESC_STATUS_FULL (1 << 31) ++ ++/* NB: some bits may be interesting for Monitor mode tx (aka Raw tx): */ ++#define DESC_CTL2_SEQ 0x01 /* don't increase sequence field */ ++#define DESC_CTL2_FCS 0x02 /* don't add the FCS */ ++#define DESC_CTL2_MORE_FRAG 0x04 ++#define DESC_CTL2_RETRY 0x08 /* don't increase retry field */ ++#define DESC_CTL2_POWER 0x10 /* don't increase power mgmt. field */ ++#define DESC_CTL2_RTS 0x20 /* do RTS/CTS magic before sending */ ++#define DESC_CTL2_WEP 0x40 /* encrypt this frame */ ++#define DESC_CTL2_DUR 0x80 /* don't increase duration field */ ++ ++/*********************************************************************** ++** PCI structures ++*/ ++/* IRQ Constants ++** (outside of "#ifdef PCI" because USB (mis)uses HOST_INT_SCAN_COMPLETE) */ ++#define HOST_INT_RX_DATA 0x0001 ++#define HOST_INT_TX_COMPLETE 0x0002 ++#define HOST_INT_TX_XFER 0x0004 ++#define HOST_INT_RX_COMPLETE 0x0008 ++#define HOST_INT_DTIM 0x0010 ++#define HOST_INT_BEACON 0x0020 ++#define HOST_INT_TIMER 0x0040 ++#define HOST_INT_KEY_NOT_FOUND 0x0080 ++#define HOST_INT_IV_ICV_FAILURE 0x0100 ++#define HOST_INT_CMD_COMPLETE 0x0200 ++#define HOST_INT_INFO 0x0400 ++#define HOST_INT_OVERFLOW 0x0800 ++#define HOST_INT_PROCESS_ERROR 0x1000 ++#define HOST_INT_SCAN_COMPLETE 0x2000 ++#define HOST_INT_FCS_THRESHOLD 0x4000 ++#define HOST_INT_UNKNOWN 0x8000 ++ ++/* Outside of "#ifdef PCI" because USB needs to know sizeof() ++** of txdesc and rxdesc: */ ++struct txdesc { ++ acx_ptr pNextDesc; /* pointer to next txdesc */ ++ acx_ptr HostMemPtr; /* 0x04 */ ++ acx_ptr AcxMemPtr; /* 0x08 */ ++ u32 tx_time; /* 0x0c */ ++ u16 total_length; /* 0x10 */ ++ u16 Reserved; /* 0x12 */ ++ ++/* The following 16 bytes do not change when acx100 owns the descriptor */ ++/* BUG: fw clears last byte of this area which is supposedly reserved ++** for driver use. amd64 blew up. We dare not use it now */ ++ u32 dummy[4]; ++ ++ u8 Ctl_8; /* 0x24, 8bit value */ ++ u8 Ctl2_8; /* 0x25, 8bit value */ ++ u8 error; /* 0x26 */ ++ u8 ack_failures; /* 0x27 */ ++ ++ union { ++ /* ++ * Packing doesn't work correctly on ARM unless unions are on ++ * 4 byte boundaries. ++ */ ++ struct { ++ u8 rts_failures; /* 0x28 */ ++ u8 rts_ok; /* 0x29 */ ++ u16 d1; ++ } ACX_PACKED rts; ++ struct { ++ u16 d1; ++ u8 rate; /* 0x2a */ ++ u8 queue_ctrl; /* 0x2b */ ++ } ACX_PACKED r1; ++ struct { ++ u16 d1; ++ u16 rate111; /* 0x2a */ ++ } ACX_PACKED r2; ++ } ACX_PACKED u; ++ u32 queue_info; /* 0x2c (acx100, reserved on acx111) */ ++} ACX_PACKED; /* size : 48 = 0x30 */ ++/* NB: acx111 txdesc structure is 4 byte larger */ ++/* All these 4 extra bytes are reserved. tx alloc code takes them into account */ ++ ++struct rxdesc { ++ acx_ptr pNextDesc; /* 0x00 */ ++ acx_ptr HostMemPtr; /* 0x04 */ ++ acx_ptr ACXMemPtr; /* 0x08 */ ++ u32 rx_time; /* 0x0c */ ++ u16 total_length; /* 0x10 */ ++ u16 WEP_length; /* 0x12 */ ++ u32 WEP_ofs; /* 0x14 */ ++ ++/* the following 16 bytes do not change when acx100 owns the descriptor */ ++ u8 driverWorkspace[16]; /* 0x18 */ ++ ++ u8 Ctl_8; ++ u8 rate; ++ u8 error; ++ u8 SNR; /* Signal-to-Noise Ratio */ ++ u8 RxLevel; ++ u8 queue_ctrl; ++ u16 unknown; ++ u32 unknown2; ++} ACX_PACKED; /* size 52 = 0x34 */ ++ ++#if defined(ACX_PCI) || defined(ACX_MEM) ++ ++/* Register I/O offsets */ ++#define ACX100_EEPROM_ID_OFFSET 0x380 ++ ++/* please add further ACX hardware register definitions only when ++ it turns out you need them in the driver, and please try to use ++ firmware functionality instead, since using direct I/O access instead ++ of letting the firmware do it might confuse the firmware's state ++ machine */ ++ ++/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION ++** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */ ++enum { ++ IO_ACX_SOFT_RESET = 0, ++ ++ IO_ACX_SLV_MEM_ADDR, ++ IO_ACX_SLV_MEM_DATA, ++ IO_ACX_SLV_MEM_CTL, ++ IO_ACX_SLV_END_CTL, ++ ++ IO_ACX_FEMR, /* Function Event Mask */ ++ ++ IO_ACX_INT_TRIG, ++ IO_ACX_IRQ_MASK, ++ IO_ACX_IRQ_STATUS_NON_DES, ++ IO_ACX_IRQ_STATUS_CLEAR, /* CLEAR = clear on read */ ++ IO_ACX_IRQ_ACK, ++ IO_ACX_HINT_TRIG, ++ ++ IO_ACX_ENABLE, ++ ++ IO_ACX_EEPROM_CTL, ++ IO_ACX_EEPROM_ADDR, ++ IO_ACX_EEPROM_DATA, ++ IO_ACX_EEPROM_CFG, ++ ++ IO_ACX_PHY_ADDR, ++ IO_ACX_PHY_DATA, ++ IO_ACX_PHY_CTL, ++ ++ IO_ACX_GPIO_OE, ++ ++ IO_ACX_GPIO_OUT, ++ ++ IO_ACX_CMD_MAILBOX_OFFS, ++ IO_ACX_INFO_MAILBOX_OFFS, ++ IO_ACX_EEPROM_INFORMATION, ++ ++ IO_ACX_EE_START, ++ IO_ACX_SOR_CFG, ++ IO_ACX_ECPU_CTRL ++}; ++/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION ++** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */ ++ ++/* Values for IO_ACX_INT_TRIG register: */ ++/* inform hw that rxdesc in queue needs processing */ ++#define INT_TRIG_RXPRC 0x08 ++/* inform hw that txdesc in queue needs processing */ ++#define INT_TRIG_TXPRC 0x04 ++/* ack that we received info from info mailbox */ ++#define INT_TRIG_INFOACK 0x02 ++/* inform hw that we have filled command mailbox */ ++#define INT_TRIG_CMD 0x01 ++ ++struct txhostdesc { ++ acx_ptr data_phy; /* 0x00 [u8 *] */ ++ u16 data_offset; /* 0x04 */ ++ u16 reserved; /* 0x06 */ ++ u16 Ctl_16; /* 16bit value, endianness!! */ ++ u16 length; /* 0x0a */ ++ acx_ptr desc_phy_next; /* 0x0c [txhostdesc *] */ ++ acx_ptr pNext; /* 0x10 [txhostdesc *] */ ++ u32 Status; /* 0x14, unused on Tx */ ++/* From here on you can use this area as you want (variable length, too!) */ ++ u8 *data; ++} ACX_PACKED; ++ ++struct rxhostdesc { ++ acx_ptr data_phy; /* 0x00 [rxbuffer_t *] */ ++ u16 data_offset; /* 0x04 */ ++ u16 reserved; /* 0x06 */ ++ u16 Ctl_16; /* 0x08; 16bit value, endianness!! */ ++ u16 length; /* 0x0a */ ++ acx_ptr desc_phy_next; /* 0x0c [rxhostdesc_t *] */ ++ acx_ptr pNext; /* 0x10 [rxhostdesc_t *] */ ++ u32 Status; /* 0x14 */ ++/* From here on you can use this area as you want (variable length, too!) */ ++ rxbuffer_t *data; ++} ACX_PACKED; ++ ++#endif /* ACX_PCI */ ++ ++/*********************************************************************** ++** USB structures and constants ++*/ ++#ifdef ACX_USB ++ ++/* Used for usb_txbuffer.desc field */ ++#define USB_TXBUF_TXDESC 0xA ++/* Size of header (everything up to data[]) */ ++#define USB_TXBUF_HDRSIZE 14 ++typedef struct usb_txbuffer { ++ u16 desc; ++ u16 mpdu_len; ++ u8 queue_index; ++ u8 rate; ++ u32 hostdata; ++ u8 ctrl1; ++ u8 ctrl2; ++ u16 data_len; ++ /* wlan packet content is placed here: */ ++ u8 data[WLAN_A4FR_MAXLEN_WEP_FCS]; ++} ACX_PACKED usb_txbuffer_t; ++ ++/* USB returns either rx packets (see rxbuffer) or ++** these "tx status" structs: */ ++typedef struct usb_txstatus { ++ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */ ++ u8 queue_index; ++ u8 mac_status; /* seen 0x20 on tx failure */ ++ u32 hostdata; ++ u8 rate; ++ u8 ack_failures; ++ u8 rts_failures; ++ u8 rts_ok; ++} ACX_PACKED usb_txstatus_t; ++ ++typedef struct usb_tx { ++ unsigned busy:1; ++ struct urb *urb; ++ acx_device_t *adev; ++ /* actual USB bulk output data block is here: */ ++ usb_txbuffer_t bulkout; ++} usb_tx_t; ++ ++struct usb_rx_plain { ++ unsigned busy:1; ++ struct urb *urb; ++ acx_device_t *adev; ++ rxbuffer_t bulkin; ++}; ++ ++typedef struct usb_rx { ++ unsigned busy:1; ++ struct urb *urb; ++ acx_device_t *adev; ++ rxbuffer_t bulkin; ++ /* Make entire structure 4k. Report if it breaks something. */ ++ u8 padding[4*1024 - sizeof(struct usb_rx_plain)]; ++} usb_rx_t; ++#endif /* ACX_USB */ ++ ++ ++/* Config Option structs */ ++ ++typedef struct co_antennas { ++ u8 type; ++ u8 len; ++ u8 list[2]; ++} ACX_PACKED co_antennas_t; ++ ++typedef struct co_powerlevels { ++ u8 type; ++ u8 len; ++ u16 list[8]; ++} ACX_PACKED co_powerlevels_t; ++ ++typedef struct co_datarates { ++ u8 type; ++ u8 len; ++ u8 list[8]; ++} ACX_PACKED co_datarates_t; ++ ++typedef struct co_domains { ++ u8 type; ++ u8 len; ++ u8 list[6]; ++} ACX_PACKED co_domains_t; ++ ++typedef struct co_product_id { ++ u8 type; ++ u8 len; ++ u8 list[128]; ++} ACX_PACKED co_product_id_t; ++ ++typedef struct co_manuf_id { ++ u8 type; ++ u8 len; ++ u8 list[128]; ++} ACX_PACKED co_manuf_t; ++ ++typedef struct co_fixed { ++ char NVSv[8]; ++/* u16 NVS_vendor_offs; ACX111-only */ ++/* u16 unknown; ACX111-only */ ++ u8 MAC[6]; /* ACX100-only */ ++ u16 probe_delay; /* ACX100-only */ ++ u32 eof_memory; ++ u8 dot11CCAModes; ++ u8 dot11Diversity; ++ u8 dot11ShortPreambleOption; ++ u8 dot11PBCCOption; ++ u8 dot11ChannelAgility; ++ u8 dot11PhyType; /* FIXME: does 802.11 call it "dot11PHYType"? */ ++ u8 dot11TempType; ++ u8 table_count; ++} ACX_PACKED co_fixed_t; ++ ++typedef struct acx111_ie_configoption { ++ u16 type; ++ u16 len; ++/* Do not access below members directly, they are in fact variable length */ ++ co_fixed_t fixed; ++ co_antennas_t antennas; ++ co_powerlevels_t power_levels; ++ co_datarates_t data_rates; ++ co_domains_t domains; ++ co_product_id_t product_id; ++ co_manuf_t manufacturer; ++ u8 _padding[4]; ++} ACX_PACKED acx111_ie_configoption_t; ++ ++ ++/*********************************************************************** ++** Main acx per-device data structure ++*/ ++#define ACX_STATE_FW_LOADED 0x01 ++#define ACX_STATE_IFACE_UP 0x02 ++ ++/* MAC mode (BSS type) defines ++ * Note that they shouldn't be redefined, since they are also used ++ * during communication with firmware */ ++#define ACX_MODE_0_ADHOC 0 ++#define ACX_MODE_1_UNUSED 1 ++#define ACX_MODE_2_STA 2 ++#define ACX_MODE_3_AP 3 ++/* These are our own inventions. Sending these to firmware ++** makes it stop emitting beacons, which is exactly what we want ++** for these modes */ ++#define ACX_MODE_MONITOR 0xfe ++#define ACX_MODE_OFF 0xff ++/* 'Submode': identifies exact status of ADHOC/STA host */ ++#define ACX_STATUS_0_STOPPED 0 ++#define ACX_STATUS_1_SCANNING 1 ++#define ACX_STATUS_2_WAIT_AUTH 2 ++#define ACX_STATUS_3_AUTHENTICATED 3 ++#define ACX_STATUS_4_ASSOCIATED 4 ++ ++/* FIXME: this should be named something like struct acx_priv (typedef'd to ++ * acx_priv_t) */ ++ ++/* non-firmware struct, no packing necessary */ ++struct acx_device { ++ /* most frequent accesses first (dereferencing and cache line!) */ ++ ++ /*** Locking ***/ ++ /* FIXME: try to convert semaphore to more efficient mutex according ++ to Ingo Molnar's docs (but not before driver is in mainline or ++ pre-mutex Linux 2.6.10 is very outdated). */ ++ struct semaphore sem; ++ spinlock_t lock; ++#if defined(PARANOID_LOCKING) /* Lock debugging */ ++ const char *last_sem; ++ const char *last_lock; ++ unsigned long sem_time; ++ unsigned long lock_time; ++#endif ++#ifdef ACX_MEM ++ spinlock_t txbuf_lock; ++#endif ++ ++ /*** Linux network device ***/ ++ struct net_device *ndev; /* pointer to linux netdevice */ ++ ++ /*** Device statistics ***/ ++ struct net_device_stats stats; /* net device statistics */ ++#ifdef WIRELESS_EXT ++ struct iw_statistics wstats; /* wireless statistics */ ++#endif ++ /*** Power managment ***/ ++ struct pm_dev *pm; /* PM crap */ ++ ++ /*** Management timer ***/ ++ struct timer_list mgmt_timer; ++ ++ /*** Hardware identification ***/ ++ const char *chip_name; ++ u8 dev_type; ++ u8 chip_type; ++ u8 form_factor; ++ u8 radio_type; ++ u8 eeprom_version; ++ ++ /*** Config retrieved from EEPROM ***/ ++ char cfgopt_NVSv[8]; ++ u16 cfgopt_NVS_vendor_offs; ++ u8 cfgopt_MAC[6]; ++ u16 cfgopt_probe_delay; ++ u32 cfgopt_eof_memory; ++ u8 cfgopt_dot11CCAModes; ++ u8 cfgopt_dot11Diversity; ++ u8 cfgopt_dot11ShortPreambleOption; ++ u8 cfgopt_dot11PBCCOption; ++ u8 cfgopt_dot11ChannelAgility; ++ u8 cfgopt_dot11PhyType; ++ u8 cfgopt_dot11TempType; ++ co_antennas_t cfgopt_antennas; ++ co_powerlevels_t cfgopt_power_levels; ++ co_datarates_t cfgopt_data_rates; ++ co_domains_t cfgopt_domains; ++ co_product_id_t cfgopt_product_id; ++ co_manuf_t cfgopt_manufacturer; ++ ++ /*** Firmware identification ***/ ++ char firmware_version[FW_ID_SIZE+1]; ++ u32 firmware_numver; ++ u32 firmware_id; ++ const u16 *ie_len; ++ const u16 *ie_len_dot11; ++ ++ /*** Device state ***/ ++ u16 dev_state_mask; ++ u8 led_power; /* power LED status */ ++ u32 get_mask; /* mask of settings to fetch from the card */ ++ u32 set_mask; /* mask of settings to write to the card */ ++ ++ /* Barely used in USB case */ ++ u16 irq_status; ++ ++ u8 after_interrupt_jobs; /* mini job list for doing actions after an interrupt occurred */ ++ WORK_STRUCT after_interrupt_task; /* our task for after interrupt actions */ ++ ++ /*** scanning ***/ ++ u16 scan_count; /* number of times to do channel scan */ ++ u8 scan_mode; /* 0 == active, 1 == passive, 2 == background */ ++ u8 scan_rate; ++ u16 scan_duration; ++ u16 scan_probe_delay; ++#if WIRELESS_EXT > 15 ++ struct iw_spy_data spy_data; /* FIXME: needs to be implemented! */ ++#endif ++ ++ /*** Wireless network settings ***/ ++ /* copy of the device address (ifconfig hw ether) that we actually use ++ ** for 802.11; copied over from the network device's MAC address ++ ** (ifconfig) when it makes sense only */ ++ u8 dev_addr[MAX_ADDR_LEN]; ++ u8 bssid[ETH_ALEN]; /* the BSSID after having joined */ ++ u8 ap[ETH_ALEN]; /* The AP we want, FF:FF:FF:FF:FF:FF is any */ ++ u16 aid; /* The Association ID sent from the AP / last used AID if we're an AP */ ++ u16 mode; /* mode from iwconfig */ ++ int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */ ++ u16 status; /* 802.11 association status */ ++ u8 essid_active; /* specific ESSID active, or select any? */ ++ u8 essid_len; /* to avoid dozens of strlen() */ ++ /* INCLUDES \0 termination for easy printf - but many places ++ ** simply want the string data memcpy'd plus a length indicator! ++ ** Keep that in mind... */ ++ char essid[IW_ESSID_MAX_SIZE+1]; ++ /* essid we are going to use for association, in case of "essid 'any'" ++ ** and in case of hidden ESSID (use configured ESSID then) */ ++ char essid_for_assoc[IW_ESSID_MAX_SIZE+1]; ++ char nick[IW_ESSID_MAX_SIZE+1]; /* see essid! */ ++ u8 channel; ++ u8 reg_dom_id; /* reg domain setting */ ++ u16 reg_dom_chanmask; ++ u16 auth_or_assoc_retries; ++ u16 scan_retries; ++ unsigned long scan_start; /* YES, jiffies is defined as "unsigned long" */ ++ ++ /* stations known to us (if we're an ap) */ ++ client_t sta_list[32]; /* tab is larger than list, so that */ ++ client_t *sta_hash_tab[64]; /* hash collisions are not likely */ ++ client_t *ap_client; /* this one is our AP (STA mode only) */ ++ ++ int dup_count; ++ int nondup_count; ++ unsigned long dup_msg_expiry; ++ u16 last_seq_ctrl; /* duplicate packet detection */ ++ ++ /* 802.11 power save mode */ ++ u8 ps_wakeup_cfg; ++ u8 ps_listen_interval; ++ u8 ps_options; ++ u8 ps_hangover_period; ++ u32 ps_enhanced_transition_time; ++ u32 ps_beacon_rx_time; ++ ++ /*** PHY settings ***/ ++ u8 fallback_threshold; ++ u8 stepup_threshold; ++ u16 rate_basic; ++ u16 rate_oper; ++ u16 rate_bcast; ++ u16 rate_bcast100; ++ u8 rate_auto; /* false if "iwconfig rate N" (WITHOUT 'auto'!) */ ++ u8 preamble_mode; /* 0 == Long Preamble, 1 == Short, 2 == Auto */ ++ u8 preamble_cur; ++ ++ u8 tx_disabled; ++ u8 tx_level_dbm; ++ /* u8 tx_level_val; */ ++ /* u8 tx_level_auto; whether to do automatic power adjustment */ ++ ++ unsigned long recalib_time_last_success; ++ unsigned long recalib_time_last_attempt; ++ int recalib_failure_count; ++ int recalib_msg_ratelimit; ++ int retry_errors_msg_ratelimit; ++ ++ unsigned long brange_time_last_state_change; /* time the power LED was last changed */ ++ u8 brange_last_state; /* last state of the LED */ ++ u8 brange_max_quality; /* maximum quality that equates to full speed */ ++ ++ u8 sensitivity; ++ u8 antenna; /* antenna settings */ ++ u8 ed_threshold; /* energy detect threshold */ ++ u8 cca; /* clear channel assessment */ ++ ++ u16 rts_threshold; ++ u16 frag_threshold; ++ u32 short_retry; ++ u32 long_retry; ++ u16 msdu_lifetime; ++ u16 listen_interval; /* given in units of beacon interval */ ++ u32 beacon_interval; ++ ++ u16 capabilities; ++ u8 rate_supported_len; ++ u8 rate_supported[13]; ++ ++ /*** Encryption settings (WEP) ***/ ++ u32 auth_alg; /* used in transmit_authen1 */ ++ u8 wep_enabled; ++ u8 wep_restricted; ++ u8 wep_current_index; ++ wep_key_t wep_keys[DOT11_MAX_DEFAULT_WEP_KEYS]; /* the default WEP keys */ ++ key_struct_t wep_key_struct[10]; ++ ++ /*** Unknown ***/ ++ u8 dtim_interval; ++ ++#ifdef ACX_MEM ++ u32 acx_txbuf_start; ++ int acx_txbuf_numblocks; ++ u32 acx_txbuf_free; /* addr of head of free list */ ++ int acx_txbuf_blocks_free; /* how many are still open */ ++ queueindicator_t *acx_queue_indicator; ++#endif ++ ++ /*** Card Rx/Tx management ***/ ++ u16 rx_config_1; ++ u16 rx_config_2; ++ u16 memblocksize; ++ unsigned int tx_free; ++ unsigned int tx_head; /* keep as close as possible to Tx stuff below (cache line) */ ++ u16 phy_header_len; ++ ++/************************************************************************* ++ *** PCI/USB/... must be last or else hw agnostic code breaks horribly *** ++ *************************************************************************/ ++ ++ /* hack to let common code compile. FIXME */ ++ dma_addr_t rxhostdesc_startphy; ++ ++ /*** PCI stuff ***/ ++#if defined(ACX_PCI) || defined(ACX_MEM) ++ /* pointers to tx buffers, tx host descriptors (in host memory) ++ ** and tx descs in device memory */ ++ unsigned int tx_tail; ++ u8 *txbuf_start; ++ txhostdesc_t *txhostdesc_start; ++ txdesc_t *txdesc_start; /* points to PCI-mapped memory */ ++ dma_addr_t txbuf_startphy; ++ dma_addr_t txhostdesc_startphy; ++ /* sizes of above host memory areas */ ++ unsigned int txbuf_area_size; ++ unsigned int txhostdesc_area_size; ++ ++ unsigned int txdesc_size; /* size of txdesc; ACX111 = ACX100 + 4 */ ++ client_t *txc[TX_CNT]; ++ u16 txr[TX_CNT]; ++ ++ /* same for rx */ ++ unsigned int rx_tail; ++ rxbuffer_t *rxbuf_start; ++ rxhostdesc_t *rxhostdesc_start; ++ rxdesc_t *rxdesc_start; ++ /* physical addresses of above host memory areas */ ++ dma_addr_t rxbuf_startphy; ++ /* dma_addr_t rxhostdesc_startphy; */ ++ unsigned int rxbuf_area_size; ++ unsigned int rxhostdesc_area_size; ++ ++ u8 need_radio_fw; ++ u8 irqs_active; /* whether irq sending is activated */ ++ ++ const u16 *io; /* points to ACX100 or ACX111 PCI I/O register address set */ ++ ++#ifdef ACX_PCI ++ struct pci_dev *pdev; ++#endif ++#ifdef ACX_MEM ++ struct device *dev; ++#endif ++ ++#ifdef ACX_PCI ++ unsigned long membase; ++#endif ++#ifdef ACX_MEM ++ volatile u32 *membase; ++#endif ++ unsigned long membase2; ++#ifdef ACX_PCI ++ void __iomem *iobase; ++#endif ++#ifdef ACX_MEM ++ volatile u32 *iobase; ++#endif ++ void __iomem *iobase2; ++ /* command interface */ ++ u8 __iomem *cmd_area; ++ u8 __iomem *info_area; ++ ++ u16 irq_mask; /* interrupt types to mask out (not wanted) with many IRQs activated */ ++ u16 irq_mask_off; /* interrupt types to mask out (not wanted) with IRQs off */ ++ unsigned int irq_loops_this_jiffy; ++ unsigned long irq_last_jiffies; ++#endif ++ ++ /*** USB stuff ***/ ++#ifdef ACX_USB ++ struct usb_device *usbdev; ++ ++ rxbuffer_t rxtruncbuf; ++ ++ usb_tx_t *usb_tx; ++ usb_rx_t *usb_rx; ++ ++ int bulkinep; /* bulk-in endpoint */ ++ int bulkoutep; /* bulk-out endpoint */ ++ int rxtruncsize; ++#endif ++ ++}; ++ ++static inline acx_device_t* ++ndev2adev(struct net_device *ndev) ++{ ++ return netdev_priv(ndev); ++} ++ ++ ++/* For use with ACX1xx_IE_RXCONFIG */ ++/* bit description ++ * 13 include additional header (length etc.) *required* ++ * struct is defined in 'struct rxbuffer' ++ * is this bit acx100 only? does acx111 always put the header, ++ * and bit setting is irrelevant? --vda ++ * 10 receive frames only with SSID used in last join cmd ++ * 9 discard broadcast ++ * 8 receive packets for multicast address 1 ++ * 7 receive packets for multicast address 0 ++ * 6 discard all multicast packets ++ * 5 discard frames from foreign BSSID ++ * 4 discard frames with foreign destination MAC address ++ * 3 promiscuous mode (receive ALL frames, disable filter) ++ * 2 include FCS ++ * 1 include phy header ++ * 0 ??? ++ */ ++#define RX_CFG1_INCLUDE_RXBUF_HDR 0x2000 /* ACX100 only */ ++#define RX_CFG1_FILTER_SSID 0x0400 ++#define RX_CFG1_FILTER_BCAST 0x0200 ++#define RX_CFG1_RCV_MC_ADDR1 0x0100 ++#define RX_CFG1_RCV_MC_ADDR0 0x0080 ++#define RX_CFG1_FILTER_ALL_MULTI 0x0040 ++#define RX_CFG1_FILTER_BSSID 0x0020 ++#define RX_CFG1_FILTER_MAC 0x0010 ++#define RX_CFG1_RCV_PROMISCUOUS 0x0008 ++#define RX_CFG1_INCLUDE_FCS 0x0004 ++#define RX_CFG1_INCLUDE_PHY_HDR (WANT_PHY_HDR ? 0x0002 : 0) ++/* bit description ++ * 11 receive association requests etc. ++ * 10 receive authentication frames ++ * 9 receive beacon frames ++ * 8 receive contention free packets ++ * 7 receive control frames ++ * 6 receive data frames ++ * 5 receive broken frames ++ * 4 receive management frames ++ * 3 receive probe requests ++ * 2 receive probe responses ++ * 1 receive RTS/CTS/ACK frames ++ * 0 receive other ++ */ ++#define RX_CFG2_RCV_ASSOC_REQ 0x0800 ++#define RX_CFG2_RCV_AUTH_FRAMES 0x0400 ++#define RX_CFG2_RCV_BEACON_FRAMES 0x0200 ++#define RX_CFG2_RCV_CONTENTION_FREE 0x0100 ++#define RX_CFG2_RCV_CTRL_FRAMES 0x0080 ++#define RX_CFG2_RCV_DATA_FRAMES 0x0040 ++#define RX_CFG2_RCV_BROKEN_FRAMES 0x0020 ++#define RX_CFG2_RCV_MGMT_FRAMES 0x0010 ++#define RX_CFG2_RCV_PROBE_REQ 0x0008 ++#define RX_CFG2_RCV_PROBE_RESP 0x0004 ++#define RX_CFG2_RCV_ACK_FRAMES 0x0002 ++#define RX_CFG2_RCV_OTHER 0x0001 ++ ++/* For use with ACX1xx_IE_FEATURE_CONFIG */ ++#define FEATURE1_80MHZ_CLOCK 0x00000040L ++#define FEATURE1_4X 0x00000020L ++#define FEATURE1_LOW_RX 0x00000008L ++#define FEATURE1_EXTRA_LOW_RX 0x00000001L ++ ++#define FEATURE2_SNIFFER 0x00000080L ++#define FEATURE2_NO_TXCRYPT 0x00000001L ++ ++/*-- get and set mask values --*/ ++#define GETSET_LED_POWER 0x00000001L ++#define GETSET_STATION_ID 0x00000002L ++#define SET_TEMPLATES 0x00000004L ++#define SET_STA_LIST 0x00000008L ++#define GETSET_TX 0x00000010L ++#define GETSET_RX 0x00000020L ++#define SET_RXCONFIG 0x00000040L ++#define GETSET_ANTENNA 0x00000080L ++#define GETSET_SENSITIVITY 0x00000100L ++#define GETSET_TXPOWER 0x00000200L ++#define GETSET_ED_THRESH 0x00000400L ++#define GETSET_CCA 0x00000800L ++#define GETSET_POWER_80211 0x00001000L ++#define GETSET_RETRY 0x00002000L ++#define GETSET_REG_DOMAIN 0x00004000L ++#define GETSET_CHANNEL 0x00008000L ++/* Used when ESSID changes etc and we need to scan for AP anew */ ++#define GETSET_RESCAN 0x00010000L ++#define GETSET_MODE 0x00020000L ++#define GETSET_WEP 0x00040000L ++#define SET_WEP_OPTIONS 0x00080000L ++#define SET_MSDU_LIFETIME 0x00100000L ++#define SET_RATE_FALLBACK 0x00200000L ++ ++/* keep in sync with the above */ ++#define GETSET_ALL (0 \ ++/* GETSET_LED_POWER */ | 0x00000001L \ ++/* GETSET_STATION_ID */ | 0x00000002L \ ++/* SET_TEMPLATES */ | 0x00000004L \ ++/* SET_STA_LIST */ | 0x00000008L \ ++/* GETSET_TX */ | 0x00000010L \ ++/* GETSET_RX */ | 0x00000020L \ ++/* SET_RXCONFIG */ | 0x00000040L \ ++/* GETSET_ANTENNA */ | 0x00000080L \ ++/* GETSET_SENSITIVITY */| 0x00000100L \ ++/* GETSET_TXPOWER */ | 0x00000200L \ ++/* GETSET_ED_THRESH */ | 0x00000400L \ ++/* GETSET_CCA */ | 0x00000800L \ ++/* GETSET_POWER_80211 */| 0x00001000L \ ++/* GETSET_RETRY */ | 0x00002000L \ ++/* GETSET_REG_DOMAIN */ | 0x00004000L \ ++/* GETSET_CHANNEL */ | 0x00008000L \ ++/* GETSET_RESCAN */ | 0x00010000L \ ++/* GETSET_MODE */ | 0x00020000L \ ++/* GETSET_WEP */ | 0x00040000L \ ++/* SET_WEP_OPTIONS */ | 0x00080000L \ ++/* SET_MSDU_LIFETIME */ | 0x00100000L \ ++/* SET_RATE_FALLBACK */ | 0x00200000L \ ++ ) ++ ++ ++/*********************************************************************** ++** Firmware loading ++*/ ++#include /* request_firmware() */ ++#include /* struct pci_device */ ++ ++ ++/*********************************************************************** ++*/ ++typedef struct acx100_ie_memblocksize { ++ u16 type; ++ u16 len; ++ u16 size; ++} ACX_PACKED acx100_ie_memblocksize_t; ++ ++typedef struct acx100_ie_queueconfig { ++ u16 type; ++ u16 len; ++ u32 AreaSize; ++ u32 RxQueueStart; ++ u8 QueueOptions; ++ u8 NumTxQueues; ++ u8 NumRxDesc; /* for USB only */ ++ u8 pad1; ++ u32 QueueEnd; ++ u32 HostQueueEnd; /* QueueEnd2 */ ++ u32 TxQueueStart; ++ u8 TxQueuePri; ++ u8 NumTxDesc; ++ u16 pad2; ++} ACX_PACKED acx100_ie_queueconfig_t; ++ ++typedef struct acx111_ie_queueconfig { ++ u16 type; ++ u16 len; ++ u32 tx_memory_block_address; ++ u32 rx_memory_block_address; ++ u32 rx1_queue_address; ++ u32 reserved1; ++ u32 tx1_queue_address; ++ u8 tx1_attributes; ++ u16 reserved2; ++ u8 reserved3; ++} ACX_PACKED acx111_ie_queueconfig_t; ++ ++typedef struct acx100_ie_memconfigoption { ++ u16 type; ++ u16 len; ++ u32 DMA_config; ++ acx_ptr pRxHostDesc; ++ u32 rx_mem; ++ u32 tx_mem; ++ u16 RxBlockNum; ++ u16 TxBlockNum; ++} ACX_PACKED acx100_ie_memconfigoption_t; ++ ++typedef struct acx111_ie_memoryconfig { ++ u16 type; ++ u16 len; ++ u16 no_of_stations; ++ u16 memory_block_size; ++ u8 tx_rx_memory_block_allocation; ++ u8 count_rx_queues; ++ u8 count_tx_queues; ++ u8 options; ++ u8 fragmentation; ++ u16 reserved1; ++ u8 reserved2; ++ ++ /* start of rx1 block */ ++ u8 rx_queue1_count_descs; ++ u8 rx_queue1_reserved1; ++ u8 rx_queue1_type; /* must be set to 7 */ ++ u8 rx_queue1_prio; /* must be set to 0 */ ++ acx_ptr rx_queue1_host_rx_start; ++ /* end of rx1 block */ ++ ++ /* start of tx1 block */ ++ u8 tx_queue1_count_descs; ++ u8 tx_queue1_reserved1; ++ u8 tx_queue1_reserved2; ++ u8 tx_queue1_attributes; ++ /* end of tx1 block */ ++} ACX_PACKED acx111_ie_memoryconfig_t; ++ ++typedef struct acx_ie_memmap { ++ u16 type; ++ u16 len; ++ u32 CodeStart; ++ u32 CodeEnd; ++ u32 WEPCacheStart; ++ u32 WEPCacheEnd; ++ u32 PacketTemplateStart; ++ u32 PacketTemplateEnd; ++ u32 QueueStart; ++ u32 QueueEnd; ++ u32 PoolStart; ++ u32 PoolEnd; ++} ACX_PACKED acx_ie_memmap_t; ++ ++typedef struct acx111_ie_feature_config { ++ u16 type; ++ u16 len; ++ u32 feature_options; ++ u32 data_flow_options; ++} ACX_PACKED acx111_ie_feature_config_t; ++ ++typedef struct acx111_ie_tx_level { ++ u16 type; ++ u16 len; ++ u8 level; ++} ACX_PACKED acx111_ie_tx_level_t; ++ ++#define PS_CFG_ENABLE 0x80 ++#define PS_CFG_PENDING 0x40 /* status flag when entering PS */ ++#define PS_CFG_WAKEUP_MODE_MASK 0x07 ++#define PS_CFG_WAKEUP_BY_HOST 0x03 ++#define PS_CFG_WAKEUP_EACH_ITVL 0x02 ++#define PS_CFG_WAKEUP_ON_DTIM 0x01 ++#define PS_CFG_WAKEUP_ALL_BEAC 0x00 ++ ++/* Enhanced PS mode: sleep until Rx Beacon w/ the STA's AID bit set ++** in the TIM; newer firmwares only(?) */ ++#define PS_OPT_ENA_ENHANCED_PS 0x04 ++#define PS_OPT_TX_PSPOLL 0x02 /* send PSPoll frame to fetch waiting frames from AP (on frame with matching AID) */ ++#define PS_OPT_STILL_RCV_BCASTS 0x01 ++ ++typedef struct acx100_ie_powersave { ++ u16 type; ++ u16 len; ++ u8 wakeup_cfg; ++ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */ ++ u8 options; ++ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */ ++ u16 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */ ++} ACX_PACKED acx100_ie_powersave_t; ++ ++typedef struct acx111_ie_powersave { ++ u16 type; ++ u16 len; ++ u8 wakeup_cfg; ++ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */ ++ u8 options; ++ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */ ++ u32 beacon_rx_time; ++ u32 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */ ++} ACX_PACKED acx111_ie_powersave_t; ++ ++ ++/*********************************************************************** ++** Commands and template structures ++*/ ++ ++/* ++** SCAN command structure ++** ++** even though acx100 scan rates match RATE100 constants, ++** acx111 ones do not match! Therefore we do not use RATE100 #defines */ ++#define ACX_SCAN_RATE_1 10 ++#define ACX_SCAN_RATE_2 20 ++#define ACX_SCAN_RATE_5 55 ++#define ACX_SCAN_RATE_11 110 ++#define ACX_SCAN_RATE_22 220 ++#define ACX_SCAN_RATE_PBCC 0x80 /* OR with this if needed */ ++#define ACX_SCAN_OPT_ACTIVE 0x00 /* a bit mask */ ++#define ACX_SCAN_OPT_PASSIVE 0x01 ++/* Background scan: we go into Power Save mode (by transmitting ++** NULL data frame to AP with the power mgmt bit set), do the scan, ++** and then exit Power Save mode. A plus is that AP buffers frames ++** for us while we do background scan. Thus we avoid frame losses. ++** Background scan can be active or passive, just like normal one */ ++#define ACX_SCAN_OPT_BACKGROUND 0x02 ++typedef struct acx100_scan { ++ u16 count; /* number of scans to do, 0xffff == continuous */ ++ u16 start_chan; ++ u16 flags; /* channel list mask; 0x8000 == all channels? */ ++ u8 max_rate; /* max. probe rate */ ++ u8 options; /* bit mask, see defines above */ ++ u16 chan_duration; ++ u16 max_probe_delay; ++} ACX_PACKED acx100_scan_t; /* length 0xc */ ++ ++#define ACX111_SCAN_RATE_6 0x0B ++#define ACX111_SCAN_RATE_9 0x0F ++#define ACX111_SCAN_RATE_12 0x0A ++#define ACX111_SCAN_RATE_18 0x0E ++#define ACX111_SCAN_RATE_24 0x09 ++#define ACX111_SCAN_RATE_36 0x0D ++#define ACX111_SCAN_RATE_48 0x08 ++#define ACX111_SCAN_RATE_54 0x0C ++#define ACX111_SCAN_OPT_5GHZ 0x04 /* else 2.4GHZ */ ++#define ACX111_SCAN_MOD_SHORTPRE 0x01 /* you can combine SHORTPRE and PBCC */ ++#define ACX111_SCAN_MOD_PBCC 0x80 ++#define ACX111_SCAN_MOD_OFDM 0x40 ++typedef struct acx111_scan { ++ u16 count; /* number of scans to do */ ++ u8 channel_list_select; /* 0: scan all channels, 1: from chan_list only */ ++ u16 reserved1; ++ u8 reserved2; ++ u8 rate; /* rate for probe requests (if active scan) */ ++ u8 options; /* bit mask, see defines above */ ++ u16 chan_duration; /* min time to wait for reply on one channel (in TU) */ ++ /* (active scan only) (802.11 section 11.1.3.2.2) */ ++ u16 max_probe_delay; /* max time to wait for reply on one channel (active scan) */ ++ /* time to listen on a channel (passive scan) */ ++ u8 modulation; ++ u8 channel_list[26]; /* bits 7:0 first byte: channels 8:1 */ ++ /* bits 7:0 second byte: channels 16:9 */ ++ /* 26 bytes is enough to cover 802.11a */ ++} ACX_PACKED acx111_scan_t; ++ ++ ++/* ++** Radio calibration command structure ++*/ ++typedef struct acx111_cmd_radiocalib { ++/* 0x80000000 == automatic calibration by firmware, according to interval; ++ * bits 0..3: select calibration methods to go through: ++ * calib based on DC, AfeDC, Tx mismatch, Tx equilization */ ++ u32 methods; ++ u32 interval; ++} ACX_PACKED acx111_cmd_radiocalib_t; ++ ++ ++/* ++** Packet template structures ++** ++** Packet templates store contents of Beacon, Probe response, Probe request, ++** Null data frame, and TIM data frame. Firmware automatically transmits ++** contents of template at appropriate time: ++** - Beacon: when configured as AP or Ad-hoc ++** - Probe response: when configured as AP or Ad-hoc, whenever ++** a Probe request frame is received ++** - Probe request: when host issues SCAN command (active) ++** - Null data frame: when entering 802.11 power save mode ++** - TIM data: at the end of Beacon frames (if no TIM template ++** is configured, then transmits default TIM) ++** NB: ++** - size field must be set to size of actual template ++** (NOT sizeof(struct) - templates are variable in length), ++** size field is not itself counted. ++** - members flagged with an asterisk must be initialized with host, ++** rest must be zero filled. ++** - variable length fields shown only in comments */ ++typedef struct acx_template_tim { ++ u16 size; ++ u8 tim_eid; /* 00 1 TIM IE ID * */ ++ u8 len; /* 01 1 Length * */ ++ u8 dtim_cnt; /* 02 1 DTIM Count */ ++ u8 dtim_period; /* 03 1 DTIM Period */ ++ u8 bitmap_ctrl; /* 04 1 Bitmap Control * (except bit0) */ ++ /* 05 n Partial Virtual Bitmap * */ ++ u8 variable[0x100 - 1-1-1-1-1]; ++} ACX_PACKED acx_template_tim_t; ++ ++typedef struct acx_template_probereq { ++ u16 size; ++ u16 fc; /* 00 2 fc * */ ++ u16 dur; /* 02 2 Duration */ ++ u8 da[6]; /* 04 6 Destination Address * */ ++ u8 sa[6]; /* 0A 6 Source Address * */ ++ u8 bssid[6]; /* 10 6 BSSID * */ ++ u16 seq; /* 16 2 Sequence Control */ ++ /* 18 n SSID * */ ++ /* nn n Supported Rates * */ ++ u8 variable[0x44 - 2-2-6-6-6-2]; ++} ACX_PACKED acx_template_probereq_t; ++ ++typedef struct acx_template_proberesp { ++ u16 size; ++ u16 fc; /* 00 2 fc * (bits [15:12] and [10:8] per 802.11 section 7.1.3.1) */ ++ u16 dur; /* 02 2 Duration */ ++ u8 da[6]; /* 04 6 Destination Address */ ++ u8 sa[6]; /* 0A 6 Source Address */ ++ u8 bssid[6]; /* 10 6 BSSID */ ++ u16 seq; /* 16 2 Sequence Control */ ++ u8 timestamp[8];/* 18 8 Timestamp */ ++ u16 beacon_interval; /* 20 2 Beacon Interval * */ ++ u16 cap; /* 22 2 Capability Information * */ ++ /* 24 n SSID * */ ++ /* nn n Supported Rates * */ ++ /* nn 1 DS Parameter Set * */ ++ u8 variable[0x54 - 2-2-6-6-6-2-8-2-2]; ++} ACX_PACKED acx_template_proberesp_t; ++#define acx_template_beacon_t acx_template_proberesp_t ++#define acx_template_beacon acx_template_proberesp ++ ++typedef struct acx_template_nullframe { ++ u16 size; ++ struct wlan_hdr_a3 hdr; ++} ACX_PACKED acx_template_nullframe_t; ++ ++ ++/* ++** JOIN command structure ++** ++** as opposed to acx100, acx111 dtim interval is AFTER rates_basic111. ++** NOTE: took me about an hour to get !@#$%^& packing right --> struct packing is eeeeevil... */ ++typedef struct acx_joinbss { ++ u8 bssid[ETH_ALEN]; ++ u16 beacon_interval; ++ union { ++ struct { ++ u8 dtim_interval; ++ u8 rates_basic; ++ u8 rates_supported; ++ /* ++ * ARM compiler doesn't pack correctly unless unions ++ * inside structures are multiples of 4 bytes. Ugh. ++ */ ++ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */ ++ } ACX_PACKED acx100; ++ struct { ++ u16 rates_basic; ++ u8 dtim_interval; ++ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */ ++ } ACX_PACKED acx111; ++ /* ++ * ARM compiler doesn't pack correctly unles unions are aligned on ++ * 4 byte boundaries and are multiples of 4 bytes. ++ */ ++ struct { ++ u8 d1; ++ u8 d2; ++ u8 d3; ++ u8 genfrm_txrate; ++ } ACX_PACKED txrate; ++ } ACX_PACKED u; ++ u8 genfrm_mod_pre; /* generated frame modulation/preamble: ++ ** bit7: PBCC, bit6: OFDM (else CCK/DQPSK/DBPSK) ++ ** bit5: short pre */ ++ u8 macmode; /* BSS Type, must be one of ACX_MODE_xxx */ ++ u8 channel; ++ u8 essid_len; ++ char essid[IW_ESSID_MAX_SIZE]; ++} ACX_PACKED acx_joinbss_t; ++ ++#define JOINBSS_RATES_1 0x01 ++#define JOINBSS_RATES_2 0x02 ++#define JOINBSS_RATES_5 0x04 ++#define JOINBSS_RATES_11 0x08 ++#define JOINBSS_RATES_22 0x10 ++ ++/* Looks like missing bits are used to indicate 11g rates! ++** (it follows from the fact that constants below match 1:1 to RATE111_nn) ++** This was actually seen! Look at that Assoc Request sent by acx111, ++** it _does_ contain 11g rates in basic set: ++01:30:20.070772 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1 ++01:30:20.074425 Authentication (Open System)-1: Succesful ++01:30:20.076539 Authentication (Open System)-2: ++01:30:20.076620 Acknowledgment ++01:30:20.088546 Assoc Request (xxx) [1.0* 2.0* 5.5* 6.0* 9.0* 11.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ++01:30:20.122413 Assoc Response AID(1) :: Succesful ++01:30:20.122679 Acknowledgment ++01:30:20.173204 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1 ++*/ ++#define JOINBSS_RATES_BASIC111_1 0x0001 ++#define JOINBSS_RATES_BASIC111_2 0x0002 ++#define JOINBSS_RATES_BASIC111_5 0x0004 ++#define JOINBSS_RATES_BASIC111_11 0x0020 ++#define JOINBSS_RATES_BASIC111_22 0x0100 ++ ++ ++/*********************************************************************** ++*/ ++typedef struct mem_read_write { ++ u16 addr; ++ u16 type; /* 0x0 int. RAM / 0xffff MAC reg. / 0x81 PHY RAM / 0x82 PHY reg.; or maybe it's actually 0x30 for MAC? Better verify it by writing and reading back and checking whether the value holds! */ ++ u32 len; ++ u32 data; ++} ACX_PACKED mem_read_write_t; ++ ++typedef struct firmware_image { ++ u32 chksum; ++ u32 size; ++ u8 data[1]; /* the byte array of the actual firmware... */ ++} ACX_PACKED firmware_image_t; ++ ++typedef struct acx_cmd_radioinit { ++ u32 offset; ++ u32 len; ++} ACX_PACKED acx_cmd_radioinit_t; ++ ++typedef struct acx100_ie_wep_options { ++ u16 type; ++ u16 len; ++ u16 NumKeys; /* max # of keys */ ++ u8 WEPOption; /* 0 == decrypt default key only, 1 == override decrypt */ ++ u8 Pad; /* used only for acx111 */ ++} ACX_PACKED acx100_ie_wep_options_t; ++ ++typedef struct ie_dot11WEPDefaultKey { ++ u16 type; ++ u16 len; ++ u8 action; ++ u8 keySize; ++ u8 defaultKeyNum; ++ u8 key[29]; /* check this! was Key[19] */ ++} ACX_PACKED ie_dot11WEPDefaultKey_t; ++ ++typedef struct acx111WEPDefaultKey { ++ u8 MacAddr[ETH_ALEN]; ++ u16 action; /* NOTE: this is a u16, NOT a u8!! */ ++ u16 reserved; ++ u8 keySize; ++ u8 type; ++ u8 index; ++ u8 defaultKeyNum; ++ u8 counter[6]; ++ u8 key[32]; /* up to 32 bytes (for TKIP!) */ ++} ACX_PACKED acx111WEPDefaultKey_t; ++ ++typedef struct ie_dot11WEPDefaultKeyID { ++ u16 type; ++ u16 len; ++ u8 KeyID; ++} ACX_PACKED ie_dot11WEPDefaultKeyID_t; ++ ++typedef struct acx100_cmd_wep_mgmt { ++ u8 MacAddr[ETH_ALEN]; ++ u16 Action; ++ u16 KeySize; ++ u8 Key[29]; /* 29*8 == 232bits == WEP256 */ ++} ACX_PACKED acx100_cmd_wep_mgmt_t; ++ ++typedef struct acx_ie_generic { ++ u16 type; ++ u16 len; ++ union { ++ /* Association ID IE: just a 16bit value: */ ++ u16 aid; ++ /* generic member for quick implementation of commands */ ++ u8 bytes[32]; ++ } ACX_PACKED m; ++} ACX_PACKED acx_ie_generic_t; ++ ++/*********************************************************************** ++*/ ++#define CHECK_SIZEOF(type,size) { \ ++ extern void BUG_bad_size_for_##type(void); \ ++ if (sizeof(type)!=(size)) BUG_bad_size_for_##type(); \ ++} ++ ++static inline void ++acx_struct_size_check(void) ++{ ++ CHECK_SIZEOF(txdesc_t, 0x30); ++ CHECK_SIZEOF(acx100_ie_memconfigoption_t, 24); ++ CHECK_SIZEOF(acx100_ie_queueconfig_t, 0x20); ++ CHECK_SIZEOF(acx_joinbss_t, 0x30); ++ /* IEs need 4 bytes for (type,len) tuple */ ++ CHECK_SIZEOF(acx111_ie_configoption_t, ACX111_IE_CONFIG_OPTIONS_LEN + 4); ++} ++ ++ ++/*********************************************************************** ++** Global data ++*/ ++extern const u8 acx_bitpos2ratebyte[]; ++extern const u8 acx_bitpos2rate100[]; ++ ++extern const u8 acx_reg_domain_ids[]; ++extern const char * const acx_reg_domain_strings[]; ++enum { ++ acx_reg_domain_ids_len = 8 ++}; ++ ++extern const struct iw_handler_def acx_ioctl_handler_def; +Index: linux-2.6.23/drivers/net/wireless/acx/common.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/common.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,7388 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx_hw.h" ++#include "acx.h" ++ ++ ++/*********************************************************************** ++*/ ++static client_t *acx_l_sta_list_alloc(acx_device_t *adev); ++static client_t *acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address); ++ ++static int acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf); ++static int acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf); ++/* static int acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala); */ ++static int acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf); ++static void acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req); ++static void acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req); ++static void acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req); ++static void acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req); ++static int acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req, const rxbuffer_t *rxbuf); ++static int acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req); ++static int acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req); ++static int acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req); ++static int acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req); ++static int acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req); ++static int acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason); ++static int acx_l_transmit_authen1(acx_device_t *adev); ++static int acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req, client_t *clt); ++static int acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req); ++static int acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req); ++static int acx_l_transmit_assoc_req(acx_device_t *adev); ++ ++ ++/*********************************************************************** ++*/ ++#if ACX_DEBUG ++unsigned int acx_debug /* will add __read_mostly later */ = ACX_DEFAULT_MSG; ++/* parameter is 'debug', corresponding var is acx_debug */ ++module_param_named(debug, acx_debug, uint, 0); ++MODULE_PARM_DESC(debug, "Debug level mask (see L_xxx constants)"); ++#endif ++ ++#ifdef MODULE_LICENSE ++MODULE_LICENSE("Dual MPL/GPL"); ++#endif ++/* USB had this: MODULE_AUTHOR("Martin Wawro "); */ ++MODULE_AUTHOR("ACX100 Open Source Driver development team"); ++MODULE_DESCRIPTION("Driver for TI ACX1xx based wireless cards (CardBus/PCI/USB)"); ++ ++ ++/*********************************************************************** ++*/ ++/* Probably a number of acx's intermediate buffers for USB transfers, ++** not to be confused with number of descriptors in tx/rx rings ++** (which are not directly accessible to host in USB devices) */ ++#define USB_RX_CNT 10 ++#define USB_TX_CNT 10 ++ ++ ++/*********************************************************************** ++*/ ++ ++/* minutes to wait until next radio recalibration: */ ++#define RECALIB_PAUSE 5 ++ ++/* Please keep acx_reg_domain_ids_len in sync... */ ++const u8 acx_reg_domain_ids[acx_reg_domain_ids_len] = ++ { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40, 0x41, 0x51 }; ++static const u16 reg_domain_channel_masks[acx_reg_domain_ids_len] = ++#ifdef ACX_ALLOW_ALLCHANNELS ++ { 0x3fff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc }; ++#else ++ { 0x07ff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc }; ++#endif ++const char * const ++acx_reg_domain_strings[] = { ++ /* 0 */ " 1-11 FCC (USA)", ++ /* 1 */ " 1-11 DOC/IC (Canada)", ++/* BTW: WLAN use in ETSI is regulated by ETSI standard EN 300 328-2 V1.1.2 */ ++ /* 2 */ " 1-13 ETSI (Europe)", ++ /* 3 */ "10-11 Spain", ++ /* 4 */ "10-13 France", ++ /* 5 */ " 14 MKK (Japan)", ++ /* 6 */ " 1-14 MKK1", ++ /* 7 */ " 3-9 Israel (not all firmware versions)", ++ NULL /* needs to remain as last entry */ ++}; ++ ++ ++ ++/*********************************************************************** ++** Debugging support ++*/ ++#ifdef PARANOID_LOCKING ++static unsigned max_lock_time; ++static unsigned max_sem_time; ++ ++void ++acx_lock_unhold() { max_lock_time = 0; } ++void ++acx_sem_unhold() { max_sem_time = 0; } ++ ++static inline const char* ++sanitize_str(const char *s) ++{ ++ const char* t = strrchr(s, '/'); ++ if (t) return t + 1; ++ return s; ++} ++ ++void ++acx_lock_debug(acx_device_t *adev, const char* where) ++{ ++ unsigned int count = 100*1000*1000; ++ where = sanitize_str(where); ++ while (--count) { ++ if (!spin_is_locked(&adev->lock)) break; ++ cpu_relax(); ++ } ++ if (!count) { ++ printk(KERN_EMERG "LOCKUP: already taken at %s!\n", adev->last_lock); ++ BUG(); ++ } ++ adev->last_lock = where; ++ rdtscl(adev->lock_time); ++} ++void ++acx_unlock_debug(acx_device_t *adev, const char* where) ++{ ++#ifdef SMP ++ if (!spin_is_locked(&adev->lock)) { ++ where = sanitize_str(where); ++ printk(KERN_EMERG "STRAY UNLOCK at %s!\n", where); ++ BUG(); ++ } ++#endif ++ if (acx_debug & L_LOCK) { ++ unsigned long diff; ++ rdtscl(diff); ++ diff -= adev->lock_time; ++ if (diff > max_lock_time) { ++ where = sanitize_str(where); ++ printk("max lock hold time %ld CPU ticks from %s " ++ "to %s\n", diff, adev->last_lock, where); ++ max_lock_time = diff; ++ } ++ } ++} ++void ++acx_down_debug(acx_device_t *adev, const char* where) ++{ ++ int sem_count; ++ unsigned long timeout = jiffies + 5*HZ; ++ ++ where = sanitize_str(where); ++ ++ for (;;) { ++ sem_count = atomic_read(&adev->sem.count); ++ if (sem_count) break; ++ if (time_after(jiffies, timeout)) ++ break; ++ msleep(5); ++ } ++ if (!sem_count) { ++ printk(KERN_EMERG "D STATE at %s! last sem at %s\n", ++ where, adev->last_sem); ++ dump_stack(); ++ } ++ adev->last_sem = where; ++ adev->sem_time = jiffies; ++ down(&adev->sem); ++ if (acx_debug & L_LOCK) { ++ printk("%s: sem_down %d -> %d\n", ++ where, sem_count, atomic_read(&adev->sem.count)); ++ } ++} ++void ++acx_up_debug(acx_device_t *adev, const char* where) ++{ ++ int sem_count = atomic_read(&adev->sem.count); ++ if (sem_count) { ++ where = sanitize_str(where); ++ printk(KERN_EMERG "STRAY UP at %s! sem.count=%d\n", where, sem_count); ++ dump_stack(); ++ } ++ if (acx_debug & L_LOCK) { ++ unsigned long diff = jiffies - adev->sem_time; ++ if (diff > max_sem_time) { ++ where = sanitize_str(where); ++ printk("max sem hold time %ld jiffies from %s " ++ "to %s\n", diff, adev->last_sem, where); ++ max_sem_time = diff; ++ } ++ } ++ up(&adev->sem); ++ if (acx_debug & L_LOCK) { ++ where = sanitize_str(where); ++ printk("%s: sem_up %d -> %d\n", ++ where, sem_count, atomic_read(&adev->sem.count)); ++ } ++} ++#endif /* PARANOID_LOCKING */ ++ ++ ++/*********************************************************************** ++*/ ++#if ACX_DEBUG > 1 ++ ++static int acx_debug_func_indent; ++#define DEBUG_TSC 0 ++#define FUNC_INDENT_INCREMENT 2 ++ ++#if DEBUG_TSC ++#define TIMESTAMP(d) unsigned long d; rdtscl(d) ++#else ++#define TIMESTAMP(d) unsigned long d = jiffies ++#endif ++ ++static const char ++spaces[] = " " " "; /* Nx10 spaces */ ++ ++void ++log_fn_enter(const char *funcname) ++{ ++ int indent; ++ TIMESTAMP(d); ++ ++ indent = acx_debug_func_indent; ++ if (indent >= sizeof(spaces)) ++ indent = sizeof(spaces)-1; ++ ++ printk("%08ld %s==> %s\n", ++ d % 100000000, ++ spaces + (sizeof(spaces)-1) - indent, ++ funcname ++ ); ++ ++ acx_debug_func_indent += FUNC_INDENT_INCREMENT; ++} ++void ++log_fn_exit(const char *funcname) ++{ ++ int indent; ++ TIMESTAMP(d); ++ ++ acx_debug_func_indent -= FUNC_INDENT_INCREMENT; ++ ++ indent = acx_debug_func_indent; ++ if (indent >= sizeof(spaces)) ++ indent = sizeof(spaces)-1; ++ ++ printk("%08ld %s<== %s\n", ++ d % 100000000, ++ spaces + (sizeof(spaces)-1) - indent, ++ funcname ++ ); ++} ++void ++log_fn_exit_v(const char *funcname, int v) ++{ ++ int indent; ++ TIMESTAMP(d); ++ ++ acx_debug_func_indent -= FUNC_INDENT_INCREMENT; ++ ++ indent = acx_debug_func_indent; ++ if (indent >= sizeof(spaces)) ++ indent = sizeof(spaces)-1; ++ ++ printk("%08ld %s<== %s: %08X\n", ++ d % 100000000, ++ spaces + (sizeof(spaces)-1) - indent, ++ funcname, ++ v ++ ); ++} ++#endif /* ACX_DEBUG > 1 */ ++ ++ ++/*********************************************************************** ++** Basically a msleep with logging ++*/ ++void ++acx_s_msleep(int ms) ++{ ++ FN_ENTER; ++ msleep(ms); ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** Not inlined: it's larger than it seems ++*/ ++void ++acx_print_mac(const char *head, const u8 *mac, const char *tail) ++{ ++ printk("%s"MACSTR"%s", head, MAC(mac), tail); ++} ++ ++ ++/*********************************************************************** ++** acx_get_status_name ++*/ ++static const char* ++acx_get_status_name(u16 status) ++{ ++ static const char * const str[] = { ++ "STOPPED", "SCANNING", "WAIT_AUTH", ++ "AUTHENTICATED", "ASSOCIATED", "INVALID??" ++ }; ++ if (status > VEC_SIZE(str)-1) ++ status = VEC_SIZE(str)-1; ++ ++ return str[status]; ++} ++ ++ ++/*********************************************************************** ++** acx_get_packet_type_string ++*/ ++#if ACX_DEBUG ++const char* ++acx_get_packet_type_string(u16 fc) ++{ ++ static const char * const mgmt_arr[] = { ++ "MGMT/AssocReq", "MGMT/AssocResp", "MGMT/ReassocReq", ++ "MGMT/ReassocResp", "MGMT/ProbeReq", "MGMT/ProbeResp", ++ "MGMT/UNKNOWN", "MGMT/UNKNOWN", "MGMT/Beacon", "MGMT/ATIM", ++ "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen" ++ }; ++ static const char * const ctl_arr[] = { ++ "CTL/PSPoll", "CTL/RTS", "CTL/CTS", "CTL/Ack", "CTL/CFEnd", ++ "CTL/CFEndCFAck" ++ }; ++ static const char * const data_arr[] = { ++ "DATA/DataOnly", "DATA/Data CFAck", "DATA/Data CFPoll", ++ "DATA/Data CFAck/CFPoll", "DATA/Null", "DATA/CFAck", ++ "DATA/CFPoll", "DATA/CFAck/CFPoll" ++ }; ++ const char *str; ++ u8 fstype = (WF_FC_FSTYPE & fc) >> 4; ++ u8 ctl; ++ ++ switch (WF_FC_FTYPE & fc) { ++ case WF_FTYPE_MGMT: ++ if (fstype < VEC_SIZE(mgmt_arr)) ++ str = mgmt_arr[fstype]; ++ else ++ str = "MGMT/UNKNOWN"; ++ break; ++ case WF_FTYPE_CTL: ++ ctl = fstype - 0x0a; ++ if (ctl < VEC_SIZE(ctl_arr)) ++ str = ctl_arr[ctl]; ++ else ++ str = "CTL/UNKNOWN"; ++ break; ++ case WF_FTYPE_DATA: ++ if (fstype < VEC_SIZE(data_arr)) ++ str = data_arr[fstype]; ++ else ++ str = "DATA/UNKNOWN"; ++ break; ++ default: ++ str = "UNKNOWN"; ++ break; ++ } ++ return str; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_wlan_reason_str ++*/ ++static inline const char* ++acx_wlan_reason_str(u16 reason) ++{ ++ static const char* const reason_str[] = { ++ /* 0 */ "?", ++ /* 1 */ "unspecified", ++ /* 2 */ "prev auth is not valid", ++ /* 3 */ "leaving BBS", ++ /* 4 */ "due to inactivity", ++ /* 5 */ "AP is busy", ++ /* 6 */ "got class 2 frame from non-auth'ed STA", ++ /* 7 */ "got class 3 frame from non-assoc'ed STA", ++ /* 8 */ "STA has left BSS", ++ /* 9 */ "assoc without auth is not allowed", ++ /* 10 */ "bad power setting (802.11h)", ++ /* 11 */ "bad channel (802.11i)", ++ /* 12 */ "?", ++ /* 13 */ "invalid IE", ++ /* 14 */ "MIC failure", ++ /* 15 */ "four-way handshake timeout", ++ /* 16 */ "group key handshake timeout", ++ /* 17 */ "IE is different", ++ /* 18 */ "invalid group cipher", ++ /* 19 */ "invalid pairwise cipher", ++ /* 20 */ "invalid AKMP", ++ /* 21 */ "unsupported RSN version", ++ /* 22 */ "invalid RSN IE cap", ++ /* 23 */ "802.1x failed", ++ /* 24 */ "cipher suite rejected" ++ }; ++ return reason < VEC_SIZE(reason_str) ? reason_str[reason] : "?"; ++} ++ ++ ++/*********************************************************************** ++** acx_cmd_status_str ++*/ ++const char* ++acx_cmd_status_str(unsigned int state) ++{ ++ static const char * const cmd_error_strings[] = { ++ "Idle", ++ "Success", ++ "Unknown Command", ++ "Invalid Information Element", ++ "Channel rejected", ++ "Channel invalid in current regulatory domain", ++ "MAC invalid", ++ "Command rejected (read-only information element)", ++ "Command rejected", ++ "Already asleep", ++ "TX in progress", ++ "Already awake", ++ "Write only", ++ "RX in progress", ++ "Invalid parameter", ++ "Scan in progress", ++ "Failed" ++ }; ++ return state < VEC_SIZE(cmd_error_strings) ? ++ cmd_error_strings[state] : "?"; ++} ++ ++ ++/*********************************************************************** ++** get_status_string ++*/ ++static inline const char* ++get_status_string(unsigned int status) ++{ ++ /* A bit shortened, but hopefully still understandable */ ++ static const char * const status_str[] = { ++ /* 0 */ "Successful", ++ /* 1 */ "Unspecified failure", ++ /* 2 */ "reserved", ++ /* 3 */ "reserved", ++ /* 4 */ "reserved", ++ /* 5 */ "reserved", ++ /* 6 */ "reserved", ++ /* 7 */ "reserved", ++ /* 8 */ "reserved", ++ /* 9 */ "reserved", ++ /*10 */ "Cannot support all requested capabilities in Capability Information field", ++ /*11 */ "Reassoc denied (reason outside of 802.11b scope)", ++ /*12 */ "Assoc denied (reason outside of 802.11b scope) -- maybe MAC filtering by peer?", ++ /*13 */ "Responding station doesnt support specified auth algorithm -- maybe WEP auth Open vs. Restricted?", ++ /*14 */ "Auth rejected: wrong transaction sequence number", ++ /*15 */ "Auth rejected: challenge failure", ++ /*16 */ "Auth rejected: timeout for next frame in sequence", ++ /*17 */ "Assoc denied: too many STAs on this AP", ++ /*18 */ "Assoc denied: requesting STA doesnt support all data rates in basic set", ++ /*19 */ "Assoc denied: requesting STA doesnt support Short Preamble", ++ /*20 */ "Assoc denied: requesting STA doesnt support PBCC Modulation", ++ /*21 */ "Assoc denied: requesting STA doesnt support Channel Agility" ++ /*22 */ "reserved", ++ /*23 */ "reserved", ++ /*24 */ "reserved", ++ /*25 */ "Assoc denied: requesting STA doesnt support Short Slot Time", ++ /*26 */ "Assoc denied: requesting STA doesnt support DSSS-OFDM" ++ }; ++ ++ return status_str[status < VEC_SIZE(status_str) ? status : 2]; ++} ++ ++ ++/*********************************************************************** ++*/ ++void ++acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr) ++{ ++ if (acx_debug & L_ASSOC) { ++ int offset = (u8*)ie_ptr - (u8*)hdr; ++ printk("acx: unknown EID %d in mgmt frame at offset %d. IE: ", ++ ie_ptr->eid, offset); ++ /* IE len can be bogus, IE can extend past packet end. Oh well... */ ++ acx_dump_bytes(ie_ptr, ie_ptr->len + 2); ++ if (acx_debug & L_DATA) { ++ printk("frame (%s): ", ++ acx_get_packet_type_string(le16_to_cpu(hdr->fc))); ++ acx_dump_bytes(hdr, len); ++ } ++ } ++} ++ ++ ++/*********************************************************************** ++*/ ++#if ACX_DEBUG ++void ++acx_dump_bytes(const void *data, int num) ++{ ++ const u8* ptr = (const u8*)data; ++ ++ if (num <= 0) { ++ printk("\n"); ++ return; ++ } ++ ++ while (num >= 16) { ++ printk( "%02X %02X %02X %02X %02X %02X %02X %02X " ++ "%02X %02X %02X %02X %02X %02X %02X %02X\n", ++ ptr[0], ptr[1], ptr[2], ptr[3], ++ ptr[4], ptr[5], ptr[6], ptr[7], ++ ptr[8], ptr[9], ptr[10], ptr[11], ++ ptr[12], ptr[13], ptr[14], ptr[15]); ++ num -= 16; ++ ptr += 16; ++ } ++ if (num > 0) { ++ while (--num > 0) ++ printk("%02X ", *ptr++); ++ printk("%02X\n", *ptr); ++ } ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_s_get_firmware_version ++*/ ++void ++acx_s_get_firmware_version(acx_device_t *adev) ++{ ++ fw_ver_t fw; ++ u8 hexarr[4] = { 0, 0, 0, 0 }; ++ int hexidx = 0, val = 0; ++ const char *num; ++ char c; ++ ++ FN_ENTER; ++ ++ memset(fw.fw_id, 'E', FW_ID_SIZE); ++ acx_s_interrogate(adev, &fw, ACX1xx_IE_FWREV); ++ memcpy(adev->firmware_version, fw.fw_id, FW_ID_SIZE); ++ adev->firmware_version[FW_ID_SIZE] = '\0'; ++ ++ log(L_DEBUG, "fw_ver: fw_id='%s' hw_id=%08X\n", ++ adev->firmware_version, fw.hw_id); ++ ++ if (strncmp(fw.fw_id, "Rev ", 4) != 0) { ++ printk("acx: strange firmware version string " ++ "'%s', please report\n", adev->firmware_version); ++ adev->firmware_numver = 0x01090407; /* assume 1.9.4.7 */ ++ } else { ++ num = &fw.fw_id[4]; ++ while (1) { ++ c = *num++; ++ if ((c == '.') || (c == '\0')) { ++ hexarr[hexidx++] = val; ++ if ((hexidx > 3) || (c == '\0')) /* end? */ ++ break; ++ val = 0; ++ continue; ++ } ++ if ((c >= '0') && (c <= '9')) ++ c -= '0'; ++ else ++ c = c - 'a' + (char)10; ++ val = val*16 + c; ++ } ++ ++ adev->firmware_numver = (u32)( ++ (hexarr[0] << 24) | (hexarr[1] << 16) ++ | (hexarr[2] << 8) | hexarr[3]); ++ log(L_DEBUG, "firmware_numver 0x%08X\n", adev->firmware_numver); ++ } ++ if (IS_ACX111(adev)) { ++ if (adev->firmware_numver == 0x00010011) { ++ /* This one does not survive floodpinging */ ++ printk("acx: firmware '%s' is known to be buggy, " ++ "please upgrade\n", adev->firmware_version); ++ } ++ } ++ ++ adev->firmware_id = le32_to_cpu(fw.hw_id); ++ ++ /* we're able to find out more detailed chip names now */ ++ switch (adev->firmware_id & 0xffff0000) { ++ case 0x01010000: ++ case 0x01020000: ++ adev->chip_name = "TNETW1100A"; ++ break; ++ case 0x01030000: ++ adev->chip_name = "TNETW1100B"; ++ break; ++ case 0x03000000: ++ case 0x03010000: ++ adev->chip_name = "TNETW1130"; ++ break; ++ case 0x04030000: /* 0x04030101 is TNETW1450 */ ++ adev->chip_name = "TNETW1450"; ++ break; ++ default: ++ printk("acx: unknown chip ID 0x%08X, " ++ "please report\n", adev->firmware_id); ++ break; ++ } ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_display_hardware_details ++** ++** Displays hw/fw version, radio type etc... ++*/ ++void ++acx_display_hardware_details(acx_device_t *adev) ++{ ++ const char *radio_str, *form_str; ++ ++ FN_ENTER; ++ ++ switch (adev->radio_type) { ++ case RADIO_MAXIM_0D: ++ radio_str = "Maxim"; ++ break; ++ case RADIO_RFMD_11: ++ radio_str = "RFMD"; ++ break; ++ case RADIO_RALINK_15: ++ radio_str = "Ralink"; ++ break; ++ case RADIO_RADIA_16: ++ radio_str = "Radia"; ++ break; ++ case RADIO_UNKNOWN_17: ++ /* TI seems to have a radio which is ++ * additionally 802.11a capable, too */ ++ radio_str = "802.11a/b/g radio?! Please report"; ++ break; ++ case RADIO_UNKNOWN_19: ++ radio_str = "A radio used by Safecom cards?! Please report"; ++ break; ++ case RADIO_UNKNOWN_1B: ++ radio_str = "An unknown radio used by TNETW1450 USB adapters"; ++ break; ++ default: ++ radio_str = "UNKNOWN, please report radio type name!"; ++ break; ++ } ++ ++ switch (adev->form_factor) { ++ case 0x00: ++ form_str = "unspecified"; ++ break; ++ case 0x01: ++ form_str = "(mini-)PCI / CardBus"; ++ break; ++ case 0x02: ++ form_str = "USB"; ++ break; ++ case 0x03: ++ form_str = "Compact Flash"; ++ break; ++ default: ++ form_str = "UNKNOWN, please report"; ++ break; ++ } ++ ++ printk("acx: === chipset %s, radio type 0x%02X (%s), " ++ "form factor 0x%02X (%s), EEPROM version 0x%02X: " ++ "uploaded firmware '%s' ===\n", ++ adev->chip_name, adev->radio_type, radio_str, ++ adev->form_factor, form_str, adev->eeprom_version, ++ adev->firmware_version); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx_e_change_mtu(struct net_device *ndev, int mtu) ++{ ++ enum { ++ MIN_MTU = 256, ++ MAX_MTU = WLAN_DATA_MAXLEN - (ETH_HLEN) ++ }; ++ ++ if (mtu < MIN_MTU || mtu > MAX_MTU) ++ return -EINVAL; ++ ++ ndev->mtu = mtu; ++ return 0; ++} ++ ++ ++/*********************************************************************** ++** acx_e_get_stats, acx_e_get_wireless_stats ++*/ ++struct net_device_stats* ++acx_e_get_stats(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ return &adev->stats; ++} ++ ++struct iw_statistics* ++acx_e_get_wireless_stats(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ return &adev->wstats; ++} ++ ++ ++/*********************************************************************** ++** maps acx111 tx descr rate field to acx100 one ++*/ ++const u8 ++acx_bitpos2rate100[] = { ++ RATE100_1 ,/* 0 */ ++ RATE100_2 ,/* 1 */ ++ RATE100_5 ,/* 2 */ ++ RATE100_2 ,/* 3, should not happen */ ++ RATE100_2 ,/* 4, should not happen */ ++ RATE100_11 ,/* 5 */ ++ RATE100_2 ,/* 6, should not happen */ ++ RATE100_2 ,/* 7, should not happen */ ++ RATE100_22 ,/* 8 */ ++ RATE100_2 ,/* 9, should not happen */ ++ RATE100_2 ,/* 10, should not happen */ ++ RATE100_2 ,/* 11, should not happen */ ++ RATE100_2 ,/* 12, should not happen */ ++ RATE100_2 ,/* 13, should not happen */ ++ RATE100_2 ,/* 14, should not happen */ ++ RATE100_2 ,/* 15, should not happen */ ++}; ++ ++u8 ++acx_rate111to100(u16 r) { ++ return acx_bitpos2rate100[highest_bit(r)]; ++} ++ ++ ++/*********************************************************************** ++** Calculate level like the feb 2003 windows driver seems to do ++*/ ++static u8 ++acx_signal_to_winlevel(u8 rawlevel) ++{ ++ /* u8 winlevel = (u8) (0.5 + 0.625 * rawlevel); */ ++ u8 winlevel = ((4 + (rawlevel * 5)) / 8); ++ ++ if (winlevel > 100) ++ winlevel = 100; ++ return winlevel; ++} ++ ++u8 ++acx_signal_determine_quality(u8 signal, u8 noise) ++{ ++ int qual; ++ ++ qual = (((signal - 30) * 100 / 70) + (100 - noise * 4)) / 2; ++ ++ if (qual > 100) ++ return 100; ++ if (qual < 0) ++ return 0; ++ return qual; ++} ++ ++ ++/*********************************************************************** ++** Interrogate/configure commands ++*/ ++ ++/* FIXME: the lengths given here probably aren't always correct. ++ * They should be gradually replaced by proper "sizeof(acx1XX_ie_XXXX)-4", ++ * unless the firmware actually expects a different length than the struct length */ ++static const u16 ++acx100_ie_len[] = { ++ 0, ++ ACX100_IE_ACX_TIMER_LEN, ++ sizeof(acx100_ie_powersave_t)-4, /* is that 6 or 8??? */ ++ ACX1xx_IE_QUEUE_CONFIG_LEN, ++ ACX100_IE_BLOCK_SIZE_LEN, ++ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN, ++ ACX1xx_IE_RATE_FALLBACK_LEN, ++ ACX100_IE_WEP_OPTIONS_LEN, ++ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */ ++ 0, ++ ACX1xx_IE_ASSOC_ID_LEN, ++ 0, ++ ACX111_IE_CONFIG_OPTIONS_LEN, ++ ACX1xx_IE_FWREV_LEN, ++ ACX1xx_IE_FCS_ERROR_COUNT_LEN, ++ ACX1xx_IE_MEDIUM_USAGE_LEN, ++ ACX1xx_IE_RXCONFIG_LEN, ++ 0, ++ 0, ++ sizeof(fw_stats_t)-4, ++ 0, ++ ACX1xx_IE_FEATURE_CONFIG_LEN, ++ ACX111_IE_KEY_CHOOSE_LEN, ++ ACX1FF_IE_MISC_CONFIG_TABLE_LEN, ++ ACX1FF_IE_WONE_CONFIG_LEN, ++ 0, ++ ACX1FF_IE_TID_CONFIG_LEN, ++ 0, ++ 0, ++ 0, ++ ACX1FF_IE_CALIB_ASSESSMENT_LEN, ++ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN, ++ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN, ++ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN, ++ 0, ++ ACX1FF_IE_PACKET_DETECT_THRESH_LEN, ++ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN, ++ ACX1FF_IE_CCA_THRESHOLD_LEN, ++ ACX1FF_IE_EVENT_MASK_LEN, ++ ACX1FF_IE_DTIM_PERIOD_LEN, ++ 0, ++ ACX1FF_IE_ACI_CONFIG_SET_LEN, ++ 0, ++ 0, ++ 0, ++ 0, ++ 0, ++ 0, ++ ACX1FF_IE_EEPROM_VER_LEN, ++}; ++ ++static const u16 ++acx100_ie_len_dot11[] = { ++ 0, ++ ACX1xx_IE_DOT11_STATION_ID_LEN, ++ 0, ++ ACX100_IE_DOT11_BEACON_PERIOD_LEN, ++ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN, ++ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN, ++ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN, ++ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN, ++ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN, ++ 0, ++ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN, ++ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN, ++ 0, ++ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN, ++ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN, ++ ACX100_IE_DOT11_ED_THRESHOLD_LEN, ++ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN, ++ 0, ++ 0, ++ 0, ++}; ++ ++static const u16 ++acx111_ie_len[] = { ++ 0, ++ ACX100_IE_ACX_TIMER_LEN, ++ sizeof(acx111_ie_powersave_t)-4, ++ ACX1xx_IE_QUEUE_CONFIG_LEN, ++ ACX100_IE_BLOCK_SIZE_LEN, ++ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN, ++ ACX1xx_IE_RATE_FALLBACK_LEN, ++ ACX100_IE_WEP_OPTIONS_LEN, ++ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */ ++ 0, ++ ACX1xx_IE_ASSOC_ID_LEN, ++ 0, ++ ACX111_IE_CONFIG_OPTIONS_LEN, ++ ACX1xx_IE_FWREV_LEN, ++ ACX1xx_IE_FCS_ERROR_COUNT_LEN, ++ ACX1xx_IE_MEDIUM_USAGE_LEN, ++ ACX1xx_IE_RXCONFIG_LEN, ++ 0, ++ 0, ++ sizeof(fw_stats_t)-4, ++ 0, ++ ACX1xx_IE_FEATURE_CONFIG_LEN, ++ ACX111_IE_KEY_CHOOSE_LEN, ++ ACX1FF_IE_MISC_CONFIG_TABLE_LEN, ++ ACX1FF_IE_WONE_CONFIG_LEN, ++ 0, ++ ACX1FF_IE_TID_CONFIG_LEN, ++ 0, ++ 0, ++ 0, ++ ACX1FF_IE_CALIB_ASSESSMENT_LEN, ++ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN, ++ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN, ++ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN, ++ 0, ++ ACX1FF_IE_PACKET_DETECT_THRESH_LEN, ++ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN, ++ ACX1FF_IE_CCA_THRESHOLD_LEN, ++ ACX1FF_IE_EVENT_MASK_LEN, ++ ACX1FF_IE_DTIM_PERIOD_LEN, ++ 0, ++ ACX1FF_IE_ACI_CONFIG_SET_LEN, ++ 0, ++ 0, ++ 0, ++ 0, ++ 0, ++ 0, ++ ACX1FF_IE_EEPROM_VER_LEN, ++}; ++ ++static const u16 ++acx111_ie_len_dot11[] = { ++ 0, ++ ACX1xx_IE_DOT11_STATION_ID_LEN, ++ 0, ++ ACX100_IE_DOT11_BEACON_PERIOD_LEN, ++ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN, ++ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN, ++ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN, ++ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN, ++ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN, ++ 0, ++ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN, ++ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN, ++ 0, ++ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN, ++ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN, ++ ACX100_IE_DOT11_ED_THRESHOLD_LEN, ++ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN, ++ 0, ++ 0, ++ 0, ++}; ++ ++ ++#undef FUNC ++#define FUNC "configure" ++#if !ACX_DEBUG ++int ++acx_s_configure(acx_device_t *adev, void *pdr, int type) ++{ ++#else ++int ++acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* typestr) ++{ ++#endif ++ u16 len; ++ int res; ++ ++ if (type < 0x1000) ++ len = adev->ie_len[type]; ++ else ++ len = adev->ie_len_dot11[type - 0x1000]; ++ ++ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len); ++ if (unlikely(!len)) { ++ log(L_DEBUG, "zero-length type %s?!\n", typestr); ++ } ++ ++ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type); ++ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len); ++ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIGURE, pdr, len + 4); ++ if (unlikely(OK != res)) { ++#if ACX_DEBUG ++ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr); ++#else ++ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type); ++#endif ++ /* dump_stack() is already done in issue_cmd() */ ++ } ++ return res; ++} ++ ++#undef FUNC ++#define FUNC "interrogate" ++#if !ACX_DEBUG ++int ++acx_s_interrogate(acx_device_t *adev, void *pdr, int type) ++{ ++#else ++int ++acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type, ++ const char* typestr) ++{ ++#endif ++ u16 len; ++ int res; ++ ++ /* FIXME: no check whether this exceeds the array yet. ++ * We should probably remember the number of entries... */ ++ if (type < 0x1000) ++ len = adev->ie_len[type]; ++ else ++ len = adev->ie_len_dot11[type-0x1000]; ++ ++ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len); ++ ++ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type); ++ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len); ++ res = acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, pdr, len + 4); ++ if (unlikely(OK != res)) { ++#if ACX_DEBUG ++ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr); ++#else ++ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type); ++#endif ++ /* dump_stack() is already done in issue_cmd() */ ++ } ++ return res; ++} ++ ++#if CMD_DISCOVERY ++void ++great_inquisitor(acx_device_t *adev) ++{ ++ static struct { ++ u16 type; ++ u16 len; ++ /* 0x200 was too large here: */ ++ u8 data[0x100 - 4]; ++ } ACX_PACKED ie; ++ u16 type; ++ ++ FN_ENTER; ++ ++ /* 0..0x20, 0x1000..0x1020 */ ++ for (type = 0; type <= 0x1020; type++) { ++ if (type == 0x21) ++ type = 0x1000; ++ ie.type = cpu_to_le16(type); ++ ie.len = cpu_to_le16(sizeof(ie) - 4); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, &ie, sizeof(ie)); ++ } ++ FN_EXIT0; ++} ++#endif ++ ++ ++#ifdef CONFIG_PROC_FS ++/*********************************************************************** ++** /proc files ++*/ ++/*********************************************************************** ++** acx_l_proc_output ++** Generate content for our /proc entry ++** ++** Arguments: ++** buf is a pointer to write output to ++** adev is the usual pointer to our private struct acx_device ++** Returns: ++** number of bytes actually written to buf ++** Side effects: ++** none ++*/ ++static int ++acx_l_proc_output(char *buf, acx_device_t *adev) ++{ ++ char *p = buf; ++ int i; ++ ++ FN_ENTER; ++ ++ p += sprintf(p, ++ "acx driver version:\t\t" ACX_RELEASE "\n" ++ "Wireless extension version:\t" STRING(WIRELESS_EXT) "\n" ++ "chip name:\t\t\t%s (0x%08X)\n" ++ "radio type:\t\t\t0x%02X\n" ++ "form factor:\t\t\t0x%02X\n" ++ "EEPROM version:\t\t\t0x%02X\n" ++ "firmware version:\t\t%s (0x%08X)\n", ++ adev->chip_name, adev->firmware_id, ++ adev->radio_type, ++ adev->form_factor, ++ adev->eeprom_version, ++ adev->firmware_version, adev->firmware_numver); ++ ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ struct client *bss = &adev->sta_list[i]; ++ if (!bss->used) continue; ++ p += sprintf(p, "BSS %u BSSID "MACSTR" ESSID %s channel %u " ++ "Cap 0x%X SIR %u SNR %u\n", ++ i, MAC(bss->bssid), (char*)bss->essid, bss->channel, ++ bss->cap_info, bss->sir, bss->snr); ++ } ++ p += sprintf(p, "status:\t\t\t%u (%s)\n", ++ adev->status, acx_get_status_name(adev->status)); ++ ++ FN_EXIT1(p - buf); ++ return p - buf; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_s_proc_diag_output(char *buf, acx_device_t *adev) ++{ ++ char *p = buf; ++ unsigned long flags; ++ unsigned int len = 0, partlen; ++ u32 temp1, temp2; ++ u8 *st, *st_end; ++#ifdef __BIG_ENDIAN ++ u8 *st2; ++#endif ++ fw_stats_t *fw_stats; ++ char *part_str = NULL; ++ fw_stats_tx_t *tx = NULL; ++ fw_stats_rx_t *rx = NULL; ++ fw_stats_dma_t *dma = NULL; ++ fw_stats_irq_t *irq = NULL; ++ fw_stats_wep_t *wep = NULL; ++ fw_stats_pwr_t *pwr = NULL; ++ fw_stats_mic_t *mic = NULL; ++ fw_stats_aes_t *aes = NULL; ++ fw_stats_event_t *evt = NULL; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++#if defined (ACX_MEM) ++ p = acxmem_s_proc_diag_output(p, adev); ++#else ++ if (IS_PCI(adev)) ++ p = acxpci_s_proc_diag_output(p, adev); ++#endif ++ ++ p += sprintf(p, ++ "\n" ++ "** network status **\n" ++ "dev_state_mask 0x%04X\n" ++ "status %u (%s), " ++ "mode %u, channel %u, " ++ "reg_dom_id 0x%02X, reg_dom_chanmask 0x%04X, ", ++ adev->dev_state_mask, ++ adev->status, acx_get_status_name(adev->status), ++ adev->mode, adev->channel, ++ adev->reg_dom_id, adev->reg_dom_chanmask ++ ); ++ p += sprintf(p, ++ "ESSID \"%s\", essid_active %d, essid_len %d, " ++ "essid_for_assoc \"%s\", nick \"%s\"\n" ++ "WEP ena %d, restricted %d, idx %d\n", ++ adev->essid, adev->essid_active, (int)adev->essid_len, ++ adev->essid_for_assoc, adev->nick, ++ adev->wep_enabled, adev->wep_restricted, ++ adev->wep_current_index); ++ p += sprintf(p, "dev_addr "MACSTR"\n", MAC(adev->dev_addr)); ++ p += sprintf(p, "bssid "MACSTR"\n", MAC(adev->bssid)); ++ p += sprintf(p, "ap_filter "MACSTR"\n", MAC(adev->ap)); ++ ++ p += sprintf(p, ++ "\n" ++ "** PHY status **\n" ++ "tx_disabled %d, tx_level_dbm %d\n" /* "tx_level_val %d, tx_level_auto %d\n" */ ++ "sensitivity %d, antenna 0x%02X, ed_threshold %d, cca %d, preamble_mode %d\n" ++ "rate_basic 0x%04X, rate_oper 0x%04X\n" ++ "rts_threshold %d, frag_threshold %d, short_retry %d, long_retry %d\n" ++ "msdu_lifetime %d, listen_interval %d, beacon_interval %d\n", ++ adev->tx_disabled, adev->tx_level_dbm, /* adev->tx_level_val, adev->tx_level_auto, */ ++ adev->sensitivity, adev->antenna, adev->ed_threshold, adev->cca, adev->preamble_mode, ++ adev->rate_basic, adev->rate_oper, ++ adev->rts_threshold, adev->frag_threshold, adev->short_retry, adev->long_retry, ++ adev->msdu_lifetime, adev->listen_interval, adev->beacon_interval); ++ ++ acx_unlock(adev, flags); ++ ++ p += sprintf(p, ++ "\n" ++ "** Firmware **\n" ++ "NOTE: version dependent statistics layout, " ++ "please report if you suspect wrong parsing!\n" ++ "\n" ++ "version \"%s\"\n", adev->firmware_version); ++ ++ /* TODO: may replace kmalloc/memset with kzalloc once ++ * Linux 2.6.14 is widespread */ ++ fw_stats = kmalloc(sizeof(*fw_stats), GFP_KERNEL); ++ if (!fw_stats) { ++ FN_EXIT1(0); ++ return 0; ++ } ++ memset(fw_stats, 0, sizeof(*fw_stats)); ++ ++ st = (u8 *)fw_stats; ++ ++ part_str = "statistics query command"; ++ ++ if (OK != acx_s_interrogate(adev, st, ACX1xx_IE_FIRMWARE_STATISTICS)) ++ goto fw_stats_end; ++ ++ st += sizeof(u16); ++ len = *(u16 *)st; ++ ++ if (len > sizeof(*fw_stats)) { ++ p += sprintf(p, ++ "firmware version with bigger fw_stats struct detected\n" ++ "(%u vs. %u), please report\n", len, sizeof(fw_stats_t)); ++ if (len > sizeof(*fw_stats)) { ++ p += sprintf(p, "struct size exceeded allocation!\n"); ++ len = sizeof(*fw_stats); ++ } ++ } ++ st += sizeof(u16); ++ st_end = st - 2*sizeof(u16) + len; ++ ++#ifdef __BIG_ENDIAN ++ /* let's make one bold assumption here: ++ * (hopefully!) *all* statistics fields are u32 only, ++ * thus if we need to make endianness corrections ++ * we can simply do them in one go, in advance */ ++ st2 = (u8 *)fw_stats; ++ for (temp1 = 0; temp1 < len; temp1 += 4, st2 += 4) ++ *(u32 *)st2 = le32_to_cpu(*(u32 *)st2); ++#endif ++ ++ part_str = "Rx/Tx"; ++ ++ /* directly at end of a struct part? --> no error! */ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ tx = (fw_stats_tx_t *)st; ++ st += sizeof(fw_stats_tx_t); ++ rx = (fw_stats_rx_t *)st; ++ st += sizeof(fw_stats_rx_t); ++ partlen = sizeof(fw_stats_tx_t) + sizeof(fw_stats_rx_t); ++ ++ if (IS_ACX100(adev)) { ++ /* at least ACX100 PCI F/W 1.9.8.b ++ * and ACX100 USB F/W 1.0.7-USB ++ * don't have those two fields... */ ++ st -= 2*sizeof(u32); ++ ++ /* our parsing doesn't quite match this firmware yet, ++ * log failure */ ++ if (st > st_end) ++ goto fw_stats_fail; ++ temp1 = temp2 = 999999999; ++ } else { ++ if (st > st_end) ++ goto fw_stats_fail; ++ temp1 = rx->rx_aci_events; ++ temp2 = rx->rx_aci_resets; ++ } ++ ++ p += sprintf(p, ++ "%s:\n" ++ " tx_desc_overfl %u\n" ++ " rx_OutOfMem %u, rx_hdr_overfl %u, rx_hw_stuck %u\n" ++ " rx_dropped_frame %u, rx_frame_ptr_err %u, rx_xfr_hint_trig %u\n" ++ " rx_aci_events %u, rx_aci_resets %u\n", ++ part_str, ++ tx->tx_desc_of, ++ rx->rx_oom, ++ rx->rx_hdr_of, ++ rx->rx_hw_stuck, ++ rx->rx_dropped_frame, ++ rx->rx_frame_ptr_err, ++ rx->rx_xfr_hint_trig, ++ temp1, ++ temp2); ++ ++ part_str = "DMA"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ dma = (fw_stats_dma_t *)st; ++ partlen = sizeof(fw_stats_dma_t); ++ st += partlen; ++ ++ if (st > st_end) ++ goto fw_stats_fail; ++ ++ p += sprintf(p, ++ "%s:\n" ++ " rx_dma_req %u, rx_dma_err %u, tx_dma_req %u, tx_dma_err %u\n", ++ part_str, ++ dma->rx_dma_req, ++ dma->rx_dma_err, ++ dma->tx_dma_req, ++ dma->tx_dma_err); ++ ++ part_str = "IRQ"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ irq = (fw_stats_irq_t *)st; ++ partlen = sizeof(fw_stats_irq_t); ++ st += partlen; ++ ++ if (st > st_end) ++ goto fw_stats_fail; ++ ++ p += sprintf(p, ++ "%s:\n" ++ " cmd_cplt %u, fiq %u\n" ++ " rx_hdrs %u, rx_cmplt %u, rx_mem_overfl %u, rx_rdys %u\n" ++ " irqs %u, tx_procs %u, decrypt_done %u\n" ++ " dma_0_done %u, dma_1_done %u, tx_exch_complet %u\n" ++ " commands %u, rx_procs %u, hw_pm_mode_changes %u\n" ++ " host_acks %u, pci_pm %u, acm_wakeups %u\n", ++ part_str, ++ irq->cmd_cplt, ++ irq->fiq, ++ irq->rx_hdrs, ++ irq->rx_cmplt, ++ irq->rx_mem_of, ++ irq->rx_rdys, ++ irq->irqs, ++ irq->tx_procs, ++ irq->decrypt_done, ++ irq->dma_0_done, ++ irq->dma_1_done, ++ irq->tx_exch_complet, ++ irq->commands, ++ irq->rx_procs, ++ irq->hw_pm_mode_changes, ++ irq->host_acks, ++ irq->pci_pm, ++ irq->acm_wakeups); ++ ++ part_str = "WEP"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ wep = (fw_stats_wep_t *)st; ++ partlen = sizeof(fw_stats_wep_t); ++ st += partlen; ++ ++ if ( ++ (IS_PCI(adev) && IS_ACX100(adev)) ++ || (IS_USB(adev) && IS_ACX100(adev)) ++ || (IS_MEM(adev) && IS_ACX100(adev)) ++ ) { ++ /* at least ACX100 PCI F/W 1.9.8.b, ++ * ACX100 USB F/W 1.0.7-USB ++ * and ACX100 Generic Slave F/W 1.10.7.K ++ * don't have those two fields... ++ */ ++ st -= 2*sizeof(u32); ++ if (st > st_end) ++ goto fw_stats_fail; ++ temp1 = temp2 = 999999999; ++ } else { ++ if (st > st_end) ++ goto fw_stats_fail; ++ temp1 = wep->wep_pkt_decrypt; ++ temp2 = wep->wep_decrypt_irqs; ++ } ++ ++ p += sprintf(p, ++ "%s:\n" ++ " wep_key_count %u, wep_default_key_count %u, dot11_def_key_mib %u\n" ++ " wep_key_not_found %u, wep_decrypt_fail %u\n" ++ " wep_pkt_decrypt %u, wep_decrypt_irqs %u\n", ++ part_str, ++ wep->wep_key_count, ++ wep->wep_default_key_count, ++ wep->dot11_def_key_mib, ++ wep->wep_key_not_found, ++ wep->wep_decrypt_fail, ++ temp1, ++ temp2); ++ ++ part_str = "power"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ pwr = (fw_stats_pwr_t *)st; ++ partlen = sizeof(fw_stats_pwr_t); ++ st += partlen; ++ ++ if (st > st_end) ++ goto fw_stats_fail; ++ ++ p += sprintf(p, ++ "%s:\n" ++ " tx_start_ctr %u, no_ps_tx_too_short %u\n" ++ " rx_start_ctr %u, no_ps_rx_too_short %u\n" ++ " lppd_started %u\n" ++ " no_lppd_too_noisy %u, no_lppd_too_short %u, no_lppd_matching_frame %u\n", ++ part_str, ++ pwr->tx_start_ctr, ++ pwr->no_ps_tx_too_short, ++ pwr->rx_start_ctr, ++ pwr->no_ps_rx_too_short, ++ pwr->lppd_started, ++ pwr->no_lppd_too_noisy, ++ pwr->no_lppd_too_short, ++ pwr->no_lppd_matching_frame); ++ ++ part_str = "MIC"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ mic = (fw_stats_mic_t *)st; ++ partlen = sizeof(fw_stats_mic_t); ++ st += partlen; ++ ++ if (st > st_end) ++ goto fw_stats_fail; ++ ++ p += sprintf(p, ++ "%s:\n" ++ " mic_rx_pkts %u, mic_calc_fail %u\n", ++ part_str, ++ mic->mic_rx_pkts, ++ mic->mic_calc_fail); ++ ++ part_str = "AES"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ aes = (fw_stats_aes_t *)st; ++ partlen = sizeof(fw_stats_aes_t); ++ st += partlen; ++ ++ if (st > st_end) ++ goto fw_stats_fail; ++ ++ p += sprintf(p, ++ "%s:\n" ++ " aes_enc_fail %u, aes_dec_fail %u\n" ++ " aes_enc_pkts %u, aes_dec_pkts %u\n" ++ " aes_enc_irq %u, aes_dec_irq %u\n", ++ part_str, ++ aes->aes_enc_fail, ++ aes->aes_dec_fail, ++ aes->aes_enc_pkts, ++ aes->aes_dec_pkts, ++ aes->aes_enc_irq, ++ aes->aes_dec_irq); ++ ++ part_str = "event"; ++ ++ if (st == st_end) ++ goto fw_stats_end; ++ ++ evt = (fw_stats_event_t *)st; ++ partlen = sizeof(fw_stats_event_t); ++ st += partlen; ++ ++ if (st > st_end) ++ goto fw_stats_fail; ++ ++ p += sprintf(p, ++ "%s:\n" ++ " heartbeat %u, calibration %u\n" ++ " rx_mismatch %u, rx_mem_empty %u, rx_pool %u\n" ++ " oom_late %u\n" ++ " phy_tx_err %u, tx_stuck %u\n", ++ part_str, ++ evt->heartbeat, ++ evt->calibration, ++ evt->rx_mismatch, ++ evt->rx_mem_empty, ++ evt->rx_pool, ++ evt->oom_late, ++ evt->phy_tx_err, ++ evt->tx_stuck); ++ ++ if (st < st_end) ++ goto fw_stats_bigger; ++ ++ goto fw_stats_end; ++ ++fw_stats_fail: ++ st -= partlen; ++ p += sprintf(p, ++ "failed at %s part (size %u), offset %u (struct size %u), " ++ "please report\n", part_str, partlen, ++ (int)st - (int)fw_stats, len); ++ ++fw_stats_bigger: ++ for (; st < st_end; st += 4) ++ p += sprintf(p, ++ "UNKN%3d: %u\n", (int)st - (int)fw_stats, *(u32 *)st); ++ ++fw_stats_end: ++ kfree(fw_stats); ++ ++ FN_EXIT1(p - buf); ++ return p - buf; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_s_proc_phy_output(char *buf, acx_device_t *adev) ++{ ++ char *p = buf; ++ int i; ++ ++ FN_ENTER; ++ ++ /* ++ if (RADIO_RFMD_11 != adev->radio_type) { ++ printk("sorry, not yet adapted for radio types " ++ "other than RFMD, please verify " ++ "PHY size etc. first!\n"); ++ goto end; ++ } ++ */ ++ ++ /* The PHY area is only 0x80 bytes long; further pages after that ++ * only have some page number registers with altered value, ++ * all other registers remain the same. */ ++ for (i = 0; i < 0x80; i++) { ++ acx_s_read_phy_reg(adev, i, p++); ++ } ++ ++ FN_EXIT1(p - buf); ++ return p - buf; ++} ++ ++ ++/*********************************************************************** ++** acx_e_read_proc_XXXX ++** Handle our /proc entry ++** ++** Arguments: ++** standard kernel read_proc interface ++** Returns: ++** number of bytes written to buf ++** Side effects: ++** none ++*/ ++static int ++acx_e_read_proc(char *buf, char **start, off_t offset, int count, ++ int *eof, void *data) ++{ ++ acx_device_t *adev = (acx_device_t*)data; ++ unsigned long flags; ++ int length; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ acx_lock(adev, flags); ++ /* fill buf */ ++ length = acx_l_proc_output(buf, adev); ++ acx_unlock(adev, flags); ++ acx_sem_unlock(adev); ++ ++ /* housekeeping */ ++ if (length <= offset + count) ++ *eof = 1; ++ *start = buf + offset; ++ length -= offset; ++ if (length > count) ++ length = count; ++ if (length < 0) ++ length = 0; ++ FN_EXIT1(length); ++ return length; ++} ++ ++static char _buf[32768]; ++static int ++acx_e_read_proc_diag(char *buf, char **start, off_t offset, int count, ++ int *eof, void *data) ++{ ++ acx_device_t *adev = (acx_device_t*)data; ++ int length; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ /* fill buf */ ++ length = acx_s_proc_diag_output(_buf, adev); ++ acx_sem_unlock(adev); ++ ++ memcpy(buf, _buf + offset, count); ++ ++ /* housekeeping */ ++ if (length <= offset + count) ++ *eof = 1; ++ *start = count; ++ length -= offset; ++ if (length > count) ++ length = count; ++ if (length < 0) ++ length = 0; ++ FN_EXIT1(length); ++ return length; ++} ++ ++static int ++acx_e_read_proc_eeprom(char *buf, char **start, off_t offset, int count, ++ int *eof, void *data) ++{ ++ acx_device_t *adev = (acx_device_t*)data; ++ int length; ++ ++ FN_ENTER; ++ ++ /* fill buf */ ++ length = 0; ++#if defined (ACX_MEM) ++ acx_sem_lock(adev); ++ length = acxmem_proc_eeprom_output(buf, adev); ++ acx_sem_unlock(adev); ++#else ++ if (IS_PCI(adev)) { ++ acx_sem_lock(adev); ++ length = acxpci_proc_eeprom_output(buf, adev); ++ acx_sem_unlock(adev); ++ } ++#endif ++ ++ /* housekeeping */ ++ if (length <= offset + count) ++ *eof = 1; ++ *start = buf + offset; ++ length -= offset; ++ if (length > count) ++ length = count; ++ if (length < 0) ++ length = 0; ++ FN_EXIT1(length); ++ return length; ++} ++ ++static int ++acx_e_read_proc_phy(char *buf, char **start, off_t offset, int count, ++ int *eof, void *data) ++{ ++ acx_device_t *adev = (acx_device_t*)data; ++ int length; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ /* fill buf */ ++ length = acx_s_proc_phy_output(buf, adev); ++ acx_sem_unlock(adev); ++ ++ /* housekeeping */ ++ if (length <= offset + count) ++ *eof = 1; ++ *start = buf + offset; ++ length -= offset; ++ if (length > count) ++ length = count; ++ if (length < 0) ++ length = 0; ++ FN_EXIT1(length); ++ return length; ++} ++ ++ ++/*********************************************************************** ++** /proc files registration ++*/ ++static const char * const ++proc_files[] = { "", "_diag", "_eeprom", "_phy" }; ++ ++static read_proc_t * const ++proc_funcs[] = { ++ acx_e_read_proc, ++ acx_e_read_proc_diag, ++ acx_e_read_proc_eeprom, ++ acx_e_read_proc_phy ++}; ++ ++static int ++manage_proc_entries(const struct net_device *ndev, int remove) ++{ ++ acx_device_t *adev = ndev2adev((struct net_device *)ndev); ++ char procbuf[80]; ++ int i; ++ ++ for (i = 0; i < VEC_SIZE(proc_files); i++) { ++ snprintf(procbuf, sizeof(procbuf), ++ "driver/acx_%s%s", ndev->name, proc_files[i]); ++ log(L_INIT, "%sing /proc entry %s\n", ++ remove ? "remov" : "creat", procbuf); ++ if (!remove) { ++ if (!create_proc_read_entry(procbuf, 0, 0, proc_funcs[i], adev)) { ++ printk("acx: cannot register /proc entry %s\n", procbuf); ++ return NOT_OK; ++ } ++ } else { ++ remove_proc_entry(procbuf, NULL); ++ } ++ } ++ return OK; ++} ++ ++int ++acx_proc_register_entries(const struct net_device *ndev) ++{ ++ return manage_proc_entries(ndev, 0); ++} ++ ++int ++acx_proc_unregister_entries(const struct net_device *ndev) ++{ ++ return manage_proc_entries(ndev, 1); ++} ++#endif /* CONFIG_PROC_FS */ ++ ++ ++/*********************************************************************** ++** acx_cmd_join_bssid ++** ++** Common code for both acx100 and acx111. ++*/ ++/* NB: does NOT match RATE100_nn but matches ACX[111]_SCAN_RATE_n */ ++static const u8 ++bitpos2genframe_txrate[] = { ++ 10, /* 0. 1 Mbit/s */ ++ 20, /* 1. 2 Mbit/s */ ++ 55, /* 2. 5.5 Mbit/s */ ++ 0x0B, /* 3. 6 Mbit/s */ ++ 0x0F, /* 4. 9 Mbit/s */ ++ 110, /* 5. 11 Mbit/s */ ++ 0x0A, /* 6. 12 Mbit/s */ ++ 0x0E, /* 7. 18 Mbit/s */ ++ 220, /* 8. 22 Mbit/s */ ++ 0x09, /* 9. 24 Mbit/s */ ++ 0x0D, /* 10. 36 Mbit/s */ ++ 0x08, /* 11. 48 Mbit/s */ ++ 0x0C, /* 12. 54 Mbit/s */ ++ 10, /* 13. 1 Mbit/s, should never happen */ ++ 10, /* 14. 1 Mbit/s, should never happen */ ++ 10, /* 15. 1 Mbit/s, should never happen */ ++}; ++ ++/* Looks scary, eh? ++** Actually, each one compiled into one AND and one SHIFT, ++** 31 bytes in x86 asm (more if uints are replaced by u16/u8) */ ++static inline unsigned int ++rate111to5bits(unsigned int rate) ++{ ++ return (rate & 0x7) ++ | ( (rate & RATE111_11) / (RATE111_11/JOINBSS_RATES_11) ) ++ | ( (rate & RATE111_22) / (RATE111_22/JOINBSS_RATES_22) ) ++ ; ++} ++ ++static void ++acx_s_cmd_join_bssid(acx_device_t *adev, const u8 *bssid) ++{ ++ acx_joinbss_t tmp; ++ int dtim_interval; ++ int i; ++ ++ if (mac_is_zero(bssid)) ++ return; ++ ++ FN_ENTER; ++ ++ dtim_interval = (ACX_MODE_0_ADHOC == adev->mode) ? ++ 1 : adev->dtim_interval; ++ ++ memset(&tmp, 0, sizeof(tmp)); ++ ++ for (i = 0; i < ETH_ALEN; i++) { ++ tmp.bssid[i] = bssid[ETH_ALEN-1 - i]; ++ } ++ ++ tmp.beacon_interval = cpu_to_le16(adev->beacon_interval); ++ ++ /* Basic rate set. Control frame responses (such as ACK or CTS frames) ++ ** are sent with one of these rates */ ++ if (IS_ACX111(adev)) { ++ /* It was experimentally determined that rates_basic ++ ** can take 11g rates as well, not only rates ++ ** defined with JOINBSS_RATES_BASIC111_nnn. ++ ** Just use RATE111_nnn constants... */ ++ tmp.u.acx111.dtim_interval = dtim_interval; ++ tmp.u.acx111.rates_basic = cpu_to_le16(adev->rate_basic); ++ log(L_ASSOC, "rates_basic:%04X, rates_supported:%04X\n", ++ adev->rate_basic, adev->rate_oper); ++ } else { ++ tmp.u.acx100.dtim_interval = dtim_interval; ++ tmp.u.acx100.rates_basic = rate111to5bits(adev->rate_basic); ++ tmp.u.acx100.rates_supported = rate111to5bits(adev->rate_oper); ++ log(L_ASSOC, "rates_basic:%04X->%02X, " ++ "rates_supported:%04X->%02X\n", ++ adev->rate_basic, tmp.u.acx100.rates_basic, ++ adev->rate_oper, tmp.u.acx100.rates_supported); ++ } ++ ++ /* Setting up how Beacon, Probe Response, RTS, and PS-Poll frames ++ ** will be sent (rate/modulation/preamble) */ ++ tmp.u.txrate.genfrm_txrate = bitpos2genframe_txrate[lowest_bit(adev->rate_basic)]; ++ tmp.genfrm_mod_pre = 0; /* FIXME: was = adev->capab_short (which was always 0); */ ++ /* we can use short pre *if* all peers can understand it */ ++ /* FIXME #2: we need to correctly set PBCC/OFDM bits here too */ ++ ++ /* we switch fw to STA mode in MONITOR mode, it seems to be ++ ** the only mode where fw does not emit beacons by itself ++ ** but allows us to send anything (we really want to retain ++ ** ability to tx arbitrary frames in MONITOR mode) ++ */ ++ tmp.macmode = (adev->mode != ACX_MODE_MONITOR ? adev->mode : ACX_MODE_2_STA); ++ tmp.channel = adev->channel; ++ tmp.essid_len = adev->essid_len; ++ /* NOTE: the code memcpy'd essid_len + 1 before, which is WRONG! */ ++ memcpy(tmp.essid, adev->essid, tmp.essid_len); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_JOIN, &tmp, tmp.essid_len + 0x11); ++ ++ log(L_ASSOC|L_DEBUG, "BSS_Type = %u\n", tmp.macmode); ++ acxlog_mac(L_ASSOC|L_DEBUG, "JoinBSSID MAC:", adev->bssid, "\n"); ++ ++ acx_update_capabilities(adev); ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_s_cmd_start_scan ++** ++** Issue scan command to the hardware ++** ++** unified function for both ACX111 and ACX100 ++*/ ++static void ++acx_s_scan_chan(acx_device_t *adev) ++{ ++ union { ++ acx111_scan_t acx111; ++ acx100_scan_t acx100; ++ } s; ++ ++ FN_ENTER; ++ ++ memset(&s, 0, sizeof(s)); ++ ++ /* first common positions... */ ++ ++ s.acx111.count = cpu_to_le16(adev->scan_count); ++ s.acx111.rate = adev->scan_rate; ++ s.acx111.options = adev->scan_mode; ++ s.acx111.chan_duration = cpu_to_le16(adev->scan_duration); ++ s.acx111.max_probe_delay = cpu_to_le16(adev->scan_probe_delay); ++ ++ /* ...then differences */ ++ ++ if (IS_ACX111(adev)) { ++ s.acx111.channel_list_select = 0; /* scan every allowed channel */ ++ /*s.acx111.channel_list_select = 1;*/ /* scan given channels */ ++ /*s.acx111.modulation = 0x40;*/ /* long preamble? OFDM? -> only for active scan */ ++ s.acx111.modulation = 0; ++ /*s.acx111.channel_list[0] = 6; ++ s.acx111.channel_list[1] = 4;*/ ++ } else { ++ s.acx100.start_chan = cpu_to_le16(1); ++ s.acx100.flags = cpu_to_le16(0x8000); ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_SCAN, &s, sizeof(s)); ++ FN_EXIT0; ++} ++ ++ ++void ++acx_s_cmd_start_scan(acx_device_t *adev) ++{ ++ /* time_before check is 'just in case' thing */ ++ if (!(adev->irq_status & HOST_INT_SCAN_COMPLETE) ++ && time_before(jiffies, adev->scan_start + 10*HZ) ++ ) { ++ log(L_INIT, "start_scan: seems like previous scan " ++ "is still running. Not starting anew. Please report\n"); ++ return; ++ } ++ ++ log(L_INIT, "starting radio scan\n"); ++ /* remember that fw is commanded to do scan */ ++ adev->scan_start = jiffies; ++ CLEAR_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE); ++ /* issue it */ ++ acx_s_scan_chan(adev); ++} ++ ++ ++/*********************************************************************** ++** acx111 feature config ++*/ ++static int ++acx111_s_get_feature_config(acx_device_t *adev, ++ u32 *feature_options, u32 *data_flow_options) ++{ ++ struct acx111_ie_feature_config feat; ++ ++ if (!IS_ACX111(adev)) { ++ return NOT_OK; ++ } ++ ++ memset(&feat, 0, sizeof(feat)); ++ ++ if (OK != acx_s_interrogate(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) { ++ return NOT_OK; ++ } ++ log(L_DEBUG, ++ "got Feature option:0x%X, DataFlow option: 0x%X\n", ++ feat.feature_options, ++ feat.data_flow_options); ++ ++ if (feature_options) ++ *feature_options = le32_to_cpu(feat.feature_options); ++ if (data_flow_options) ++ *data_flow_options = le32_to_cpu(feat.data_flow_options); ++ ++ return OK; ++} ++ ++static int ++acx111_s_set_feature_config(acx_device_t *adev, ++ u32 feature_options, u32 data_flow_options, ++ unsigned int mode /* 0 == remove, 1 == add, 2 == set */) ++{ ++ struct acx111_ie_feature_config feat; ++ ++ if (!IS_ACX111(adev)) { ++ return NOT_OK; ++ } ++ ++ if ((mode < 0) || (mode > 2)) ++ return NOT_OK; ++ ++ if (mode != 2) ++ /* need to modify old data */ ++ acx111_s_get_feature_config(adev, &feat.feature_options, &feat.data_flow_options); ++ else { ++ /* need to set a completely new value */ ++ feat.feature_options = 0; ++ feat.data_flow_options = 0; ++ } ++ ++ if (mode == 0) { /* remove */ ++ CLEAR_BIT(feat.feature_options, cpu_to_le32(feature_options)); ++ CLEAR_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options)); ++ } else { /* add or set */ ++ SET_BIT(feat.feature_options, cpu_to_le32(feature_options)); ++ SET_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options)); ++ } ++ ++ log(L_DEBUG, ++ "old: feature 0x%08X dataflow 0x%08X. mode: %u\n" ++ "new: feature 0x%08X dataflow 0x%08X\n", ++ feature_options, data_flow_options, mode, ++ le32_to_cpu(feat.feature_options), ++ le32_to_cpu(feat.data_flow_options)); ++ ++ if (OK != acx_s_configure(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) { ++ return NOT_OK; ++ } ++ ++ return OK; ++} ++ ++static inline int ++acx111_s_feature_off(acx_device_t *adev, u32 f, u32 d) ++{ ++ return acx111_s_set_feature_config(adev, f, d, 0); ++} ++static inline int ++acx111_s_feature_on(acx_device_t *adev, u32 f, u32 d) ++{ ++ return acx111_s_set_feature_config(adev, f, d, 1); ++} ++static inline int ++acx111_s_feature_set(acx_device_t *adev, u32 f, u32 d) ++{ ++ return acx111_s_set_feature_config(adev, f, d, 2); ++} ++ ++ ++/*********************************************************************** ++** acx100_s_init_memory_pools ++*/ ++static int ++acx100_s_init_memory_pools(acx_device_t *adev, const acx_ie_memmap_t *mmt) ++{ ++ acx100_ie_memblocksize_t MemoryBlockSize; ++ acx100_ie_memconfigoption_t MemoryConfigOption; ++ int TotalMemoryBlocks; ++ int RxBlockNum; ++ int TotalRxBlockSize; ++ int TxBlockNum; ++ int TotalTxBlockSize; ++ ++ FN_ENTER; ++ ++ /* Let's see if we can follow this: ++ first we select our memory block size (which I think is ++ completely arbitrary) */ ++ MemoryBlockSize.size = cpu_to_le16(adev->memblocksize); ++ ++ /* Then we alert the card to our decision of block size */ ++ if (OK != acx_s_configure(adev, &MemoryBlockSize, ACX100_IE_BLOCK_SIZE)) { ++ goto bad; ++ } ++ ++ /* We figure out how many total blocks we can create, using ++ the block size we chose, and the beginning and ending ++ memory pointers, i.e.: end-start/size */ ++ TotalMemoryBlocks = (le32_to_cpu(mmt->PoolEnd) - le32_to_cpu(mmt->PoolStart)) / adev->memblocksize; ++ ++ log(L_DEBUG, "TotalMemoryBlocks=%u (%u bytes)\n", ++ TotalMemoryBlocks, TotalMemoryBlocks*adev->memblocksize); ++ ++ /* MemoryConfigOption.DMA_config bitmask: ++ access to ACX memory is to be done: ++ 0x00080000 using PCI conf space?! ++ 0x00040000 using IO instructions? ++ 0x00000000 using memory access instructions ++ 0x00020000 using local memory block linked list (else what?) ++ 0x00010000 using host indirect descriptors (else host must access ACX memory?) ++ */ ++#if defined (ACX_MEM) ++ /* ++ * ACX ignores DMA_config for generic slave mode. ++ */ ++ MemoryConfigOption.DMA_config = 0; ++ /* Declare start of the Rx host pool */ ++ MemoryConfigOption.pRxHostDesc = cpu2acx(0); ++ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n", ++ acx2cpu(MemoryConfigOption.pRxHostDesc), ++ (long)adev->rxhostdesc_startphy); ++#else ++ if (IS_PCI(adev)) { ++ MemoryConfigOption.DMA_config = cpu_to_le32(0x30000); ++ /* Declare start of the Rx host pool */ ++ MemoryConfigOption.pRxHostDesc = cpu2acx(adev->rxhostdesc_startphy); ++ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n", ++ acx2cpu(MemoryConfigOption.pRxHostDesc), ++ (long)adev->rxhostdesc_startphy); ++ } else { ++ MemoryConfigOption.DMA_config = cpu_to_le32(0x20000); ++ } ++#endif ++ ++ /* 50% of the allotment of memory blocks go to tx descriptors */ ++ TxBlockNum = TotalMemoryBlocks / 2; ++ MemoryConfigOption.TxBlockNum = cpu_to_le16(TxBlockNum); ++ ++ /* and 50% go to the rx descriptors */ ++ RxBlockNum = TotalMemoryBlocks - TxBlockNum; ++ MemoryConfigOption.RxBlockNum = cpu_to_le16(RxBlockNum); ++ ++ /* size of the tx and rx descriptor queues */ ++ TotalTxBlockSize = TxBlockNum * adev->memblocksize; ++ TotalRxBlockSize = RxBlockNum * adev->memblocksize; ++ log(L_DEBUG, "TxBlockNum %u RxBlockNum %u TotalTxBlockSize %u " ++ "TotalTxBlockSize %u\n", TxBlockNum, RxBlockNum, ++ TotalTxBlockSize, TotalRxBlockSize); ++ ++ ++ /* align the tx descriptor queue to an alignment of 0x20 (32 bytes) */ ++ MemoryConfigOption.rx_mem = ++ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + 0x1f) & ~0x1f); ++ ++ /* align the rx descriptor queue to units of 0x20 ++ * and offset it by the tx descriptor queue */ ++ MemoryConfigOption.tx_mem = ++ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + TotalRxBlockSize + 0x1f) & ~0x1f); ++ log(L_DEBUG, "rx_mem %08X rx_mem %08X\n", ++ MemoryConfigOption.tx_mem, MemoryConfigOption.rx_mem); ++ ++ /* alert the device to our decision */ ++ if (OK != acx_s_configure(adev, &MemoryConfigOption, ACX1xx_IE_MEMORY_CONFIG_OPTIONS)) { ++ goto bad; ++ } ++ ++ /* and tell the device to kick it into gear */ ++ if (OK != acx_s_issue_cmd(adev, ACX100_CMD_INIT_MEMORY, NULL, 0)) { ++ goto bad; ++ } ++#ifdef ACX_MEM ++ /* ++ * slave memory interface has to manage the transmit pools for the ACX, ++ * so it needs to know what we chose here. ++ */ ++ adev->acx_txbuf_start = MemoryConfigOption.tx_mem; ++ adev->acx_txbuf_numblocks = MemoryConfigOption.TxBlockNum; ++#endif ++ ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acx100_s_create_dma_regions ++** ++** Note that this fn messes up heavily with hardware, but we cannot ++** lock it (we need to sleep). Not a problem since IRQs can't happen ++*/ ++static int ++acx100_s_create_dma_regions(acx_device_t *adev) ++{ ++ acx100_ie_queueconfig_t queueconf; ++ acx_ie_memmap_t memmap; ++ int res = NOT_OK; ++ u32 tx_queue_start, rx_queue_start; ++ ++ FN_ENTER; ++ ++ /* read out the acx100 physical start address for the queues */ ++ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) { ++ goto fail; ++ } ++ ++ tx_queue_start = le32_to_cpu(memmap.QueueStart); ++ rx_queue_start = tx_queue_start + TX_CNT * sizeof(txdesc_t); ++ ++ log(L_DEBUG, "initializing Queue Indicator\n"); ++ ++ memset(&queueconf, 0, sizeof(queueconf)); ++ ++ /* Not needed for PCI or slave memory, so we can avoid setting them altogether */ ++ if (IS_USB(adev)) { ++ queueconf.NumTxDesc = USB_TX_CNT; ++ queueconf.NumRxDesc = USB_RX_CNT; ++ } ++ ++ /* calculate size of queues */ ++ queueconf.AreaSize = cpu_to_le32( ++ TX_CNT * sizeof(txdesc_t) + ++ RX_CNT * sizeof(rxdesc_t) + 8 ++ ); ++ queueconf.NumTxQueues = 1; /* number of tx queues */ ++ /* sets the beginning of the tx descriptor queue */ ++ queueconf.TxQueueStart = memmap.QueueStart; ++ /* done by memset: queueconf.TxQueuePri = 0; */ ++ queueconf.RxQueueStart = cpu_to_le32(rx_queue_start); ++ queueconf.QueueOptions = 1; /* auto reset descriptor */ ++ /* sets the end of the rx descriptor queue */ ++ queueconf.QueueEnd = cpu_to_le32( ++ rx_queue_start + RX_CNT * sizeof(rxdesc_t) ++ ); ++ /* sets the beginning of the next queue */ ++ queueconf.HostQueueEnd = cpu_to_le32(le32_to_cpu(queueconf.QueueEnd) + 8); ++ if (OK != acx_s_configure(adev, &queueconf, ACX1xx_IE_QUEUE_CONFIG)) { ++ goto fail; ++ } ++ ++#if defined (ACX_MEM) ++ /* sets the beginning of the rx descriptor queue, after the tx descrs */ ++ adev->acx_queue_indicator = ++ (queueindicator_t *) le32_to_cpu (queueconf.QueueEnd); ++ if (OK != acxmem_s_create_hostdesc_queues(adev)) ++ goto fail; ++ ++ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start); ++#else ++ if (IS_PCI(adev)) { ++ /* sets the beginning of the rx descriptor queue, after the tx descrs */ ++ if (OK != acxpci_s_create_hostdesc_queues(adev)) ++ goto fail; ++ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start); ++ } ++#endif ++ ++ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) { ++ goto fail; ++ } ++ ++ /* ++ * Have to make sure we skip past the Queue Indicator (QueueEnd) and Host Queue Indicator ++ * maps, each of which are 8 bytes and follow immediately after the transmit and ++ * receive queues. ++ */ ++ memmap.PoolStart = cpu_to_le32( ++ (le32_to_cpu(memmap.QueueEnd) + 4 + 0x1f) & ~0x1f ++ ); ++ ++ if (OK != acx_s_configure(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) { ++ goto fail; ++ } ++ ++ if (OK != acx100_s_init_memory_pools(adev, &memmap)) { ++ goto fail; ++ } ++ ++ res = OK; ++ goto end; ++ ++fail: ++ acx_s_msleep(1000); /* ? */ ++#if defined (ACX_MEM) ++ acxmem_free_desc_queues(adev); ++#else ++ if (IS_PCI(adev)) ++ acxpci_free_desc_queues(adev); ++#endif ++end: ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acx111_s_create_dma_regions ++** ++** Note that this fn messes heavily with hardware, but we cannot ++** lock it (we need to sleep). Not a problem since IRQs can't happen ++*/ ++#define ACX111_PERCENT(percent) ((percent)/5) ++ ++static int ++acx111_s_create_dma_regions(acx_device_t *adev) ++{ ++ struct acx111_ie_memoryconfig memconf; ++ struct acx111_ie_queueconfig queueconf; ++ u32 tx_queue_start, rx_queue_start; ++ ++ FN_ENTER; ++ ++ /* Calculate memory positions and queue sizes */ ++ ++ /* Set up our host descriptor pool + data pool */ ++#if defined (ACX_MEM) ++ if (OK != acxmem_s_create_hostdesc_queues(adev)) ++ goto fail; ++#else ++ if (IS_PCI(adev)) { ++ if (OK != acxpci_s_create_hostdesc_queues(adev)) ++ goto fail; ++ } ++#endif ++ ++ memset(&memconf, 0, sizeof(memconf)); ++ /* the number of STAs (STA contexts) to support ++ ** NB: was set to 1 and everything seemed to work nevertheless... */ ++ memconf.no_of_stations = cpu_to_le16(VEC_SIZE(adev->sta_list)); ++ /* specify the memory block size. Default is 256 */ ++ memconf.memory_block_size = cpu_to_le16(adev->memblocksize); ++ /* let's use 50%/50% for tx/rx (specify percentage, units of 5%) */ ++ memconf.tx_rx_memory_block_allocation = ACX111_PERCENT(50); ++ /* set the count of our queues ++ ** NB: struct acx111_ie_memoryconfig shall be modified ++ ** if we ever will switch to more than one rx and/or tx queue */ ++ memconf.count_rx_queues = 1; ++ memconf.count_tx_queues = 1; ++ /* 0 == Busmaster Indirect Memory Organization, which is what we want ++ * (using linked host descs with their allocated mem). ++ * 2 == Generic Bus Slave */ ++ /* done by memset: memconf.options = 0; */ ++ /* let's use 25% for fragmentations and 75% for frame transfers ++ * (specified in units of 5%) */ ++ memconf.fragmentation = ACX111_PERCENT(75); ++ /* Rx descriptor queue config */ ++ memconf.rx_queue1_count_descs = RX_CNT; ++ memconf.rx_queue1_type = 7; /* must be set to 7 */ ++ /* done by memset: memconf.rx_queue1_prio = 0; low prio */ ++#if defined (ACX_MEM) ++ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy); ++#else ++ if (IS_PCI(adev)) { ++ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy); ++ } ++#endif ++ /* Tx descriptor queue config */ ++ memconf.tx_queue1_count_descs = TX_CNT; ++ /* done by memset: memconf.tx_queue1_attributes = 0; lowest priority */ ++ ++ /* NB1: this looks wrong: (memconf,ACX1xx_IE_QUEUE_CONFIG), ++ ** (queueconf,ACX1xx_IE_MEMORY_CONFIG_OPTIONS) look swapped, eh? ++ ** But it is actually correct wrt IE numbers. ++ ** NB2: sizeof(memconf) == 28 == 0x1c but configure(ACX1xx_IE_QUEUE_CONFIG) ++ ** writes 0x20 bytes (because same IE for acx100 uses struct acx100_ie_queueconfig ++ ** which is 4 bytes larger. what a mess. TODO: clean it up) */ ++ if (OK != acx_s_configure(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG)) { ++ goto fail; ++ } ++ ++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS); ++ ++ tx_queue_start = le32_to_cpu(queueconf.tx1_queue_address); ++ rx_queue_start = le32_to_cpu(queueconf.rx1_queue_address); ++ ++ log(L_INIT, "dump queue head (from card):\n" ++ "len: %u\n" ++ "tx_memory_block_address: %X\n" ++ "rx_memory_block_address: %X\n" ++ "tx1_queue address: %X\n" ++ "rx1_queue address: %X\n", ++ le16_to_cpu(queueconf.len), ++ le32_to_cpu(queueconf.tx_memory_block_address), ++ le32_to_cpu(queueconf.rx_memory_block_address), ++ tx_queue_start, ++ rx_queue_start); ++ ++#if defined (ACX_MEM) ++ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start); ++#else ++ if (IS_PCI(adev)) ++ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start); ++#endif ++ ++ FN_EXIT1(OK); ++ return OK; ++fail: ++#if defined (ACX_MEM) ++ acxmem_free_desc_queues(adev); ++#else ++ if (IS_PCI(adev)) ++ acxpci_free_desc_queues(adev); ++#endif ++ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++static void ++acx_s_initialize_rx_config(acx_device_t *adev) ++{ ++ struct { ++ u16 id; ++ u16 len; ++ u16 rx_cfg1; ++ u16 rx_cfg2; ++ } ACX_PACKED cfg; ++ ++ switch (adev->mode) { ++ case ACX_MODE_OFF: ++ adev->rx_config_1 = (u16) (0 ++ /* | RX_CFG1_INCLUDE_RXBUF_HDR */ ++ /* | RX_CFG1_FILTER_SSID */ ++ /* | RX_CFG1_FILTER_BCAST */ ++ /* | RX_CFG1_RCV_MC_ADDR1 */ ++ /* | RX_CFG1_RCV_MC_ADDR0 */ ++ /* | RX_CFG1_FILTER_ALL_MULTI */ ++ /* | RX_CFG1_FILTER_BSSID */ ++ /* | RX_CFG1_FILTER_MAC */ ++ /* | RX_CFG1_RCV_PROMISCUOUS */ ++ /* | RX_CFG1_INCLUDE_FCS */ ++ /* | RX_CFG1_INCLUDE_PHY_HDR */ ++ ); ++ adev->rx_config_2 = (u16) (0 ++ /*| RX_CFG2_RCV_ASSOC_REQ */ ++ /*| RX_CFG2_RCV_AUTH_FRAMES */ ++ /*| RX_CFG2_RCV_BEACON_FRAMES */ ++ /*| RX_CFG2_RCV_CONTENTION_FREE */ ++ /*| RX_CFG2_RCV_CTRL_FRAMES */ ++ /*| RX_CFG2_RCV_DATA_FRAMES */ ++ /*| RX_CFG2_RCV_BROKEN_FRAMES */ ++ /*| RX_CFG2_RCV_MGMT_FRAMES */ ++ /*| RX_CFG2_RCV_PROBE_REQ */ ++ /*| RX_CFG2_RCV_PROBE_RESP */ ++ /*| RX_CFG2_RCV_ACK_FRAMES */ ++ /*| RX_CFG2_RCV_OTHER */ ++ ); ++ break; ++ case ACX_MODE_MONITOR: ++ adev->rx_config_1 = (u16) (0 ++ /* | RX_CFG1_INCLUDE_RXBUF_HDR */ ++ /* | RX_CFG1_FILTER_SSID */ ++ /* | RX_CFG1_FILTER_BCAST */ ++ /* | RX_CFG1_RCV_MC_ADDR1 */ ++ /* | RX_CFG1_RCV_MC_ADDR0 */ ++ /* | RX_CFG1_FILTER_ALL_MULTI */ ++ /* | RX_CFG1_FILTER_BSSID */ ++ /* | RX_CFG1_FILTER_MAC */ ++ | RX_CFG1_RCV_PROMISCUOUS ++ /* | RX_CFG1_INCLUDE_FCS */ ++ /* | RX_CFG1_INCLUDE_PHY_HDR */ ++ ); ++ adev->rx_config_2 = (u16) (0 ++ | RX_CFG2_RCV_ASSOC_REQ ++ | RX_CFG2_RCV_AUTH_FRAMES ++ | RX_CFG2_RCV_BEACON_FRAMES ++ | RX_CFG2_RCV_CONTENTION_FREE ++ | RX_CFG2_RCV_CTRL_FRAMES ++ | RX_CFG2_RCV_DATA_FRAMES ++ | RX_CFG2_RCV_BROKEN_FRAMES ++ | RX_CFG2_RCV_MGMT_FRAMES ++ | RX_CFG2_RCV_PROBE_REQ ++ | RX_CFG2_RCV_PROBE_RESP ++ | RX_CFG2_RCV_ACK_FRAMES ++ | RX_CFG2_RCV_OTHER ++ ); ++ break; ++ default: ++ adev->rx_config_1 = (u16) (0 ++ /* | RX_CFG1_INCLUDE_RXBUF_HDR */ ++ /* | RX_CFG1_FILTER_SSID */ ++ /* | RX_CFG1_FILTER_BCAST */ ++ /* | RX_CFG1_RCV_MC_ADDR1 */ ++ /* | RX_CFG1_RCV_MC_ADDR0 */ ++ /* | RX_CFG1_FILTER_ALL_MULTI */ ++ /* | RX_CFG1_FILTER_BSSID */ ++ | RX_CFG1_FILTER_MAC ++ /* | RX_CFG1_RCV_PROMISCUOUS */ ++ /* | RX_CFG1_INCLUDE_FCS */ ++ /* | RX_CFG1_INCLUDE_PHY_HDR */ ++ ); ++ adev->rx_config_2 = (u16) (0 ++ | RX_CFG2_RCV_ASSOC_REQ ++ | RX_CFG2_RCV_AUTH_FRAMES ++ | RX_CFG2_RCV_BEACON_FRAMES ++ | RX_CFG2_RCV_CONTENTION_FREE ++ | RX_CFG2_RCV_CTRL_FRAMES ++ | RX_CFG2_RCV_DATA_FRAMES ++ /*| RX_CFG2_RCV_BROKEN_FRAMES */ ++ | RX_CFG2_RCV_MGMT_FRAMES ++ | RX_CFG2_RCV_PROBE_REQ ++ | RX_CFG2_RCV_PROBE_RESP ++ /*| RX_CFG2_RCV_ACK_FRAMES */ ++ | RX_CFG2_RCV_OTHER ++ ); ++ break; ++ } ++ adev->rx_config_1 |= RX_CFG1_INCLUDE_RXBUF_HDR; ++ ++ if ((adev->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR) ++ || (adev->firmware_numver >= 0x02000000)) ++ adev->phy_header_len = IS_ACX111(adev) ? 8 : 4; ++ else ++ adev->phy_header_len = 0; ++ ++ log(L_INIT, "setting RXconfig to %04X:%04X\n", ++ adev->rx_config_1, adev->rx_config_2); ++ cfg.rx_cfg1 = cpu_to_le16(adev->rx_config_1); ++ cfg.rx_cfg2 = cpu_to_le16(adev->rx_config_2); ++ acx_s_configure(adev, &cfg, ACX1xx_IE_RXCONFIG); ++} ++ ++ ++/*********************************************************************** ++** acx_s_set_defaults ++*/ ++void ++acx_s_set_defaults(acx_device_t *adev) ++{ ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ /* do it before getting settings, prevent bogus channel 0 warning */ ++ adev->channel = 1; ++ ++ /* query some settings from the card. ++ * NOTE: for some settings, e.g. CCA and ED (ACX100!), an initial ++ * query is REQUIRED, otherwise the card won't work correctly! */ ++ adev->get_mask = GETSET_ANTENNA|GETSET_SENSITIVITY|GETSET_STATION_ID|GETSET_REG_DOMAIN; ++ /* Only ACX100 supports ED and CCA */ ++ if (IS_ACX100(adev)) ++ adev->get_mask |= GETSET_CCA|GETSET_ED_THRESH; ++ ++ acx_s_update_card_settings(adev); ++ ++ acx_lock(adev, flags); ++ ++ /* set our global interrupt mask */ ++#if defined (ACX_MEM) ++ acxmem_set_interrupt_mask(adev); ++#else ++ if (IS_PCI(adev)) ++ acxpci_set_interrupt_mask(adev); ++#endif ++ ++ adev->led_power = 1; /* LED is active on startup */ ++ adev->brange_max_quality = 60; /* LED blink max quality is 60 */ ++ adev->brange_time_last_state_change = jiffies; ++ ++ /* copy the MAC address we just got from the card ++ * into our MAC address used during current 802.11 session */ ++ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr); ++ MAC_BCAST(adev->ap); ++ ++ adev->essid_len = ++ snprintf(adev->essid, sizeof(adev->essid), "STA%02X%02X%02X", ++ adev->dev_addr[3], adev->dev_addr[4], adev->dev_addr[5]); ++ adev->essid_active = 1; ++ ++ /* we have a nick field to waste, so why not abuse it ++ * to announce the driver version? ;-) */ ++ strncpy(adev->nick, "acx " ACX_RELEASE, IW_ESSID_MAX_SIZE); ++ ++#if defined (ACX_MEM) ++ adev->reg_dom_id = adev->cfgopt_domains.list[0]; ++#else ++ if (IS_PCI(adev)) { /* FIXME: this should be made to apply to USB, too! */ ++ /* first regulatory domain entry in EEPROM == default reg. domain */ ++ adev->reg_dom_id = adev->cfgopt_domains.list[0]; ++ } ++#endif ++ ++ /* 0xffff would be better, but then we won't get a "scan complete" ++ * interrupt, so our current infrastructure will fail: */ ++ adev->scan_count = 1; ++ adev->scan_mode = ACX_SCAN_OPT_ACTIVE; ++ adev->scan_duration = 100; ++ adev->scan_probe_delay = 200; ++ /* reported to break scanning: adev->scan_probe_delay = adev->cfgopt_probe_delay; */ ++ adev->scan_rate = ACX_SCAN_RATE_1; ++ ++ adev->mode = ACX_MODE_2_STA; ++ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM; ++ adev->listen_interval = 100; ++ adev->beacon_interval = DEFAULT_BEACON_INTERVAL; ++ adev->dtim_interval = DEFAULT_DTIM_INTERVAL; ++ ++ adev->msdu_lifetime = DEFAULT_MSDU_LIFETIME; ++ ++ adev->rts_threshold = DEFAULT_RTS_THRESHOLD; ++ adev->frag_threshold = 2346; ++ ++ /* use standard default values for retry limits */ ++ adev->short_retry = 7; /* max. retries for (short) non-RTS packets */ ++ adev->long_retry = 4; /* max. retries for long (RTS) packets */ ++ ++ adev->preamble_mode = 2; /* auto */ ++ adev->fallback_threshold = 3; ++ adev->stepup_threshold = 10; ++ adev->rate_bcast = RATE111_1; ++ adev->rate_bcast100 = RATE100_1; ++ adev->rate_basic = RATE111_1 | RATE111_2; ++ adev->rate_auto = 1; ++ if (IS_ACX111(adev)) { ++ adev->rate_oper = RATE111_ALL; ++ } else { ++ adev->rate_oper = RATE111_ACX100_COMPAT; ++ } ++ ++ /* Supported Rates element - the rates here are given in units of ++ * 500 kbit/s, plus 0x80 added. See 802.11-1999.pdf item 7.3.2.2 */ ++ acx_l_update_ratevector(adev); ++ ++ /* set some more defaults */ ++ if (IS_ACX111(adev)) { ++ /* 30mW (15dBm) is default, at least in my acx111 card: */ ++ adev->tx_level_dbm = 15; ++ } else { ++ /* don't use max. level, since it might be dangerous ++ * (e.g. WRT54G people experience ++ * excessive Tx power damage!) */ ++ adev->tx_level_dbm = 18; ++ /* ++ * Lower power for the iPaq hx4700 ++ */ ++ if (IS_MEM(adev)) { ++ adev->tx_level_dbm = 14; ++ } ++ } ++ /* adev->tx_level_auto = 1; */ ++ if (IS_ACX111(adev)) { ++ /* start with sensitivity level 1 out of 3: */ ++ adev->sensitivity = 1; ++ } ++ ++/* #define ENABLE_POWER_SAVE */ ++#ifdef ENABLE_POWER_SAVE ++ adev->ps_wakeup_cfg = PS_CFG_ENABLE | PS_CFG_WAKEUP_ALL_BEAC; ++ adev->ps_listen_interval = 1; ++ adev->ps_options = PS_OPT_ENA_ENHANCED_PS | PS_OPT_TX_PSPOLL | PS_OPT_STILL_RCV_BCASTS; ++ adev->ps_hangover_period = 30; ++ adev->ps_enhanced_transition_time = 0; ++#else ++ adev->ps_wakeup_cfg = 0; ++ adev->ps_listen_interval = 0; ++ adev->ps_options = 0; ++ adev->ps_hangover_period = 0; ++ adev->ps_enhanced_transition_time = 0; ++#endif ++ ++ /* These settings will be set in fw on ifup */ ++ adev->set_mask = 0 ++ | GETSET_RETRY ++ | SET_MSDU_LIFETIME ++ /* configure card to do rate fallback when in auto rate mode */ ++ | SET_RATE_FALLBACK ++ | SET_RXCONFIG ++ | GETSET_TXPOWER ++ /* better re-init the antenna value we got above */ ++ | GETSET_ANTENNA ++#if POWER_SAVE_80211 ++ | GETSET_POWER_80211 ++#endif ++ ; ++ ++ acx_unlock(adev, flags); ++ acx_lock_unhold(); /* hold time 844814 CPU ticks @2GHz */ ++ ++ acx_s_initialize_rx_config(adev); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** FIXME: this should be solved in a general way for all radio types ++** by decoding the radio firmware module, ++** since it probably has some standard structure describing how to ++** set the power level of the radio module which it controls. ++** Or maybe not, since the radio module probably has a function interface ++** instead which then manages Tx level programming :-\ ++*/ ++static int ++acx111_s_set_tx_level(acx_device_t *adev, u8 level_dbm) ++{ ++ struct acx111_ie_tx_level tx_level; ++ ++ /* my acx111 card has two power levels in its configoptions (== EEPROM): ++ * 1 (30mW) [15dBm] ++ * 2 (10mW) [10dBm] ++ * For now, just assume all other acx111 cards have the same. ++ * FIXME: Ideally we would query it here, but we first need a ++ * standard way to query individual configoptions easily. ++ * Well, now we have proper cfgopt txpower variables, but this still ++ * hasn't been done yet, since it also requires dBm <-> mW conversion here... */ ++ if (level_dbm <= 12) { ++ tx_level.level = 2; /* 10 dBm */ ++ adev->tx_level_dbm = 10; ++ } else { ++ tx_level.level = 1; /* 15 dBm */ ++ adev->tx_level_dbm = 15; ++ } ++ if (level_dbm != adev->tx_level_dbm) ++ log(L_INIT, "acx111 firmware has specific " ++ "power levels only: adjusted %d dBm to %d dBm!\n", ++ level_dbm, adev->tx_level_dbm); ++ ++ return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL); ++} ++ ++static int ++acx_s_set_tx_level(acx_device_t *adev, u8 level_dbm) ++{ ++ if (IS_ACX111(adev)) { ++ return acx111_s_set_tx_level(adev, level_dbm); ++ } ++#if defined (ACX_MEM) ++ return acx100mem_s_set_tx_level(adev, level_dbm); ++#else ++ if (IS_PCI(adev)) { ++ return acx100pci_s_set_tx_level(adev, level_dbm); ++ } ++#endif ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++#ifdef UNUSED ++/* Returns the current tx level (ACX111) */ ++static u8 ++acx111_s_get_tx_level(acx_device_t *adev) ++{ ++ struct acx111_ie_tx_level tx_level; ++ ++ tx_level.level = 0; ++ acx_s_interrogate(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL); ++ return tx_level.level; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_l_rxmonitor ++** Called from IRQ context only ++*/ ++static void ++acx_l_rxmonitor(acx_device_t *adev, const rxbuffer_t *rxbuf) ++{ ++ wlansniffrm_t *msg; ++ struct sk_buff *skb; ++ void *datap; ++ unsigned int skb_len; ++ int payload_offset; ++ ++ FN_ENTER; ++ ++ /* we are in big luck: the acx100 doesn't modify any of the fields */ ++ /* in the 802.11 frame. just pass this packet into the PF_PACKET */ ++ /* subsystem. yeah. */ ++ payload_offset = ((u8*)acx_get_wlan_hdr(adev, rxbuf) - (u8*)rxbuf); ++ skb_len = RXBUF_BYTES_USED(rxbuf) - payload_offset; ++ ++ /* sanity check */ ++ if (unlikely(skb_len > WLAN_A4FR_MAXLEN_WEP)) { ++ printk("%s: monitor mode panic: oversized frame!\n", ++ adev->ndev->name); ++ goto end; ++ } ++ ++ if (adev->ndev->type == ARPHRD_IEEE80211_PRISM) ++ skb_len += sizeof(*msg); ++ ++ /* allocate skb */ ++ skb = dev_alloc_skb(skb_len); ++ if (unlikely(!skb)) { ++ printk("%s: no memory for skb (%u bytes)\n", ++ adev->ndev->name, skb_len); ++ goto end; ++ } ++ ++ skb_put(skb, skb_len); ++ ++ if (adev->ndev->type == ARPHRD_IEEE80211) { ++ /* when in raw 802.11 mode, just copy frame as-is */ ++ datap = skb->data; ++ } else if (adev->ndev->type == ARPHRD_IEEE80211_PRISM) { ++ /* emulate prism header */ ++ msg = (wlansniffrm_t*)skb->data; ++ datap = msg + 1; ++ ++ msg->msgcode = WLANSNIFFFRM; ++ msg->msglen = sizeof(*msg); ++ strncpy(msg->devname, adev->ndev->name, sizeof(msg->devname)-1); ++ msg->devname[sizeof(msg->devname)-1] = '\0'; ++ ++ msg->hosttime.did = WLANSNIFFFRM_hosttime; ++ msg->hosttime.status = WLANITEM_STATUS_data_ok; ++ msg->hosttime.len = 4; ++ msg->hosttime.data = jiffies; ++ ++ msg->mactime.did = WLANSNIFFFRM_mactime; ++ msg->mactime.status = WLANITEM_STATUS_data_ok; ++ msg->mactime.len = 4; ++ msg->mactime.data = rxbuf->time; ++ ++ msg->channel.did = WLANSNIFFFRM_channel; ++ msg->channel.status = WLANITEM_STATUS_data_ok; ++ msg->channel.len = 4; ++ msg->channel.data = adev->channel; ++ ++ msg->rssi.did = WLANSNIFFFRM_rssi; ++ msg->rssi.status = WLANITEM_STATUS_no_value; ++ msg->rssi.len = 4; ++ msg->rssi.data = 0; ++ ++ msg->sq.did = WLANSNIFFFRM_sq; ++ msg->sq.status = WLANITEM_STATUS_no_value; ++ msg->sq.len = 4; ++ msg->sq.data = 0; ++ ++ msg->signal.did = WLANSNIFFFRM_signal; ++ msg->signal.status = WLANITEM_STATUS_data_ok; ++ msg->signal.len = 4; ++ msg->signal.data = rxbuf->phy_snr; ++ ++ msg->noise.did = WLANSNIFFFRM_noise; ++ msg->noise.status = WLANITEM_STATUS_data_ok; ++ msg->noise.len = 4; ++ msg->noise.data = rxbuf->phy_level; ++ ++ msg->rate.did = WLANSNIFFFRM_rate; ++ msg->rate.status = WLANITEM_STATUS_data_ok; ++ msg->rate.len = 4; ++ msg->rate.data = rxbuf->phy_plcp_signal / 5; ++ ++ msg->istx.did = WLANSNIFFFRM_istx; ++ msg->istx.status = WLANITEM_STATUS_data_ok; ++ msg->istx.len = 4; ++ msg->istx.data = 0; /* tx=0: it's not a tx packet */ ++ ++ skb_len -= sizeof(*msg); ++ ++ msg->frmlen.did = WLANSNIFFFRM_signal; ++ msg->frmlen.status = WLANITEM_STATUS_data_ok; ++ msg->frmlen.len = 4; ++ msg->frmlen.data = skb_len; ++ } else { ++ printk("acx: unsupported netdev type %d!\n", adev->ndev->type); ++ dev_kfree_skb(skb); ++ return; ++ } ++ ++ /* sanity check (keep it here) */ ++ if (unlikely((int)skb_len < 0)) { ++ printk("acx: skb_len=%d. Driver bug, please report\n", (int)skb_len); ++ dev_kfree_skb(skb); ++ return; ++ } ++ memcpy(datap, ((unsigned char*)rxbuf)+payload_offset, skb_len); ++ ++ skb->dev = adev->ndev; ++ skb->dev->last_rx = jiffies; ++ ++ skb_reset_mac_header(skb); ++ skb->ip_summed = CHECKSUM_NONE; ++ skb->pkt_type = PACKET_OTHERHOST; ++ skb->protocol = htons(ETH_P_80211_RAW); ++ netif_rx(skb); ++ ++ adev->stats.rx_packets++; ++ adev->stats.rx_bytes += skb->len; ++ ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_rx_ieee802_11_frame ++** ++** Called from IRQ context only ++*/ ++ ++/* All these contortions are for saner dup logging ++** ++** We want: (a) to know about excessive dups ++** (b) to not spam kernel log about occasional dups ++** ++** 1/64 threshold was chosen by running "ping -A" ++** It gave "rx: 59 DUPs in 2878 packets" only with 4 parallel ++** "ping -A" streams running. */ ++/* 2005-10-11: bumped up to 1/8 ++** subtract a $smallint from dup_count in order to ++** avoid "2 DUPs in 19 packets" messages */ ++static inline int ++acx_l_handle_dup(acx_device_t *adev, u16 seq) ++{ ++ if (adev->dup_count) { ++ adev->nondup_count++; ++ if (time_after(jiffies, adev->dup_msg_expiry)) { ++ /* Log only if more than 1 dup in 64 packets */ ++ if (adev->nondup_count/8 < adev->dup_count-5) { ++ printk(KERN_INFO "%s: rx: %d DUPs in " ++ "%d packets received in 10 secs\n", ++ adev->ndev->name, ++ adev->dup_count, ++ adev->nondup_count); ++ } ++ adev->dup_count = 0; ++ adev->nondup_count = 0; ++ } ++ } ++ if (unlikely(seq == adev->last_seq_ctrl)) { ++ if (!adev->dup_count++) ++ adev->dup_msg_expiry = jiffies + 10*HZ; ++ adev->stats.rx_errors++; ++ return 1; /* a dup */ ++ } ++ adev->last_seq_ctrl = seq; ++ return 0; ++} ++ ++static int ++acx_l_rx_ieee802_11_frame(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ unsigned int ftype, fstype; ++ const wlan_hdr_t *hdr; ++ int result = NOT_OK; ++ ++ FN_ENTER; ++ ++ hdr = acx_get_wlan_hdr(adev, rxbuf); ++ ++ /* see IEEE 802.11-1999.pdf chapter 7 "MAC frame formats" */ ++ if (unlikely((hdr->fc & WF_FC_PVERi) != 0)) { ++ printk_ratelimited(KERN_INFO "rx: unsupported 802.11 protocol\n"); ++ goto end; ++ } ++ ++ ftype = hdr->fc & WF_FC_FTYPEi; ++ fstype = hdr->fc & WF_FC_FSTYPEi; ++ ++ switch (ftype) { ++ /* check data frames first, for speed */ ++ case WF_FTYPE_DATAi: ++ switch (fstype) { ++ case WF_FSTYPE_DATAONLYi: ++ if (acx_l_handle_dup(adev, hdr->seq)) ++ break; /* a dup, simply discard it */ ++ ++ /* TODO: ++ if (WF_FC_FROMTODSi == (hdr->fc & WF_FC_FROMTODSi)) { ++ result = acx_l_process_data_frame_wds(adev, rxbuf); ++ break; ++ } ++ */ ++ ++ switch (adev->mode) { ++ case ACX_MODE_3_AP: ++ result = acx_l_process_data_frame_master(adev, rxbuf); ++ break; ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ result = acx_l_process_data_frame_client(adev, rxbuf); ++ break; ++ } ++ case WF_FSTYPE_DATA_CFACKi: ++ case WF_FSTYPE_DATA_CFPOLLi: ++ case WF_FSTYPE_DATA_CFACK_CFPOLLi: ++ case WF_FSTYPE_CFPOLLi: ++ case WF_FSTYPE_CFACK_CFPOLLi: ++ /* see above. ++ acx_process_class_frame(adev, rxbuf, 3); */ ++ break; ++ case WF_FSTYPE_NULLi: ++ /* acx_l_process_NULL_frame(adev, rxbuf, 3); */ ++ break; ++ /* FIXME: same here, see above */ ++ case WF_FSTYPE_CFACKi: ++ default: ++ break; ++ } ++ break; ++ case WF_FTYPE_MGMTi: ++ result = acx_l_process_mgmt_frame(adev, rxbuf); ++ break; ++ case WF_FTYPE_CTLi: ++ if (fstype == WF_FSTYPE_PSPOLLi) ++ result = OK; ++ /* this call is irrelevant, since ++ * acx_process_class_frame is a stub, so return ++ * immediately instead. ++ * return acx_process_class_frame(adev, rxbuf, 3); */ ++ break; ++ default: ++ break; ++ } ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_rxbuf ++** ++** NB: used by USB code also ++*/ ++void ++acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ struct wlan_hdr *hdr; ++ unsigned int qual; ++ int buf_len; ++ u16 fc; ++ ++ hdr = acx_get_wlan_hdr(adev, rxbuf); ++ fc = le16_to_cpu(hdr->fc); ++ /* length of frame from control field to first byte of FCS */ ++ buf_len = RXBUF_BYTES_RCVD(adev, rxbuf); ++ ++ if ( ((WF_FC_FSTYPE & fc) != WF_FSTYPE_BEACON) ++ || (acx_debug & L_XFER_BEACON) ++ ) { ++ log(L_XFER|L_DATA, "rx: %s " ++ "time:%u len:%u signal:%u SNR:%u macstat:%02X " ++ "phystat:%02X phyrate:%u status:%u\n", ++ acx_get_packet_type_string(fc), ++ le32_to_cpu(rxbuf->time), ++ buf_len, ++ acx_signal_to_winlevel(rxbuf->phy_level), ++ acx_signal_to_winlevel(rxbuf->phy_snr), ++ rxbuf->mac_status, ++ rxbuf->phy_stat_baseband, ++ rxbuf->phy_plcp_signal, ++ adev->status); ++ } ++ ++ if (unlikely(acx_debug & L_DATA)) { ++ printk("rx: 802.11 buf[%u]: ", buf_len); ++ acx_dump_bytes(hdr, buf_len); ++ } ++ ++ /* FIXME: should check for Rx errors (rxbuf->mac_status? ++ * discard broken packets - but NOT for monitor!) ++ * and update Rx packet statistics here */ ++ ++ if (unlikely(adev->mode == ACX_MODE_MONITOR)) { ++ acx_l_rxmonitor(adev, rxbuf); ++ } else if (likely(buf_len >= WLAN_HDR_A3_LEN)) { ++ acx_l_rx_ieee802_11_frame(adev, rxbuf); ++ } else { ++ log(L_DEBUG|L_XFER|L_DATA, ++ "rx: NOT receiving packet (%s): " ++ "size too small (%u)\n", ++ acx_get_packet_type_string(fc), ++ buf_len); ++ } ++ ++ /* Now check Rx quality level, AFTER processing packet. ++ * I tried to figure out how to map these levels to dBm ++ * values, but for the life of me I really didn't ++ * manage to get it. Either these values are not meant to ++ * be expressed in dBm, or it's some pretty complicated ++ * calculation. */ ++ ++#ifdef FROM_SCAN_SOURCE_ONLY ++ /* only consider packets originating from the MAC ++ * address of the device that's managing our BSSID. ++ * Disable it for now, since it removes information (levels ++ * from different peers) and slows the Rx path. */ ++ if (adev->ap_client ++ && mac_is_equal(hdr->a2, adev->ap_client->address)) { ++#endif ++ adev->wstats.qual.level = acx_signal_to_winlevel(rxbuf->phy_level); ++ adev->wstats.qual.noise = acx_signal_to_winlevel(rxbuf->phy_snr); ++#ifndef OLD_QUALITY ++ qual = acx_signal_determine_quality(adev->wstats.qual.level, ++ adev->wstats.qual.noise); ++#else ++ qual = (adev->wstats.qual.noise <= 100) ? ++ 100 - adev->wstats.qual.noise : 0; ++#endif ++ adev->wstats.qual.qual = qual; ++ adev->wstats.qual.updated = 7; /* all 3 indicators updated */ ++#ifdef FROM_SCAN_SOURCE_ONLY ++ } ++#endif ++} ++ ++ ++/*********************************************************************** ++** acx_l_handle_txrate_auto ++** ++** Theory of operation: ++** client->rate_cap is a bitmask of rates client is capable of. ++** client->rate_cfg is a bitmask of allowed (configured) rates. ++** It is set as a result of iwconfig rate N [auto] ++** or iwpriv set_rates "N,N,N N,N,N" commands. ++** It can be fixed (e.g. 0x0080 == 18Mbit only), ++** auto (0x00ff == 18Mbit or any lower value), ++** and code handles any bitmask (0x1081 == try 54Mbit,18Mbit,1Mbit _only_). ++** ++** client->rate_cur is a value for rate111 field in tx descriptor. ++** It is always set to txrate_cfg sans zero or more most significant ++** bits. This routine handles selection of new rate_cur value depending on ++** outcome of last tx event. ++** ++** client->rate_100 is a precalculated rate value for acx100 ++** (we can do without it, but will need to calculate it on each tx). ++** ++** You cannot configure mixed usage of 5.5 and/or 11Mbit rate ++** with PBCC and CCK modulation. Either both at CCK or both at PBCC. ++** In theory you can implement it, but so far it is considered not worth doing. ++** ++** 22Mbit, of course, is PBCC always. */ ++ ++/* maps acx100 tx descr rate field to acx111 one */ ++static u16 ++rate100to111(u8 r) ++{ ++ switch (r) { ++ case RATE100_1: return RATE111_1; ++ case RATE100_2: return RATE111_2; ++ case RATE100_5: ++ case (RATE100_5 | RATE100_PBCC511): return RATE111_5; ++ case RATE100_11: ++ case (RATE100_11 | RATE100_PBCC511): return RATE111_11; ++ case RATE100_22: return RATE111_22; ++ default: ++ printk("acx: unexpected acx100 txrate: %u! " ++ "Please report\n", r); ++ return RATE111_1; ++ } ++} ++ ++ ++void ++acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc, ++ u16 cur, u8 rate100, u16 rate111, ++ u8 error, int pkts_to_ignore) ++{ ++ u16 sent_rate; ++ int slower_rate_was_used; ++ ++ /* vda: hmm. current code will do this: ++ ** 1. send packets at 11 Mbit, stepup++ ++ ** 2. will try to send at 22Mbit. hardware will see no ACK, ++ ** retries at 11Mbit, success. code notes that used rate ++ ** is lower. stepup = 0, fallback++ ++ ** 3. repeat step 2 fallback_count times. Fall back to ++ ** 11Mbit. go to step 1. ++ ** If stepup_count is large (say, 16) and fallback_count ++ ** is small (3), this wouldn't be too bad wrt throughput */ ++ ++ if (unlikely(!cur)) { ++ printk("acx: BUG! ratemask is empty\n"); ++ return; /* or else we may lock up the box */ ++ } ++ ++ /* do some preparations, i.e. calculate the one rate that was ++ * used to send this packet */ ++ if (IS_ACX111(adev)) { ++ sent_rate = 1 << highest_bit(rate111 & RATE111_ALL); ++ } else { ++ sent_rate = rate100to111(rate100); ++ } ++ /* sent_rate has only one bit set now, corresponding to tx rate ++ * which was used by hardware to tx this particular packet */ ++ ++ /* now do the actual auto rate management */ ++ log(L_XFER, "tx: %sclient=%p/"MACSTR" used=%04X cur=%04X cfg=%04X " ++ "__=%u/%u ^^=%u/%u\n", ++ (txc->ignore_count > 0) ? "[IGN] " : "", ++ txc, MAC(txc->address), sent_rate, cur, txc->rate_cfg, ++ txc->fallback_count, adev->fallback_threshold, ++ txc->stepup_count, adev->stepup_threshold ++ ); ++ ++ /* we need to ignore old packets already in the tx queue since ++ * they use older rate bytes configured before our last rate change, ++ * otherwise our mechanism will get confused by interpreting old data. ++ * Do it after logging above */ ++ if (txc->ignore_count) { ++ txc->ignore_count--; ++ return; ++ } ++ ++ /* true only if the only nonzero bit in sent_rate is ++ ** less significant than highest nonzero bit in cur */ ++ slower_rate_was_used = ( cur > ((sent_rate<<1)-1) ); ++ ++ if (slower_rate_was_used || error) { ++ txc->stepup_count = 0; ++ if (++txc->fallback_count <= adev->fallback_threshold) ++ return; ++ txc->fallback_count = 0; ++ ++ /* clear highest 1 bit in cur */ ++ sent_rate = RATE111_54; ++ while (!(cur & sent_rate)) sent_rate >>= 1; ++ CLEAR_BIT(cur, sent_rate); ++ if (!cur) /* we can't disable all rates! */ ++ cur = sent_rate; ++ log(L_XFER, "tx: falling back to ratemask %04X\n", cur); ++ ++ } else { /* there was neither lower rate nor error */ ++ txc->fallback_count = 0; ++ if (++txc->stepup_count <= adev->stepup_threshold) ++ return; ++ txc->stepup_count = 0; ++ ++ /* Sanitize. Sort of not needed, but I dont trust hw that much... ++ ** what if it can report bogus tx rates sometimes? */ ++ while (!(cur & sent_rate)) sent_rate >>= 1; ++ ++ /* try to find a higher sent_rate that isn't yet in our ++ * current set, but is an allowed cfg */ ++ while (1) { ++ sent_rate <<= 1; ++ if (sent_rate > txc->rate_cfg) ++ /* no higher rates allowed by config */ ++ return; ++ if (!(cur & sent_rate) && (txc->rate_cfg & sent_rate)) ++ /* found */ ++ break; ++ /* not found, try higher one */ ++ } ++ SET_BIT(cur, sent_rate); ++ log(L_XFER, "tx: stepping up to ratemask %04X\n", cur); ++ } ++ ++ txc->rate_cur = cur; ++ txc->ignore_count = pkts_to_ignore; ++ /* calculate acx100 style rate byte if needed */ ++ if (IS_ACX100(adev)) { ++ txc->rate_100 = acx_bitpos2rate100[highest_bit(cur)]; ++ } ++} ++ ++ ++/*********************************************************************** ++** acx_i_start_xmit ++** ++** Called by network core. Can be called outside of process context. ++*/ ++int ++acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ tx_t *tx; ++ void *txbuf; ++ unsigned long flags; ++ int txresult = NOT_OK; ++ int len; ++ ++ FN_ENTER; ++ ++ if (unlikely(!skb)) { ++ /* indicate success */ ++ txresult = OK; ++ goto end_no_unlock; ++ } ++ if (unlikely(!adev)) { ++ goto end_no_unlock; ++ } ++ ++ acx_lock(adev, flags); ++ ++ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) { ++ goto end; ++ } ++ if (unlikely(adev->mode == ACX_MODE_OFF)) { ++ goto end; ++ } ++ if (unlikely(acx_queue_stopped(ndev))) { ++ log(L_DEBUG, "%s: called when queue stopped\n", __func__); ++ goto end; ++ } ++ if (unlikely(ACX_STATUS_4_ASSOCIATED != adev->status)) { ++ log(L_XFER, "trying to xmit, but not associated yet: " ++ "aborting...\n"); ++ /* silently drop the packet, since we're not connected yet */ ++ txresult = OK; ++ /* ...but indicate an error nevertheless */ ++ adev->stats.tx_errors++; ++ goto end; ++ } ++ ++ tx = acx_l_alloc_tx(adev); ++ if (unlikely(!tx)) { ++#ifndef ACX_MEM ++ /* ++ * generic slave interface has to make do with the tiny amount, around ++ * 7k, of transmit buffer space on the ACX itself. It is likely this will ++ * frequently be full. ++ */ ++ printk_ratelimited("%s: start_xmit: txdesc ring is full, " ++ "dropping tx\n", ndev->name); ++#endif ++ txresult = NOT_OK; ++ goto end; ++ } ++ ++ txbuf = acx_l_get_txbuf(adev, tx); ++ if (unlikely(!txbuf)) { ++ /* Card was removed */ ++ txresult = NOT_OK; ++ acx_l_dealloc_tx(adev, tx); ++ goto end; ++ } ++ len = acx_ether_to_txbuf(adev, txbuf, skb); ++ if (unlikely(len < 0)) { ++ /* Error in packet conversion */ ++ txresult = NOT_OK; ++ acx_l_dealloc_tx(adev, tx); ++ goto end; ++ } ++ acx_l_tx_data(adev, tx, len); ++ ndev->trans_start = jiffies; ++ ++ txresult = OK; ++ adev->stats.tx_packets++; ++ adev->stats.tx_bytes += skb->len; ++ ++end: ++ acx_unlock(adev, flags); ++ ++end_no_unlock: ++ if ((txresult == OK) && skb) ++ dev_kfree_skb_any(skb); ++ ++ FN_EXIT1(txresult); ++ return txresult; ++} ++ ++ ++/*********************************************************************** ++** acx_l_update_ratevector ++** ++** Updates adev->rate_supported[_len] according to rate_{basic,oper} ++*/ ++const u8 ++acx_bitpos2ratebyte[] = { ++ DOT11RATEBYTE_1, ++ DOT11RATEBYTE_2, ++ DOT11RATEBYTE_5_5, ++ DOT11RATEBYTE_6_G, ++ DOT11RATEBYTE_9_G, ++ DOT11RATEBYTE_11, ++ DOT11RATEBYTE_12_G, ++ DOT11RATEBYTE_18_G, ++ DOT11RATEBYTE_22, ++ DOT11RATEBYTE_24_G, ++ DOT11RATEBYTE_36_G, ++ DOT11RATEBYTE_48_G, ++ DOT11RATEBYTE_54_G, ++}; ++ ++void ++acx_l_update_ratevector(acx_device_t *adev) ++{ ++ u16 bcfg = adev->rate_basic; ++ u16 ocfg = adev->rate_oper; ++ u8 *supp = adev->rate_supported; ++ const u8 *dot11 = acx_bitpos2ratebyte; ++ ++ FN_ENTER; ++ ++ while (ocfg) { ++ if (ocfg & 1) { ++ *supp = *dot11; ++ if (bcfg & 1) { ++ *supp |= 0x80; ++ } ++ supp++; ++ } ++ dot11++; ++ ocfg >>= 1; ++ bcfg >>= 1; ++ } ++ adev->rate_supported_len = supp - adev->rate_supported; ++ if (acx_debug & L_ASSOC) { ++ printk("new ratevector: "); ++ acx_dump_bytes(adev->rate_supported, adev->rate_supported_len); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_init ++*/ ++static void ++acx_l_sta_list_init(acx_device_t *adev) ++{ ++ FN_ENTER; ++ memset(adev->sta_hash_tab, 0, sizeof(adev->sta_hash_tab)); ++ memset(adev->sta_list, 0, sizeof(adev->sta_list)); ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_get_from_hash ++*/ ++static inline client_t* ++acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address) ++{ ++ return adev->sta_hash_tab[address[5] % VEC_SIZE(adev->sta_hash_tab)]; ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_get ++*/ ++client_t* ++acx_l_sta_list_get(acx_device_t *adev, const u8 *address) ++{ ++ client_t *client; ++ FN_ENTER; ++ client = acx_l_sta_list_get_from_hash(adev, address); ++ while (client) { ++ if (mac_is_equal(address, client->address)) { ++ client->mtime = jiffies; ++ break; ++ } ++ client = client->next; ++ } ++ FN_EXIT0; ++ return client; ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_del ++*/ ++void ++acx_l_sta_list_del(acx_device_t *adev, client_t *victim) ++{ ++ client_t *client, *next; ++ ++ client = acx_l_sta_list_get_from_hash(adev, victim->address); ++ next = client; ++ /* tricky. next = client on first iteration only, ++ ** on all other iters next = client->next */ ++ while (next) { ++ if (next == victim) { ++ client->next = victim->next; ++ /* Overkill */ ++ memset(victim, 0, sizeof(*victim)); ++ break; ++ } ++ client = next; ++ next = client->next; ++ } ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_alloc ++** ++** Never fails - will evict oldest client if needed ++*/ ++static client_t* ++acx_l_sta_list_alloc(acx_device_t *adev) ++{ ++ int i; ++ unsigned long age, oldest_age; ++ client_t *client, *oldest; ++ ++ FN_ENTER; ++ ++ oldest = &adev->sta_list[0]; ++ oldest_age = 0; ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ client = &adev->sta_list[i]; ++ ++ if (!client->used) { ++ goto found; ++ } else { ++ age = jiffies - client->mtime; ++ if (oldest_age < age) { ++ oldest_age = age; ++ oldest = client; ++ } ++ } ++ } ++ acx_l_sta_list_del(adev, oldest); ++ client = oldest; ++found: ++ memset(client, 0, sizeof(*client)); ++ FN_EXIT0; ++ return client; ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_add ++** ++** Never fails - will evict oldest client if needed ++*/ ++/* In case we will reimplement it differently... */ ++#define STA_LIST_ADD_CAN_FAIL 0 ++ ++static client_t* ++acx_l_sta_list_add(acx_device_t *adev, const u8 *address) ++{ ++ client_t *client; ++ int index; ++ ++ FN_ENTER; ++ ++ client = acx_l_sta_list_alloc(adev); ++ ++ client->mtime = jiffies; ++ MAC_COPY(client->address, address); ++ client->used = CLIENT_EXIST_1; ++ client->auth_alg = WLAN_AUTH_ALG_SHAREDKEY; ++ client->auth_step = 1; ++ /* give some tentative peer rate values ++ ** (needed because peer may do auth without probing us first, ++ ** thus we'll have no idea of peer's ratevector yet). ++ ** Will be overwritten by scanning or assoc code */ ++ client->rate_cap = adev->rate_basic; ++ client->rate_cfg = adev->rate_basic; ++ client->rate_cur = 1 << lowest_bit(adev->rate_basic); ++ ++ index = address[5] % VEC_SIZE(adev->sta_hash_tab); ++ client->next = adev->sta_hash_tab[index]; ++ adev->sta_hash_tab[index] = client; ++ ++ acxlog_mac(L_ASSOC, "sta_list_add: sta=", address, "\n"); ++ ++ FN_EXIT0; ++ return client; ++} ++ ++ ++/*********************************************************************** ++** acx_l_sta_list_get_or_add ++** ++** Never fails - will evict oldest client if needed ++*/ ++static client_t* ++acx_l_sta_list_get_or_add(acx_device_t *adev, const u8 *address) ++{ ++ client_t *client = acx_l_sta_list_get(adev, address); ++ if (!client) ++ client = acx_l_sta_list_add(adev, address); ++ return client; ++} ++ ++ ++/*********************************************************************** ++** acx_set_status ++** ++** This function is called in many atomic regions, must not sleep ++** ++** This function does not need locking UNLESS you call it ++** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can ++** wake queue. This can race with stop_queue elsewhere. ++** See acx_stop_queue comment. */ ++void ++acx_set_status(acx_device_t *adev, u16 new_status) ++{ ++#define QUEUE_OPEN_AFTER_ASSOC 1 /* this really seems to be needed now */ ++ u16 old_status = adev->status; ++ ++ FN_ENTER; ++ ++ log(L_ASSOC, "%s(%d):%s\n", ++ __func__, new_status, acx_get_status_name(new_status)); ++ ++ /* wireless_send_event never sleeps */ ++ if (ACX_STATUS_4_ASSOCIATED == new_status) { ++ union iwreq_data wrqu; ++ ++ wrqu.data.length = 0; ++ wrqu.data.flags = 0; ++ wireless_send_event(adev->ndev, SIOCGIWSCAN, &wrqu, NULL); ++ ++ wrqu.data.length = 0; ++ wrqu.data.flags = 0; ++ MAC_COPY(wrqu.ap_addr.sa_data, adev->bssid); ++ wrqu.ap_addr.sa_family = ARPHRD_ETHER; ++ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL); ++ } else { ++ union iwreq_data wrqu; ++ ++ /* send event with empty BSSID to indicate we're not associated */ ++ MAC_ZERO(wrqu.ap_addr.sa_data); ++ wrqu.ap_addr.sa_family = ARPHRD_ETHER; ++ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL); ++ } ++ ++ adev->status = new_status; ++ ++ switch (new_status) { ++ case ACX_STATUS_1_SCANNING: ++ adev->scan_retries = 0; ++ /* 1.0 s initial scan time */ ++ acx_set_timer(adev, 1000000); ++ break; ++ case ACX_STATUS_2_WAIT_AUTH: ++ case ACX_STATUS_3_AUTHENTICATED: ++ adev->auth_or_assoc_retries = 0; ++ acx_set_timer(adev, 1500000); /* 1.5 s */ ++ break; ++ } ++ ++#if QUEUE_OPEN_AFTER_ASSOC ++ if (new_status == ACX_STATUS_4_ASSOCIATED) { ++ if (old_status < ACX_STATUS_4_ASSOCIATED) { ++ /* ah, we're newly associated now, ++ * so let's indicate carrier */ ++ acx_carrier_on(adev->ndev, "after association"); ++ acx_wake_queue(adev->ndev, "after association"); ++ } ++ } else { ++ /* not associated any more, so let's kill carrier */ ++ if (old_status >= ACX_STATUS_4_ASSOCIATED) { ++ acx_carrier_off(adev->ndev, "after losing association"); ++ acx_stop_queue(adev->ndev, "after losing association"); ++ } ++ } ++#endif ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_i_timer ++** ++** Fires up periodically. Used to kick scan/auth/assoc if something goes wrong ++*/ ++void ++acx_i_timer(unsigned long address) ++{ ++ unsigned long flags; ++ acx_device_t *adev = (acx_device_t*)address; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ log(L_DEBUG|L_ASSOC, "%s: adev->status=%d (%s)\n", ++ __func__, adev->status, acx_get_status_name(adev->status)); ++ ++ switch (adev->status) { ++ case ACX_STATUS_1_SCANNING: ++ /* was set to 0 by set_status() */ ++ if (++adev->scan_retries < 7) { ++ acx_set_timer(adev, 1000000); ++ /* used to interrogate for scan status. ++ ** We rely on SCAN_COMPLETE IRQ instead */ ++ log(L_ASSOC, "continuing scan (%d sec)\n", ++ adev->scan_retries); ++ } else { ++ log(L_ASSOC, "stopping scan\n"); ++ /* send stop_scan cmd when we leave the interrupt context, ++ * and make a decision what to do next (COMPLETE_SCAN) */ ++ acx_schedule_task(adev, ++ ACX_AFTER_IRQ_CMD_STOP_SCAN + ACX_AFTER_IRQ_COMPLETE_SCAN); ++ } ++ break; ++ case ACX_STATUS_2_WAIT_AUTH: ++ /* was set to 0 by set_status() */ ++ if (++adev->auth_or_assoc_retries < 10) { ++ log(L_ASSOC, "resend authen1 request (attempt %d)\n", ++ adev->auth_or_assoc_retries + 1); ++ acx_l_transmit_authen1(adev); ++ } else { ++ /* time exceeded: fall back to scanning mode */ ++ log(L_ASSOC, ++ "authen1 request reply timeout, giving up\n"); ++ /* we are a STA, need to find AP anyhow */ ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); ++ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN); ++ } ++ /* used to be 1500000, but some other driver uses 2.5s */ ++ acx_set_timer(adev, 2500000); ++ break; ++ case ACX_STATUS_3_AUTHENTICATED: ++ /* was set to 0 by set_status() */ ++ if (++adev->auth_or_assoc_retries < 10) { ++ log(L_ASSOC, "resend assoc request (attempt %d)\n", ++ adev->auth_or_assoc_retries + 1); ++ acx_l_transmit_assoc_req(adev); ++ } else { ++ /* time exceeded: give up */ ++ log(L_ASSOC, ++ "association request reply timeout, giving up\n"); ++ /* we are a STA, need to find AP anyhow */ ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); ++ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN); ++ } ++ acx_set_timer(adev, 2500000); /* see above */ ++ break; ++ case ACX_STATUS_4_ASSOCIATED: ++ default: ++ break; ++ } ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_set_timer ++** ++** Sets the 802.11 state management timer's timeout. ++*/ ++void ++acx_set_timer(acx_device_t *adev, int timeout_us) ++{ ++ FN_ENTER; ++ ++ log(L_DEBUG|L_IRQ, "%s(%u ms)\n", __func__, timeout_us/1000); ++ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) { ++ printk("attempt to set the timer " ++ "when the card interface is not up!\n"); ++ goto end; ++ } ++ ++ /* first check if the timer was already initialized, THEN modify it */ ++ if (adev->mgmt_timer.function) { ++ mod_timer(&adev->mgmt_timer, ++ jiffies + (timeout_us * HZ / 1000000)); ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_assocresp ++** ++** We are an AP here ++*/ ++static const u8 ++dot11ratebyte[] = { ++ DOT11RATEBYTE_1, ++ DOT11RATEBYTE_2, ++ DOT11RATEBYTE_5_5, ++ DOT11RATEBYTE_6_G, ++ DOT11RATEBYTE_9_G, ++ DOT11RATEBYTE_11, ++ DOT11RATEBYTE_12_G, ++ DOT11RATEBYTE_18_G, ++ DOT11RATEBYTE_22, ++ DOT11RATEBYTE_24_G, ++ DOT11RATEBYTE_36_G, ++ DOT11RATEBYTE_48_G, ++ DOT11RATEBYTE_54_G, ++}; ++ ++static inline int ++find_pos(const u8 *p, int size, u8 v) ++{ ++ int i; ++ for (i = 0; i < size; i++) ++ if (p[i] == v) ++ return i; ++ /* printk a message about strange byte? */ ++ return 0; ++} ++ ++static void ++add_bits_to_ratemasks(u8* ratevec, int len, u16* brate, u16* orate) ++{ ++ while (len--) { ++ int n = 1 << find_pos(dot11ratebyte, ++ sizeof(dot11ratebyte), *ratevec & 0x7f); ++ if (*ratevec & 0x80) ++ *brate |= n; ++ *orate |= n; ++ ratevec++; ++ } ++} ++ ++static int ++acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct assocresp_frame_body *body; ++ u8 *p; ++ const u8 *da; ++ /* const u8 *sa; */ ++ const u8 *bssid; ++ client_t *clt; ++ ++ FN_ENTER; ++ ++ /* sa = req->hdr->a1; */ ++ da = req->hdr->a2; ++ bssid = req->hdr->a3; ++ ++ clt = acx_l_sta_list_get(adev, da); ++ if (!clt) ++ goto ok; ++ ++ /* Assoc without auth is a big no-no */ ++ /* Let's be liberal: if already assoc'ed STA sends assoc req again, ++ ** we won't be rude */ ++ if (clt->used != CLIENT_AUTHENTICATED_2 ++ && clt->used != CLIENT_ASSOCIATED_3) { ++ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH); ++ goto bad; ++ } ++ ++ clt->used = CLIENT_ASSOCIATED_3; ++ ++ if (clt->aid == 0) ++ clt->aid = ++adev->aid; ++ clt->cap_info = ieee2host16(*(req->cap_info)); ++ ++ /* We cheat here a bit. We don't really care which rates are flagged ++ ** as basic by the client, so we stuff them in single ratemask */ ++ clt->rate_cap = 0; ++ if (req->supp_rates) ++ add_bits_to_ratemasks(req->supp_rates->rates, ++ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap); ++ if (req->ext_rates) ++ add_bits_to_ratemasks(req->ext_rates->rates, ++ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap); ++ /* We can check that client supports all basic rates, ++ ** and deny assoc if not. But let's be liberal, right? ;) */ ++ clt->rate_cfg = clt->rate_cap & adev->rate_oper; ++ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper); ++ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg); ++ if (IS_ACX100(adev)) ++ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)]; ++ clt->fallback_count = clt->stepup_count = 0; ++ clt->ignore_count = 16; ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto bad; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto bad; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = WF_FSTYPE_ASSOCRESPi; ++ head->dur = req->hdr->dur; ++ MAC_COPY(head->da, da); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, bssid); ++ head->seq = req->hdr->seq; ++ ++ body->cap_info = host2ieee16(adev->capabilities); ++ body->status = host2ieee16(0); ++ body->aid = host2ieee16(clt->aid); ++ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len, ++ adev->rate_supported); ++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, ++ adev->rate_supported); ++ ++ acx_l_tx_data(adev, tx, p - (u8*)head); ++ok: ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++* acx_l_transmit_reassocresp ++ ++You may be wondering, just like me, what the hell ReAuth is. ++In practice it was seen sent by STA when STA feels like losing connection. ++ ++[802.11] ++ ++5.4.2.3 Reassociation ++ ++Association is sufficient for no-transition message delivery between ++IEEE 802.11 stations. Additional functionality is needed to support ++BSS-transition mobility. The additional required functionality ++is provided by the reassociation service. Reassociation is a DSS. ++The reassociation service is invoked to 'move' a current association ++from one AP to another. This keeps the DS informed of the current ++mapping between AP and STA as the station moves from BSS to BSS within ++an ESS. Reassociation also enables changing association attributes ++of an established association while the STA remains associated with ++the same AP. Reassociation is always initiated by the mobile STA. ++ ++5.4.3.1 Authentication ++... ++A STA may be authenticated with many other STAs at any given instant. ++ ++5.4.3.1.1 Preauthentication ++ ++Because the authentication process could be time-consuming (depending ++on the authentication protocol in use), the authentication service can ++be invoked independently of the association service. Preauthentication ++is typically done by a STA while it is already associated with an AP ++(with which it previously authenticated). IEEE 802.11 does not require ++that STAs preauthenticate with APs. However, authentication is required ++before an association can be established. If the authentication is left ++until reassociation time, this may impact the speed with which a STA can ++reassociate between APs, limiting BSS-transition mobility performance. ++The use of preauthentication takes the authentication service overhead ++out of the time-critical reassociation process. ++ ++5.7.3 Reassociation ++ ++For a STA to reassociate, the reassociation service causes the following ++message to occur: ++ ++ Reassociation request ++ ++* Message type: Management ++* Message subtype: Reassociation request ++* Information items: ++ - IEEE address of the STA ++ - IEEE address of the AP with which the STA will reassociate ++ - IEEE address of the AP with which the STA is currently associated ++ - ESSID ++* Direction of message: From STA to 'new' AP ++ ++The address of the current AP is included for efficiency. The inclusion ++of the current AP address facilitates MAC reassociation to be independent ++of the DS implementation. ++ ++ Reassociation response ++* Message type: Management ++* Message subtype: Reassociation response ++* Information items: ++ - Result of the requested reassociation. (success/failure) ++ - If the reassociation is successful, the response shall include the AID. ++* Direction of message: From AP to STA ++ ++7.2.3.6 Reassociation Request frame format ++ ++The frame body of a management frame of subtype Reassociation Request ++contains the information shown in Table 9. ++ ++Table 9 Reassociation Request frame body ++Order Information ++1 Capability information ++2 Listen interval ++3 Current AP address ++4 SSID ++5 Supported rates ++ ++7.2.3.7 Reassociation Response frame format ++ ++The frame body of a management frame of subtype Reassociation Response ++contains the information shown in Table 10. ++ ++Table 10 Reassociation Response frame body ++Order Information ++1 Capability information ++2 Status code ++3 Association ID (AID) ++4 Supported rates ++ ++*/ ++static int ++acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct reassocresp_frame_body *body; ++ u8 *p; ++ const u8 *da; ++ /* const u8 *sa; */ ++ const u8 *bssid; ++ client_t *clt; ++ ++ FN_ENTER; ++ ++ /* sa = req->hdr->a1; */ ++ da = req->hdr->a2; ++ bssid = req->hdr->a3; ++ ++ /* Must be already authenticated, so it must be in the list */ ++ clt = acx_l_sta_list_get(adev, da); ++ if (!clt) ++ goto ok; ++ ++ /* Assoc without auth is a big no-no */ ++ /* Already assoc'ed STAs sending ReAssoc req are ok per 802.11 */ ++ if (clt->used != CLIENT_AUTHENTICATED_2 ++ && clt->used != CLIENT_ASSOCIATED_3) { ++ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH); ++ goto bad; ++ } ++ ++ clt->used = CLIENT_ASSOCIATED_3; ++ if (clt->aid == 0) { ++ clt->aid = ++adev->aid; ++ } ++ if (req->cap_info) ++ clt->cap_info = ieee2host16(*(req->cap_info)); ++ ++ /* We cheat here a bit. We don't really care which rates are flagged ++ ** as basic by the client, so we stuff them in single ratemask */ ++ clt->rate_cap = 0; ++ if (req->supp_rates) ++ add_bits_to_ratemasks(req->supp_rates->rates, ++ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap); ++ if (req->ext_rates) ++ add_bits_to_ratemasks(req->ext_rates->rates, ++ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap); ++ /* We can check that client supports all basic rates, ++ ** and deny assoc if not. But let's be liberal, right? ;) */ ++ clt->rate_cfg = clt->rate_cap & adev->rate_oper; ++ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper); ++ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg); ++ if (IS_ACX100(adev)) ++ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)]; ++ ++ clt->fallback_count = clt->stepup_count = 0; ++ clt->ignore_count = 16; ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto ok; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto ok; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = WF_FSTYPE_REASSOCRESPi; ++ head->dur = req->hdr->dur; ++ MAC_COPY(head->da, da); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, bssid); ++ head->seq = req->hdr->seq; ++ ++ /* IEs: 1. caps */ ++ body->cap_info = host2ieee16(adev->capabilities); ++ /* 2. status code */ ++ body->status = host2ieee16(0); ++ /* 3. AID */ ++ body->aid = host2ieee16(clt->aid); ++ /* 4. supp rates */ ++ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len, ++ adev->rate_supported); ++ /* 5. ext supp rates */ ++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, ++ adev->rate_supported); ++ ++ acx_l_tx_data(adev, tx, p - (u8*)head); ++ok: ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_disassoc_from_sta ++*/ ++static void ++acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req) ++{ ++ const u8 *ta; ++ client_t *clt; ++ ++ FN_ENTER; ++ ++ ta = req->hdr->a2; ++ clt = acx_l_sta_list_get(adev, ta); ++ if (!clt) ++ goto end; ++ ++ if (clt->used != CLIENT_ASSOCIATED_3 ++ && clt->used != CLIENT_AUTHENTICATED_2) { ++ /* it's disassociating, but it's ++ ** not even authenticated! Let it know that */ ++ acxlog_mac(L_ASSOC|L_XFER, "peer ", ta, "has sent disassoc " ++ "req but it is not even auth'ed! sending deauth\n"); ++ acx_l_transmit_deauthen(adev, ta, ++ WLAN_MGMT_REASON_CLASS2_NONAUTH); ++ clt->used = CLIENT_EXIST_1; ++ } else { ++ /* mark it as auth'ed only */ ++ clt->used = CLIENT_AUTHENTICATED_2; ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_deauthen_from_sta ++*/ ++static void ++acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req) ++{ ++ const wlan_hdr_t *hdr; ++ client_t *client; ++ ++ FN_ENTER; ++ ++ hdr = req->hdr; ++ ++ if (acx_debug & L_ASSOC) { ++ acx_print_mac("got deauth from sta:", hdr->a2, " "); ++ acx_print_mac("a1:", hdr->a1, " "); ++ acx_print_mac("a3:", hdr->a3, " "); ++ acx_print_mac("adev->addr:", adev->dev_addr, " "); ++ acx_print_mac("adev->bssid:", adev->bssid, "\n"); ++ } ++ ++ if (!mac_is_equal(adev->dev_addr, hdr->a1)) { ++ goto end; ++ } ++ ++ client = acx_l_sta_list_get(adev, hdr->a2); ++ if (!client) { ++ goto end; ++ } ++ client->used = CLIENT_EXIST_1; ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_disassoc_from_ap ++*/ ++static void ++acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req) ++{ ++ FN_ENTER; ++ ++ if (!adev->ap_client) { ++ /* Hrm, we aren't assoc'ed yet anyhow... */ ++ goto end; ++ } ++ ++ printk("%s: got disassoc frame with reason %d (%s)\n", ++ adev->ndev->name, *req->reason, ++ acx_wlan_reason_str(*req->reason)); ++ ++ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) { ++ acx_l_transmit_deauthen(adev, adev->bssid, ++ WLAN_MGMT_REASON_DEAUTH_LEAVING); ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG); ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_deauth_from_ap ++*/ ++static void ++acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req) ++{ ++ FN_ENTER; ++ ++ if (!adev->ap_client) { ++ /* Hrm, we aren't assoc'ed yet anyhow... */ ++ goto end; ++ } ++ ++ printk("%s: got deauth frame with reason %d (%s)\n", ++ adev->ndev->name, *req->reason, ++ acx_wlan_reason_str(*req->reason)); ++ ++ /* Chk: is ta verified to be from our AP? */ ++ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) { ++ log(L_DEBUG, "AP sent us deauth packet\n"); ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG); ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_rx ++** ++** The end of the Rx path. Pulls data from a rxhostdesc into a socket ++** buffer and feeds it to the network stack via netif_rx(). ++*/ ++static void ++acx_l_rx(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ FN_ENTER; ++ if (likely(adev->dev_state_mask & ACX_STATE_IFACE_UP)) { ++ struct sk_buff *skb; ++ skb = acx_rxbuf_to_ether(adev, rxbuf); ++ if (likely(skb)) { ++ netif_rx(skb); ++ adev->ndev->last_rx = jiffies; ++ adev->stats.rx_packets++; ++ adev->stats.rx_bytes += skb->len; ++ } ++ } ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_data_frame_master ++*/ ++static int ++acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ struct wlan_hdr *hdr; ++ struct tx *tx; ++ void *txbuf; ++ int len; ++ int result = NOT_OK; ++ ++ FN_ENTER; ++ ++ hdr = acx_get_wlan_hdr(adev, rxbuf); ++ ++ switch (WF_FC_FROMTODSi & hdr->fc) { ++ case 0: ++ case WF_FC_FROMDSi: ++ log(L_DEBUG, "ap->sta or adhoc->adhoc data frame ignored\n"); ++ goto done; ++ case WF_FC_TODSi: ++ break; ++ default: /* WF_FC_FROMTODSi */ ++ log(L_DEBUG, "wds data frame ignored (TODO)\n"); ++ goto done; ++ } ++ ++ /* check if it is our BSSID, if not, leave */ ++ if (!mac_is_equal(adev->bssid, hdr->a1)) { ++ goto done; ++ } ++ ++ if (mac_is_equal(adev->dev_addr, hdr->a3)) { ++ /* this one is for us */ ++ acx_l_rx(adev, rxbuf); ++ } else { ++ if (mac_is_bcast(hdr->a3)) { ++ /* this one is bcast, rx it too */ ++ acx_l_rx(adev, rxbuf); ++ } ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) { ++ goto fail; ++ } ++ /* repackage, tx, and hope it someday reaches its destination */ ++ /* order is important, we do it in-place */ ++ MAC_COPY(hdr->a1, hdr->a3); ++ MAC_COPY(hdr->a3, hdr->a2); ++ MAC_COPY(hdr->a2, adev->bssid); ++ /* To_DS = 0, From_DS = 1 */ ++ hdr->fc = WF_FC_FROMDSi + WF_FTYPE_DATAi; ++ ++ txbuf = acx_l_get_txbuf(adev, tx); ++ if (txbuf) { ++ len = RXBUF_BYTES_RCVD(adev, rxbuf); ++ memcpy(txbuf, hdr, len); ++ acx_l_tx_data(adev, tx, len); ++ } else { ++ acx_l_dealloc_tx(adev, tx); ++ } ++ } ++done: ++ result = OK; ++fail: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_data_frame_client ++*/ ++static int ++acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ const u8 *da, *bssid; ++ const wlan_hdr_t *hdr; ++ struct net_device *ndev = adev->ndev; ++ int result = NOT_OK; ++ ++ FN_ENTER; ++ ++ if (ACX_STATUS_4_ASSOCIATED != adev->status) ++ goto drop; ++ ++ hdr = acx_get_wlan_hdr(adev, rxbuf); ++ ++ switch (WF_FC_FROMTODSi & hdr->fc) { ++ case 0: ++ if (adev->mode != ACX_MODE_0_ADHOC) { ++ log(L_DEBUG, "adhoc->adhoc data frame ignored\n"); ++ goto drop; ++ } ++ bssid = hdr->a3; ++ break; ++ case WF_FC_FROMDSi: ++ if (adev->mode != ACX_MODE_2_STA) { ++ log(L_DEBUG, "ap->sta data frame ignored\n"); ++ goto drop; ++ } ++ bssid = hdr->a2; ++ break; ++ case WF_FC_TODSi: ++ log(L_DEBUG, "sta->ap data frame ignored\n"); ++ goto drop; ++ default: /* WF_FC_FROMTODSi: wds->wds */ ++ log(L_DEBUG, "wds data frame ignored (todo)\n"); ++ goto drop; ++ } ++ ++ da = hdr->a1; ++ ++ if (unlikely(acx_debug & L_DEBUG)) { ++ acx_print_mac("rx: da=", da, ""); ++ acx_print_mac(" bssid=", bssid, ""); ++ acx_print_mac(" adev->bssid=", adev->bssid, ""); ++ acx_print_mac(" adev->addr=", adev->dev_addr, "\n"); ++ } ++ ++ /* promiscuous mode --> receive all packets */ ++ if (unlikely(ndev->flags & IFF_PROMISC)) ++ goto process; ++ ++ /* FIRST, check if it is our BSSID */ ++ if (!mac_is_equal(adev->bssid, bssid)) { ++ /* is not our BSSID, so bail out */ ++ goto drop; ++ } ++ ++ /* then, check if it is our address */ ++ if (mac_is_equal(adev->dev_addr, da)) { ++ goto process; ++ } ++ ++ /* then, check if it is broadcast */ ++ if (mac_is_bcast(da)) { ++ goto process; ++ } ++ ++ if (mac_is_mcast(da)) { ++ /* unconditionally receive all multicasts */ ++ if (ndev->flags & IFF_ALLMULTI) ++ goto process; ++ ++ /* FIXME: need to check against the list of ++ * multicast addresses that are configured ++ * for the interface (ifconfig) */ ++ log(L_XFER, "FIXME: multicast packet, need to check " ++ "against a list of multicast addresses " ++ "(to be created!); accepting packet for now\n"); ++ /* for now, just accept it here */ ++ goto process; ++ } ++ ++ log(L_DEBUG, "rx: foreign packet, dropping\n"); ++ goto drop; ++process: ++ /* receive packet */ ++ acx_l_rx(adev, rxbuf); ++ ++ result = OK; ++drop: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_mgmt_frame ++** ++** Theory of operation: mgmt packet gets parsed (to make it easy ++** to access variable-sized IEs), results stored in 'parsed'. ++** Then we react to the packet. ++*/ ++typedef union parsed_mgmt_req { ++ wlan_fr_mgmt_t mgmt; ++ wlan_fr_assocreq_t assocreq; ++ wlan_fr_reassocreq_t reassocreq; ++ wlan_fr_assocresp_t assocresp; ++ wlan_fr_reassocresp_t reassocresp; ++ wlan_fr_beacon_t beacon; ++ wlan_fr_disassoc_t disassoc; ++ wlan_fr_authen_t authen; ++ wlan_fr_deauthen_t deauthen; ++ wlan_fr_proberesp_t proberesp; ++} parsed_mgmt_req_t; ++ ++void BUG_excessive_stack_usage(void); ++ ++static int ++acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ parsed_mgmt_req_t parsed; /* takes ~100 bytes of stack */ ++ wlan_hdr_t *hdr; ++ int adhoc, sta_scan, sta, ap; ++ int len; ++ ++ if (sizeof(parsed) > 256) ++ BUG_excessive_stack_usage(); ++ ++ FN_ENTER; ++ ++ hdr = acx_get_wlan_hdr(adev, rxbuf); ++ ++ /* Management frames never have these set */ ++ if (WF_FC_FROMTODSi & hdr->fc) { ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++ } ++ ++ len = RXBUF_BYTES_RCVD(adev, rxbuf); ++ if (WF_FC_ISWEPi & hdr->fc) ++ len -= 0x10; ++ ++ adhoc = (adev->mode == ACX_MODE_0_ADHOC); ++ sta_scan = ((adev->mode == ACX_MODE_2_STA) ++ && (adev->status != ACX_STATUS_4_ASSOCIATED)); ++ sta = ((adev->mode == ACX_MODE_2_STA) ++ && (adev->status == ACX_STATUS_4_ASSOCIATED)); ++ ap = (adev->mode == ACX_MODE_3_AP); ++ ++ switch (WF_FC_FSTYPEi & hdr->fc) { ++ /* beacons first, for speed */ ++ case WF_FSTYPE_BEACONi: ++ memset(&parsed.beacon, 0, sizeof(parsed.beacon)); ++ parsed.beacon.hdr = hdr; ++ parsed.beacon.len = len; ++ if (acx_debug & L_DATA) { ++ printk("beacon len:%d fc:%04X dur:%04X seq:%04X", ++ len, hdr->fc, hdr->dur, hdr->seq); ++ acx_print_mac(" a1:", hdr->a1, ""); ++ acx_print_mac(" a2:", hdr->a2, ""); ++ acx_print_mac(" a3:", hdr->a3, "\n"); ++ } ++ wlan_mgmt_decode_beacon(&parsed.beacon); ++ /* beacon and probe response are very similar, so... */ ++ acx_l_process_probe_response(adev, &parsed.beacon, rxbuf); ++ break; ++ case WF_FSTYPE_ASSOCREQi: ++ if (!ap) ++ break; ++ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq)); ++ parsed.assocreq.hdr = hdr; ++ parsed.assocreq.len = len; ++ wlan_mgmt_decode_assocreq(&parsed.assocreq); ++ if (mac_is_equal(hdr->a1, adev->bssid) ++ && mac_is_equal(hdr->a3, adev->bssid)) { ++ acx_l_transmit_assocresp(adev, &parsed.assocreq); ++ } ++ break; ++ case WF_FSTYPE_REASSOCREQi: ++ if (!ap) ++ break; ++ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq)); ++ parsed.assocreq.hdr = hdr; ++ parsed.assocreq.len = len; ++ wlan_mgmt_decode_assocreq(&parsed.assocreq); ++ /* reassocreq and assocreq are equivalent */ ++ acx_l_transmit_reassocresp(adev, &parsed.reassocreq); ++ break; ++ case WF_FSTYPE_ASSOCRESPi: ++ if (!sta_scan) ++ break; ++ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp)); ++ parsed.assocresp.hdr = hdr; ++ parsed.assocresp.len = len; ++ wlan_mgmt_decode_assocresp(&parsed.assocresp); ++ acx_l_process_assocresp(adev, &parsed.assocresp); ++ break; ++ case WF_FSTYPE_REASSOCRESPi: ++ if (!sta_scan) ++ break; ++ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp)); ++ parsed.assocresp.hdr = hdr; ++ parsed.assocresp.len = len; ++ wlan_mgmt_decode_assocresp(&parsed.assocresp); ++ acx_l_process_reassocresp(adev, &parsed.reassocresp); ++ break; ++ case WF_FSTYPE_PROBEREQi: ++ if (ap || adhoc) { ++ /* FIXME: since we're supposed to be an AP, ++ ** we need to return a Probe Response packet. ++ ** Currently firmware is doing it for us, ++ ** but firmware is buggy! See comment elsewhere --vda */ ++ } ++ break; ++ case WF_FSTYPE_PROBERESPi: ++ memset(&parsed.proberesp, 0, sizeof(parsed.proberesp)); ++ parsed.proberesp.hdr = hdr; ++ parsed.proberesp.len = len; ++ wlan_mgmt_decode_proberesp(&parsed.proberesp); ++ acx_l_process_probe_response(adev, &parsed.proberesp, rxbuf); ++ break; ++ case 6: ++ case 7: ++ /* exit */ ++ break; ++ case WF_FSTYPE_ATIMi: ++ /* exit */ ++ break; ++ case WF_FSTYPE_DISASSOCi: ++ if (!sta && !ap) ++ break; ++ memset(&parsed.disassoc, 0, sizeof(parsed.disassoc)); ++ parsed.disassoc.hdr = hdr; ++ parsed.disassoc.len = len; ++ wlan_mgmt_decode_disassoc(&parsed.disassoc); ++ if (sta) ++ acx_l_process_disassoc_from_ap(adev, &parsed.disassoc); ++ else ++ acx_l_process_disassoc_from_sta(adev, &parsed.disassoc); ++ break; ++ case WF_FSTYPE_AUTHENi: ++ if (!sta_scan && !ap) ++ break; ++ memset(&parsed.authen, 0, sizeof(parsed.authen)); ++ parsed.authen.hdr = hdr; ++ parsed.authen.len = len; ++ wlan_mgmt_decode_authen(&parsed.authen); ++ acx_l_process_authen(adev, &parsed.authen); ++ break; ++ case WF_FSTYPE_DEAUTHENi: ++ if (!sta && !ap) ++ break; ++ memset(&parsed.deauthen, 0, sizeof(parsed.deauthen)); ++ parsed.deauthen.hdr = hdr; ++ parsed.deauthen.len = len; ++ wlan_mgmt_decode_deauthen(&parsed.deauthen); ++ if (sta) ++ acx_l_process_deauth_from_ap(adev, &parsed.deauthen); ++ else ++ acx_l_process_deauth_from_sta(adev, &parsed.deauthen); ++ break; ++ } ++ ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++#ifdef UNUSED ++/*********************************************************************** ++** acx_process_class_frame ++** ++** Called from IRQ context only ++*/ ++static int ++acx_process_class_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala) ++{ ++ return OK; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_l_process_NULL_frame ++*/ ++#ifdef BOGUS_ITS_NOT_A_NULL_FRAME_HANDLER_AT_ALL ++static int ++acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala) ++{ ++ const signed char *esi; ++ const u8 *ebx; ++ const wlan_hdr_t *hdr; ++ const client_t *client; ++ int result = NOT_OK; ++ ++ hdr = acx_get_wlan_hdr(adev, rxbuf); ++ ++ switch (WF_FC_FROMTODSi & hdr->fc) { ++ case 0: ++ esi = hdr->a1; ++ ebx = hdr->a2; ++ break; ++ case WF_FC_FROMDSi: ++ esi = hdr->a1; ++ ebx = hdr->a3; ++ break; ++ case WF_FC_TODSi: ++ esi = hdr->a1; ++ ebx = hdr->a2; ++ break; ++ default: /* WF_FC_FROMTODSi */ ++ esi = hdr->a1; /* added by me! --vda */ ++ ebx = hdr->a2; ++ } ++ ++ if (esi[0x0] < 0) { ++ result = OK; ++ goto done; ++ } ++ ++ client = acx_l_sta_list_get(adev, ebx); ++ if (client) ++ result = NOT_OK; ++ else { ++#ifdef IS_IT_BROKEN ++ log(L_DEBUG|L_XFER, "\n"); ++ acx_l_transmit_deauthen(adev, ebx, ++ WLAN_MGMT_REASON_CLASS2_NONAUTH); ++#else ++ log(L_DEBUG, "received NULL frame from unknown client! " ++ "We really shouldn't send deauthen here, right?\n"); ++#endif ++ result = OK; ++ } ++done: ++ return result; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_l_process_probe_response ++*/ ++static int ++acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req, ++ const rxbuffer_t *rxbuf) ++{ ++ struct client *bss; ++ wlan_hdr_t *hdr; ++ ++ FN_ENTER; ++ ++ hdr = req->hdr; ++ ++ if (mac_is_equal(hdr->a3, adev->dev_addr)) { ++ log(L_ASSOC, "huh, scan found our own MAC!?\n"); ++ goto ok; /* just skip this one silently */ ++ } ++ ++ bss = acx_l_sta_list_get_or_add(adev, hdr->a2); ++ ++ /* NB: be careful modifying bss data! It may be one ++ ** of the already known clients (like our AP if we are a STA) ++ ** Thus do not blindly modify e.g. current ratemask! */ ++ ++ if (STA_LIST_ADD_CAN_FAIL && !bss) { ++ /* uh oh, we found more sites/stations than we can handle with ++ * our current setup: pull the emergency brake and stop scanning! */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_STOP_SCAN); ++ /* TODO: a nice comment what below call achieves --vda */ ++ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH); ++ goto ok; ++ } ++ /* NB: get_or_add already filled bss->address = hdr->a2 */ ++ MAC_COPY(bss->bssid, hdr->a3); ++ ++ /* copy the ESSID element */ ++ if (req->ssid && req->ssid->len <= IW_ESSID_MAX_SIZE) { ++ bss->essid_len = req->ssid->len; ++ memcpy(bss->essid, req->ssid->ssid, req->ssid->len); ++ bss->essid[req->ssid->len] = '\0'; ++ } else { ++ /* Either no ESSID IE or oversized one */ ++ printk("%s: received packet has bogus ESSID\n", ++ adev->ndev->name); ++ } ++ ++ if (req->ds_parms) ++ bss->channel = req->ds_parms->curr_ch; ++ if (req->cap_info) ++ bss->cap_info = ieee2host16(*req->cap_info); ++ ++ bss->sir = acx_signal_to_winlevel(rxbuf->phy_level); ++ bss->snr = acx_signal_to_winlevel(rxbuf->phy_snr); ++ ++ bss->rate_cap = 0; /* operational mask */ ++ bss->rate_bas = 0; /* basic mask */ ++ if (req->supp_rates) ++ add_bits_to_ratemasks(req->supp_rates->rates, ++ req->supp_rates->len, &bss->rate_bas, &bss->rate_cap); ++ if (req->ext_rates) ++ add_bits_to_ratemasks(req->ext_rates->rates, ++ req->ext_rates->len, &bss->rate_bas, &bss->rate_cap); ++ /* Fix up any possible bogosity - code elsewhere ++ * is not expecting empty masks */ ++ if (!bss->rate_cap) ++ bss->rate_cap = adev->rate_basic; ++ if (!bss->rate_bas) ++ bss->rate_bas = 1 << lowest_bit(bss->rate_cap); ++ if (!bss->rate_cur) ++ bss->rate_cur = 1 << lowest_bit(bss->rate_bas); ++ ++ /* People moan about this being too noisy at L_ASSOC */ ++ log(L_DEBUG, ++ "found %s: ESSID=\"%s\" ch=%d " ++ "BSSID="MACSTR" caps=0x%04X SIR=%d SNR=%d\n", ++ (bss->cap_info & WF_MGMT_CAP_IBSS) ? "Ad-Hoc peer" : "AP", ++ bss->essid, bss->channel, MAC(bss->bssid), bss->cap_info, ++ bss->sir, bss->snr); ++ok: ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_assocresp ++*/ ++static int ++acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req) ++{ ++ const wlan_hdr_t *hdr; ++ int res = OK; ++ ++ FN_ENTER; ++ ++ hdr = req->hdr; ++ ++ if ((ACX_MODE_2_STA == adev->mode) ++ && mac_is_equal(adev->dev_addr, hdr->a1)) { ++ u16 st = ieee2host16(*(req->status)); ++ if (WLAN_MGMT_STATUS_SUCCESS == st) { ++ adev->aid = ieee2host16(*(req->aid)); ++ /* tell the card we are associated when ++ ** we are out of interrupt context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_ASSOCIATE); ++ } else { ++ ++ /* TODO: we shall delete peer from sta_list, and try ++ ** other candidates... */ ++ ++ printk("%s: association FAILED: peer sent " ++ "Status Code %d (%s)\n", ++ adev->ndev->name, st, get_status_string(st)); ++ res = NOT_OK; ++ } ++ } ++ ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_reassocresp ++*/ ++static int ++acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req) ++{ ++ const wlan_hdr_t *hdr; ++ int result = NOT_OK; ++ u16 st; ++ ++ FN_ENTER; ++ ++ hdr = req->hdr; ++ ++ if (!mac_is_equal(adev->dev_addr, hdr->a1)) { ++ goto end; ++ } ++ st = ieee2host16(*(req->status)); ++ if (st == WLAN_MGMT_STATUS_SUCCESS) { ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); ++ result = OK; ++ } else { ++ printk("%s: reassociation FAILED: peer sent " ++ "response code %d (%s)\n", ++ adev->ndev->name, st, get_status_string(st)); ++ } ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_l_process_authen ++** ++** Called only in STA_SCAN or AP mode ++*/ ++static int ++acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req) ++{ ++ const wlan_hdr_t *hdr; ++ client_t *clt; ++ wlan_ie_challenge_t *chal; ++ u16 alg, seq, status; ++ int ap, result; ++ ++ FN_ENTER; ++ ++ hdr = req->hdr; ++ ++ if (acx_debug & L_ASSOC) { ++ acx_print_mac("AUTHEN adev->addr=", adev->dev_addr, " "); ++ acx_print_mac("a1=", hdr->a1, " "); ++ acx_print_mac("a2=", hdr->a2, " "); ++ acx_print_mac("a3=", hdr->a3, " "); ++ acx_print_mac("adev->bssid=", adev->bssid, "\n"); ++ } ++ ++ if (!mac_is_equal(adev->dev_addr, hdr->a1) ++ || !mac_is_equal(adev->bssid, hdr->a3)) { ++ result = OK; ++ goto end; ++ } ++ ++ alg = ieee2host16(*(req->auth_alg)); ++ seq = ieee2host16(*(req->auth_seq)); ++ status = ieee2host16(*(req->status)); ++ ++ log(L_ASSOC, "auth algorithm %d, auth sequence %d, status %d\n", alg, seq, status); ++ ++ ap = (adev->mode == ACX_MODE_3_AP); ++ ++ if (adev->auth_alg <= 1) { ++ if (adev->auth_alg != alg) { ++ log(L_ASSOC, "auth algorithm mismatch: " ++ "our:%d peer:%d\n", adev->auth_alg, alg); ++ result = NOT_OK; ++ goto end; ++ } ++ } ++ if (ap) { ++ clt = acx_l_sta_list_get_or_add(adev, hdr->a2); ++ if (STA_LIST_ADD_CAN_FAIL && !clt) { ++ log(L_ASSOC, "could not allocate room for client\n"); ++ result = NOT_OK; ++ goto end; ++ } ++ } else { ++ clt = adev->ap_client; ++ if (!mac_is_equal(clt->address, hdr->a2)) { ++ printk("%s: malformed auth frame from AP?!\n", ++ adev->ndev->name); ++ result = NOT_OK; ++ goto end; ++ } ++ } ++ ++ /* now check which step in the authentication sequence we are ++ * currently in, and act accordingly */ ++ switch (seq) { ++ case 1: ++ if (!ap) ++ break; ++ acx_l_transmit_authen2(adev, req, clt); ++ break; ++ case 2: ++ if (ap) ++ break; ++ if (status == WLAN_MGMT_STATUS_SUCCESS) { ++ if (alg == WLAN_AUTH_ALG_OPENSYSTEM) { ++ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED); ++ acx_l_transmit_assoc_req(adev); ++ } else ++ if (alg == WLAN_AUTH_ALG_SHAREDKEY) { ++ acx_l_transmit_authen3(adev, req); ++ } ++ } else { ++ printk("%s: auth FAILED: peer sent " ++ "response code %d (%s), " ++ "still waiting for authentication\n", ++ adev->ndev->name, ++ status, get_status_string(status)); ++ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH); ++ } ++ break; ++ case 3: ++ if (!ap) ++ break; ++ if ((clt->auth_alg != WLAN_AUTH_ALG_SHAREDKEY) ++ || (alg != WLAN_AUTH_ALG_SHAREDKEY) ++ || (clt->auth_step != 2)) ++ break; ++ chal = req->challenge; ++ if (!chal ++ || memcmp(chal->challenge, clt->challenge_text, WLAN_CHALLENGE_LEN) ++ || (chal->eid != WLAN_EID_CHALLENGE) ++ || (chal->len != WLAN_CHALLENGE_LEN) ++ ) ++ break; ++ acx_l_transmit_authen4(adev, req); ++ MAC_COPY(clt->address, hdr->a2); ++ clt->used = CLIENT_AUTHENTICATED_2; ++ clt->auth_step = 4; ++ clt->seq = ieee2host16(hdr->seq); ++ break; ++ case 4: ++ if (ap) ++ break; ++ /* ok, we're through: we're authenticated. Woohoo!! */ ++ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED); ++ log(L_ASSOC, "Authenticated!\n"); ++ /* now that we're authenticated, request association */ ++ acx_l_transmit_assoc_req(adev); ++ break; ++ } ++ result = OK; ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_gen_challenge ++*/ ++static inline void ++acx_gen_challenge(wlan_ie_challenge_t* d) ++{ ++ FN_ENTER; ++ d->eid = WLAN_EID_CHALLENGE; ++ d->len = WLAN_CHALLENGE_LEN; ++ get_random_bytes(d->challenge, WLAN_CHALLENGE_LEN); ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_deauthen ++*/ ++static int ++acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct deauthen_frame_body *body; ++ ++ FN_ENTER; ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto bad; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto bad; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = (WF_FTYPE_MGMTi | WF_FSTYPE_DEAUTHENi); ++ head->dur = 0; ++ MAC_COPY(head->da, addr); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, adev->bssid); ++ head->seq = 0; ++ ++ log(L_DEBUG|L_ASSOC|L_XFER, ++ "sending deauthen to "MACSTR" for %d\n", ++ MAC(addr), reason); ++ ++ body->reason = host2ieee16(reason); ++ ++ /* body is fixed size here, but beware of cutting-and-pasting this - ++ ** do not use sizeof(*body) for variable sized mgmt packets! */ ++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body)); ++ ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_authen1 ++*/ ++static int ++acx_l_transmit_authen1(acx_device_t *adev) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct auth_frame_body *body; ++ ++ FN_ENTER; ++ ++ log(L_ASSOC, "sending authentication1 request (auth algo %d), " ++ "awaiting response\n", adev->auth_alg); ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto bad; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto bad; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = WF_FSTYPE_AUTHENi; ++ /* duration should be 0 instead of 0x8000 to have ++ * the firmware calculate the value, right? */ ++ head->dur = 0; ++ MAC_COPY(head->da, adev->bssid); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, adev->bssid); ++ head->seq = 0; ++ ++ body->auth_alg = host2ieee16(adev->auth_alg); ++ body->auth_seq = host2ieee16(1); ++ body->status = host2ieee16(0); ++ ++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2); ++ ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_authen2 ++*/ ++static int ++acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req, ++ client_t *clt) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct auth_frame_body *body; ++ unsigned int packet_len; ++ ++ FN_ENTER; ++ ++ if (!clt) ++ goto ok; ++ ++ MAC_COPY(clt->address, req->hdr->a2); ++#ifdef UNUSED ++ clt->ps = ((WF_FC_PWRMGTi & req->hdr->fc) != 0); ++#endif ++ clt->auth_alg = ieee2host16(*(req->auth_alg)); ++ clt->auth_step = 2; ++ clt->seq = ieee2host16(req->hdr->seq); ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto bad; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto bad; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = WF_FSTYPE_AUTHENi; ++ head->dur = 0 /* req->hdr->dur */; ++ MAC_COPY(head->da, req->hdr->a2); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, req->hdr->a3); ++ head->seq = 0 /* req->hdr->seq */; ++ ++ /* already in IEEE format, no endianness conversion */ ++ body->auth_alg = *(req->auth_alg); ++ body->auth_seq = host2ieee16(2); ++ body->status = host2ieee16(0); ++ ++ packet_len = WLAN_HDR_A3_LEN + 2 + 2 + 2; ++ if (ieee2host16(*(req->auth_alg)) == WLAN_AUTH_ALG_OPENSYSTEM) { ++ clt->used = CLIENT_AUTHENTICATED_2; ++ } else { /* shared key */ ++ acx_gen_challenge(&body->challenge); ++ memcpy(&clt->challenge_text, body->challenge.challenge, WLAN_CHALLENGE_LEN); ++ packet_len += 2 + 2 + 2 + 1+1+WLAN_CHALLENGE_LEN; ++ } ++ ++ acxlog_mac(L_ASSOC|L_XFER, ++ "transmit_auth2: BSSID=", head->bssid, "\n"); ++ ++ acx_l_tx_data(adev, tx, packet_len); ++ok: ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_authen3 ++*/ ++static int ++acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct auth_frame_body *body; ++ unsigned int packet_len; ++ ++ FN_ENTER; ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto ok; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto ok; ++ } ++ body = (void*)(head + 1); ++ ++ /* add WF_FC_ISWEPi: auth step 3 needs to be encrypted */ ++ head->fc = WF_FC_ISWEPi + WF_FSTYPE_AUTHENi; ++ /* FIXME: is this needed?? authen4 does it... ++ * I think it's even wrong since we shouldn't re-use old ++ * values but instead let the firmware calculate proper ones ++ head->dur = req->hdr->dur; ++ head->seq = req->hdr->seq; ++ */ ++ MAC_COPY(head->da, adev->bssid); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, adev->bssid); ++ ++ /* already in IEEE format, no endianness conversion */ ++ body->auth_alg = *(req->auth_alg); ++ body->auth_seq = host2ieee16(3); ++ body->status = host2ieee16(0); ++ memcpy(&body->challenge, req->challenge, req->challenge->len + 2); ++ packet_len = WLAN_HDR_A3_LEN + 8 + req->challenge->len; ++ ++ log(L_ASSOC|L_XFER, "transmit_authen3!\n"); ++ ++ acx_l_tx_data(adev, tx, packet_len); ++ok: ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_authen4 ++*/ ++static int ++acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct auth_frame_body *body; ++ ++ FN_ENTER; ++ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto ok; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto ok; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = WF_FSTYPE_AUTHENi; /* 0xb0 */ ++ head->dur = 0 /* req->hdr->dur */; ++ MAC_COPY(head->da, req->hdr->a2); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, req->hdr->a3); ++ head->seq = 0 /* req->hdr->seq */; ++ ++ /* already in IEEE format, no endianness conversion */ ++ body->auth_alg = *(req->auth_alg); ++ body->auth_seq = host2ieee16(4); ++ body->status = host2ieee16(0); ++ ++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2); ++ok: ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_assoc_req ++** ++** adev->ap_client is a current candidate AP here ++*/ ++static int ++acx_l_transmit_assoc_req(acx_device_t *adev) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ u8 *body, *p, *prate; ++ unsigned int packet_len; ++ u16 cap; ++ ++ FN_ENTER; ++ ++ log(L_ASSOC, "sending association request, " ++ "awaiting response. NOT ASSOCIATED YET\n"); ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto bad; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto bad; ++ } ++ body = (void*)(head + 1); ++ ++ head->fc = WF_FSTYPE_ASSOCREQi; ++ head->dur = host2ieee16(0x8000); ++ MAC_COPY(head->da, adev->bssid); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, adev->bssid); ++ head->seq = 0; ++ ++ p = body; ++ /* now start filling the AssocReq frame body */ ++ ++ /* since this assoc request will most likely only get ++ * sent in the STA to AP case (and not when Ad-Hoc IBSS), ++ * the cap combination indicated here will thus be ++ * WF_MGMT_CAP_ESSi *always* (no IBSS ever) ++ * The specs are more than non-obvious on all that: ++ * ++ * 802.11 7.3.1.4 Capability Information field ++ ** APs set the ESS subfield to 1 and the IBSS subfield to 0 within ++ ** Beacon or Probe Response management frames. STAs within an IBSS ++ ** set the ESS subfield to 0 and the IBSS subfield to 1 in transmitted ++ ** Beacon or Probe Response management frames ++ ** ++ ** APs set the Privacy subfield to 1 within transmitted Beacon, ++ ** Probe Response, Association Response, and Reassociation Response ++ ** if WEP is required for all data type frames within the BSS. ++ ** STAs within an IBSS set the Privacy subfield to 1 in Beacon ++ ** or Probe Response management frames if WEP is required ++ ** for all data type frames within the IBSS */ ++ ++ /* note that returning 0 will be refused by several APs... ++ * (so this indicates that you're probably supposed to ++ * "confirm" the ESS mode) */ ++ cap = WF_MGMT_CAP_ESSi; ++ ++ /* this one used to be a check on wep_restricted, ++ * but more likely it's wep_enabled instead */ ++ if (adev->wep_enabled) ++ SET_BIT(cap, WF_MGMT_CAP_PRIVACYi); ++ ++ /* Probably we can just set these always, because our hw is ++ ** capable of shortpre and PBCC --vda */ ++ /* only ask for short preamble if the peer station supports it */ ++ if (adev->ap_client->cap_info & WF_MGMT_CAP_SHORT) ++ SET_BIT(cap, WF_MGMT_CAP_SHORTi); ++ /* only ask for PBCC support if the peer station supports it */ ++ if (adev->ap_client->cap_info & WF_MGMT_CAP_PBCC) ++ SET_BIT(cap, WF_MGMT_CAP_PBCCi); ++ ++ /* IEs: 1. caps */ ++ *(u16*)p = cap; p += 2; ++ /* 2. listen interval */ ++ *(u16*)p = host2ieee16(adev->listen_interval); p += 2; ++ /* 3. ESSID */ ++ p = wlan_fill_ie_ssid(p, ++ strlen(adev->essid_for_assoc), adev->essid_for_assoc); ++ /* 4. supp rates */ ++ prate = p; ++ p = wlan_fill_ie_rates(p, ++ adev->rate_supported_len, adev->rate_supported); ++ /* 5. ext supp rates */ ++ p = wlan_fill_ie_rates_ext(p, ++ adev->rate_supported_len, adev->rate_supported); ++ ++ if (acx_debug & L_DEBUG) { ++ printk("association: rates element\n"); ++ acx_dump_bytes(prate, p - prate); ++ } ++ ++ /* calculate lengths */ ++ packet_len = WLAN_HDR_A3_LEN + (p - body); ++ ++ log(L_ASSOC, "association: requesting caps 0x%04X, ESSID \"%s\"\n", ++ cap, adev->essid_for_assoc); ++ ++ acx_l_tx_data(adev, tx, packet_len); ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_transmit_disassoc ++** ++** FIXME: looks like incomplete implementation of a helper: ++** acx_l_transmit_disassoc(adev, clt) - kick this client (we're an AP) ++** acx_l_transmit_disassoc(adev, NULL) - leave BSSID (we're a STA) ++*/ ++#ifdef BROKEN ++int ++acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt) ++{ ++ struct tx *tx; ++ struct wlan_hdr_mgmt *head; ++ struct disassoc_frame_body *body; ++ ++ FN_ENTER; ++/* if (clt != NULL) { */ ++ tx = acx_l_alloc_tx(adev); ++ if (!tx) ++ goto bad; ++ head = acx_l_get_txbuf(adev, tx); ++ if (!head) { ++ acx_l_dealloc_tx(adev, tx); ++ goto bad; ++ } ++ body = (void*)(head + 1); ++ ++/* clt->used = CLIENT_AUTHENTICATED_2; - not (yet?) associated */ ++ ++ head->fc = WF_FSTYPE_DISASSOCi; ++ head->dur = 0; ++ /* huh? It muchly depends on whether we're STA or AP... ++ ** sta->ap: da=bssid, sa=own, bssid=bssid ++ ** ap->sta: da=sta, sa=bssid, bssid=bssid. FIXME! */ ++ MAC_COPY(head->da, adev->bssid); ++ MAC_COPY(head->sa, adev->dev_addr); ++ MAC_COPY(head->bssid, adev->dev_addr); ++ head->seq = 0; ++ ++ /* "Class 3 frame received from nonassociated station." */ ++ body->reason = host2ieee16(7); ++ ++ /* fixed size struct, ok to sizeof */ ++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body)); ++/* } */ ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_s_complete_scan ++** ++** Called either from after_interrupt_task() if: ++** 1) there was Scan_Complete IRQ, or ++** 2) scanning expired in timer() ++** We need to decide which ESS or IBSS to join. ++** Iterates thru adev->sta_list: ++** if adev->ap is not bcast, will join only specified ++** ESS or IBSS with this bssid ++** checks peers' caps for ESS/IBSS bit ++** checks peers' SSID, allows exact match or hidden SSID ++** If station to join is chosen: ++** points adev->ap_client to the chosen struct client ++** sets adev->essid_for_assoc for future assoc attempt ++** Auth/assoc is not yet performed ++** Returns OK if there is no need to restart scan ++*/ ++int ++acx_s_complete_scan(acx_device_t *adev) ++{ ++ struct client *bss; ++ unsigned long flags; ++ u16 needed_cap; ++ int i; ++ int idx_found = -1; ++ int result = OK; ++ ++ FN_ENTER; ++ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ needed_cap = WF_MGMT_CAP_IBSS; /* 2, we require Ad-Hoc */ ++ break; ++ case ACX_MODE_2_STA: ++ needed_cap = WF_MGMT_CAP_ESS; /* 1, we require Managed */ ++ break; ++ default: ++ printk("acx: driver bug: mode=%d in complete_scan()\n", adev->mode); ++ dump_stack(); ++ goto end; ++ } ++ ++ acx_lock(adev, flags); ++ ++ /* TODO: sta_iterator hiding implementation would be nice here... */ ++ ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ bss = &adev->sta_list[i]; ++ if (!bss->used) continue; ++ ++ ++ log(L_ASSOC, "scan table: SSID=\"%s\" CH=%d SIR=%d SNR=%d\n", ++ bss->essid, bss->channel, bss->sir, bss->snr); ++ ++ if (!mac_is_bcast(adev->ap)) ++ if (!mac_is_equal(bss->bssid, adev->ap)) ++ continue; /* keep looking */ ++ ++ /* broken peer with no mode flags set? */ ++ if (unlikely(!(bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)))) { ++ printk("%s: strange peer "MACSTR" found with " ++ "neither ESS (AP) nor IBSS (Ad-Hoc) " ++ "capability - skipped\n", ++ adev->ndev->name, MAC(bss->address)); ++ continue; ++ } ++ log(L_ASSOC, "peer_cap 0x%04X, needed_cap 0x%04X\n", ++ bss->cap_info, needed_cap); ++ ++ /* does peer station support what we need? */ ++ if ((bss->cap_info & needed_cap) != needed_cap) ++ continue; /* keep looking */ ++ ++ /* strange peer with NO basic rates?! */ ++ if (unlikely(!bss->rate_bas)) { ++ printk("%s: strange peer "MACSTR" with empty rate set " ++ "- skipped\n", ++ adev->ndev->name, MAC(bss->address)); ++ continue; ++ } ++ ++ /* do we support all basic rates of this peer? */ ++ if ((bss->rate_bas & adev->rate_oper) != bss->rate_bas) { ++/* we probably need to have all rates as operational rates, ++ even in case of an 11M-only configuration */ ++#ifdef THIS_IS_TROUBLESOME ++ printk("%s: peer "MACSTR": incompatible basic rates " ++ "(AP requests 0x%04X, we have 0x%04X) " ++ "- skipped\n", ++ adev->ndev->name, MAC(bss->address), ++ bss->rate_bas, adev->rate_oper); ++ continue; ++#else ++ printk("%s: peer "MACSTR": incompatible basic rates " ++ "(AP requests 0x%04X, we have 0x%04X). " ++ "Considering anyway...\n", ++ adev->ndev->name, MAC(bss->address), ++ bss->rate_bas, adev->rate_oper); ++#endif ++ } ++ ++ if ( !(adev->reg_dom_chanmask & (1<<(bss->channel-1))) ) { ++ printk("%s: warning: peer "MACSTR" is on channel %d " ++ "outside of channel range of current " ++ "regulatory domain - couldn't join " ++ "even if other settings match. " ++ "You might want to adapt your config\n", ++ adev->ndev->name, MAC(bss->address), ++ bss->channel); ++ continue; /* keep looking */ ++ } ++ ++ if (!adev->essid_active || !strcmp(bss->essid, adev->essid)) { ++ log(L_ASSOC, ++ "found station with matching ESSID! ('%s' " ++ "station, '%s' config)\n", ++ bss->essid, ++ (adev->essid_active) ? adev->essid : "[any]"); ++ /* TODO: continue looking for peer with better SNR */ ++ bss->used = CLIENT_JOIN_CANDIDATE; ++ idx_found = i; ++ ++ /* stop searching if this station is ++ * on the current channel, otherwise ++ * keep looking for an even better match */ ++ if (bss->channel == adev->channel) ++ break; ++ } else ++ if (is_hidden_essid(bss->essid)) { ++ /* hmm, station with empty or single-space SSID: ++ * using hidden SSID broadcast? ++ */ ++ /* This behaviour is broken: which AP from zillion ++ ** of APs with hidden SSID you'd try? ++ ** We should use Probe requests to get Probe responses ++ ** and check for real SSID (are those never hidden?) */ ++ bss->used = CLIENT_JOIN_CANDIDATE; ++ if (idx_found == -1) ++ idx_found = i; ++ log(L_ASSOC, "found station with empty or " ++ "single-space (hidden) SSID, considering " ++ "for assoc attempt\n"); ++ /* ...and keep looking for better matches */ ++ } else { ++ log(L_ASSOC, "ESSID doesn't match! ('%s' " ++ "station, '%s' config)\n", ++ bss->essid, ++ (adev->essid_active) ? adev->essid : "[any]"); ++ } ++ } ++ ++ /* TODO: iterate thru join candidates instead */ ++ /* TODO: rescan if not associated within some timeout */ ++ if (idx_found != -1) { ++ char *essid_src; ++ size_t essid_len; ++ ++ bss = &adev->sta_list[idx_found]; ++ adev->ap_client = bss; ++ ++ if (is_hidden_essid(bss->essid)) { ++ /* if the ESSID of the station we found is empty ++ * (no broadcast), then use user-configured ESSID ++ * instead */ ++ essid_src = adev->essid; ++ essid_len = adev->essid_len; ++ } else { ++ essid_src = bss->essid; ++ essid_len = strlen(bss->essid); ++ } ++ ++ acx_update_capabilities(adev); ++ ++ memcpy(adev->essid_for_assoc, essid_src, essid_len); ++ adev->essid_for_assoc[essid_len] = '\0'; ++ adev->channel = bss->channel; ++ MAC_COPY(adev->bssid, bss->bssid); ++ ++ bss->rate_cfg = (bss->rate_cap & adev->rate_oper); ++ bss->rate_cur = 1 << lowest_bit(bss->rate_cfg); ++ bss->rate_100 = acx_rate111to100(bss->rate_cur); ++ ++ acxlog_mac(L_ASSOC, ++ "matching station found: ", adev->bssid, ", joining\n"); ++ ++ /* TODO: do we need to switch to the peer's channel first? */ ++ ++ if (ACX_MODE_0_ADHOC == adev->mode) { ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); ++ } else { ++ acx_l_transmit_authen1(adev); ++ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH); ++ } ++ } else { /* idx_found == -1 */ ++ /* uh oh, no station found in range */ ++ if (ACX_MODE_0_ADHOC == adev->mode) { ++ printk("%s: no matching station found in range, " ++ "generating our own IBSS instead\n", ++ adev->ndev->name); ++ /* we do it the HostAP way: */ ++ MAC_COPY(adev->bssid, adev->dev_addr); ++ adev->bssid[0] |= 0x02; /* 'local assigned addr' bit */ ++ /* add IBSS bit to our caps... */ ++ acx_update_capabilities(adev); ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); ++ /* In order to cmd_join be called below */ ++ idx_found = 0; ++ } else { ++ /* we shall scan again, AP can be ++ ** just temporarily powered off */ ++ log(L_ASSOC, ++ "no matching station found in range yet\n"); ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); ++ result = NOT_OK; ++ } ++ } ++ ++ acx_unlock(adev, flags); ++ ++ if (idx_found != -1) { ++ if (ACX_MODE_0_ADHOC == adev->mode) { ++ /* need to update channel in beacon template */ ++ SET_BIT(adev->set_mask, SET_TEMPLATES); ++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) ++ acx_s_update_card_settings(adev); ++ } ++ /* Inform firmware on our decision to start or join BSS */ ++ acx_s_cmd_join_bssid(adev, adev->bssid); ++ } ++ ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_s_read_fw ++** ++** Loads a firmware image ++** ++** Returns: ++** 0 unable to load file ++** pointer to firmware success ++*/ ++firmware_image_t* ++acx_s_read_fw(struct device *dev, const char *file, u32 *size) ++{ ++ firmware_image_t *res; ++ const struct firmware *fw_entry; ++ ++ res = NULL; ++ log(L_INIT, "requesting firmware image '%s'\n", file); ++ if (!request_firmware(&fw_entry, file, dev)) { ++ *size = 8; ++ if (fw_entry->size >= 8) ++ *size = 8 + le32_to_cpu(*(u32 *)(fw_entry->data + 4)); ++ if (fw_entry->size != *size) { ++ printk("acx: firmware size does not match " ++ "firmware header: %d != %d, " ++ "aborting fw upload\n", ++ (int) fw_entry->size, (int) *size); ++ goto release_ret; ++ } ++ res = vmalloc(*size); ++ if (!res) { ++ printk("acx: no memory for firmware " ++ "(%u bytes)\n", *size); ++ goto release_ret; ++ } ++ memcpy(res, fw_entry->data, fw_entry->size); ++release_ret: ++ release_firmware(fw_entry); ++ return res; ++ } ++ printk("acx: firmware image '%s' was not provided. " ++ "Check your hotplug scripts\n", file); ++ ++ /* checksum will be verified in write_fw, so don't bother here */ ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acx_s_set_wepkey ++*/ ++static void ++acx100_s_set_wepkey(acx_device_t *adev) ++{ ++ ie_dot11WEPDefaultKey_t dk; ++ int i; ++ ++ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) { ++ if (adev->wep_keys[i].size != 0) { ++ log(L_INIT, "setting WEP key: %d with " ++ "total size: %d\n", i, (int) adev->wep_keys[i].size); ++ dk.action = 1; ++ dk.keySize = adev->wep_keys[i].size; ++ dk.defaultKeyNum = i; ++ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize); ++ acx_s_configure(adev, &dk, ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE); ++ } ++ } ++} ++ ++static void ++acx111_s_set_wepkey(acx_device_t *adev) ++{ ++ acx111WEPDefaultKey_t dk; ++ int i; ++ ++ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) { ++ if (adev->wep_keys[i].size != 0) { ++ log(L_INIT, "setting WEP key: %d with " ++ "total size: %d\n", i, (int) adev->wep_keys[i].size); ++ memset(&dk, 0, sizeof(dk)); ++ dk.action = cpu_to_le16(1); /* "add key"; yes, that's a 16bit value */ ++ dk.keySize = adev->wep_keys[i].size; ++ ++ /* are these two lines necessary? */ ++ dk.type = 0; /* default WEP key */ ++ dk.index = 0; /* ignored when setting default key */ ++ ++ dk.defaultKeyNum = i; ++ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &dk, sizeof(dk)); ++ } ++ } ++} ++ ++static void ++acx_s_set_wepkey(acx_device_t *adev) ++{ ++ if (IS_ACX111(adev)) ++ acx111_s_set_wepkey(adev); ++ else ++ acx100_s_set_wepkey(adev); ++} ++ ++ ++/*********************************************************************** ++** acx100_s_init_wep ++** ++** FIXME: this should probably be moved into the new card settings ++** management, but since we're also modifying the memory map layout here ++** due to the WEP key space we want, we should take care... ++*/ ++static int ++acx100_s_init_wep(acx_device_t *adev) ++{ ++ acx100_ie_wep_options_t options; ++ ie_dot11WEPDefaultKeyID_t dk; ++ acx_ie_memmap_t pt; ++ int res = NOT_OK; ++ ++ FN_ENTER; ++ ++ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) { ++ goto fail; ++ } ++ ++ log(L_DEBUG, "CodeEnd:%X\n", pt.CodeEnd); ++ ++ pt.WEPCacheStart = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4); ++ pt.WEPCacheEnd = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4); ++ ++ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) { ++ goto fail; ++ } ++ ++ /* let's choose maximum setting: 4 default keys, plus 10 other keys: */ ++ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10); ++ options.WEPOption = 0x00; ++ ++ log(L_ASSOC, "%s: writing WEP options\n", __func__); ++ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS); ++ ++ acx100_s_set_wepkey(adev); ++ ++ if (adev->wep_keys[adev->wep_current_index].size != 0) { ++ log(L_ASSOC, "setting active default WEP key number: %d\n", ++ adev->wep_current_index); ++ dk.KeyID = adev->wep_current_index; ++ acx_s_configure(adev, &dk, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET); /* 0x1010 */ ++ } ++ /* FIXME!!! wep_key_struct is filled nowhere! But adev ++ * is initialized to 0, and we don't REALLY need those keys either */ ++/* for (i = 0; i < 10; i++) { ++ if (adev->wep_key_struct[i].len != 0) { ++ MAC_COPY(wep_mgmt.MacAddr, adev->wep_key_struct[i].addr); ++ wep_mgmt.KeySize = cpu_to_le16(adev->wep_key_struct[i].len); ++ memcpy(&wep_mgmt.Key, adev->wep_key_struct[i].key, le16_to_cpu(wep_mgmt.KeySize)); ++ wep_mgmt.Action = cpu_to_le16(1); ++ log(L_ASSOC, "writing WEP key %d (len %d)\n", i, le16_to_cpu(wep_mgmt.KeySize)); ++ if (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &wep_mgmt, sizeof(wep_mgmt))) { ++ adev->wep_key_struct[i].index = i; ++ } ++ } ++ } ++*/ ++ ++ /* now retrieve the updated WEPCacheEnd pointer... */ ++ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) { ++ printk("%s: ACX1xx_IE_MEMORY_MAP read #2 FAILED\n", ++ adev->ndev->name); ++ goto fail; ++ } ++ /* ...and tell it to start allocating templates at that location */ ++ /* (no endianness conversion needed) */ ++ pt.PacketTemplateStart = pt.WEPCacheEnd; ++ ++ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) { ++ printk("%s: ACX1xx_IE_MEMORY_MAP write #2 FAILED\n", ++ adev->ndev->name); ++ goto fail; ++ } ++ res = OK; ++ ++fail: ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++static int ++acx_s_init_max_template_generic(acx_device_t *adev, unsigned int len, unsigned int cmd) ++{ ++ int res; ++ union { ++ acx_template_nullframe_t null; ++ acx_template_beacon_t b; ++ acx_template_tim_t tim; ++ acx_template_probereq_t preq; ++ acx_template_proberesp_t presp; ++ } templ; ++ ++ memset(&templ, 0, len); ++ templ.null.size = cpu_to_le16(len - 2); ++ res = acx_s_issue_cmd(adev, cmd, &templ, len); ++ return res; ++} ++ ++static inline int ++acx_s_init_max_null_data_template(acx_device_t *adev) ++{ ++ return acx_s_init_max_template_generic( ++ adev, sizeof(acx_template_nullframe_t), ACX1xx_CMD_CONFIG_NULL_DATA ++ ); ++} ++ ++static inline int ++acx_s_init_max_beacon_template(acx_device_t *adev) ++{ ++ return acx_s_init_max_template_generic( ++ adev, sizeof(acx_template_beacon_t), ACX1xx_CMD_CONFIG_BEACON ++ ); ++} ++ ++static inline int ++acx_s_init_max_tim_template(acx_device_t *adev) ++{ ++ return acx_s_init_max_template_generic( ++ adev, sizeof(acx_template_tim_t), ACX1xx_CMD_CONFIG_TIM ++ ); ++} ++ ++static inline int ++acx_s_init_max_probe_response_template(acx_device_t *adev) ++{ ++ return acx_s_init_max_template_generic( ++ adev, sizeof(acx_template_proberesp_t), ACX1xx_CMD_CONFIG_PROBE_RESPONSE ++ ); ++} ++ ++static inline int ++acx_s_init_max_probe_request_template(acx_device_t *adev) ++{ ++ return acx_s_init_max_template_generic( ++ adev, sizeof(acx_template_probereq_t), ACX1xx_CMD_CONFIG_PROBE_REQUEST ++ ); ++} ++ ++/*********************************************************************** ++** acx_s_set_tim_template ++** ++** FIXME: In full blown driver we will regularly update partial virtual bitmap ++** by calling this function ++** (it can be done by irq handler on each DTIM irq or by timer...) ++ ++[802.11 7.3.2.6] TIM information element: ++- 1 EID ++- 1 Length ++1 1 DTIM Count ++ indicates how many beacons (including this) appear before next DTIM ++ (0=this one is a DTIM) ++2 1 DTIM Period ++ number of beacons between successive DTIMs ++ (0=reserved, 1=all TIMs are DTIMs, 2=every other, etc) ++3 1 Bitmap Control ++ bit0: Traffic Indicator bit associated with Assoc ID 0 (Bcast AID?) ++ set to 1 in TIM elements with a value of 0 in the DTIM Count field ++ when one or more broadcast or multicast frames are buffered at the AP. ++ bit1-7: Bitmap Offset (logically Bitmap_Offset = Bitmap_Control & 0xFE). ++4 n Partial Virtual Bitmap ++ Visible part of traffic-indication bitmap. ++ Full bitmap consists of 2008 bits (251 octets) such that bit number N ++ (0<=N<=2007) in the bitmap corresponds to bit number (N mod 8) ++ in octet number N/8 where the low-order bit of each octet is bit0, ++ and the high order bit is bit7. ++ Each set bit in virtual bitmap corresponds to traffic buffered by AP ++ for a specific station (with corresponding AID?). ++ Partial Virtual Bitmap shows a part of bitmap which has non-zero. ++ Bitmap Offset is a number of skipped zero octets (see above). ++ 'Missing' octets at the tail are also assumed to be zero. ++ Example: Length=6, Bitmap_Offset=2, Partial_Virtual_Bitmap=55 55 55 ++ This means that traffic-indication bitmap is: ++ 00000000 00000000 01010101 01010101 01010101 00000000 00000000... ++ (is bit0 in the map is always 0 and real value is in Bitmap Control bit0?) ++*/ ++static int ++acx_s_set_tim_template(acx_device_t *adev) ++{ ++/* For now, configure smallish test bitmap, all zero ("no pending data") */ ++ enum { bitmap_size = 5 }; ++ ++ acx_template_tim_t t; ++ int result; ++ ++ FN_ENTER; ++ ++ memset(&t, 0, sizeof(t)); ++ t.size = 5 + bitmap_size; /* eid+len+count+period+bmap_ctrl + bmap */ ++ t.tim_eid = WLAN_EID_TIM; ++ t.len = 3 + bitmap_size; /* count+period+bmap_ctrl + bmap */ ++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_TIM, &t, sizeof(t)); ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_fill_beacon_or_proberesp_template ++** ++** For frame format info, please see 802.11-1999.pdf item 7.2.3.9 and below!! ++** ++** NB: we use the fact that ++** struct acx_template_proberesp and struct acx_template_beacon are the same ++** (well, almost...) ++** ++** [802.11] Beacon's body consist of these IEs: ++** 1 Timestamp ++** 2 Beacon interval ++** 3 Capability information ++** 4 SSID ++** 5 Supported rates (up to 8 rates) ++** 6 FH Parameter Set (frequency-hopping PHYs only) ++** 7 DS Parameter Set (direct sequence PHYs only) ++** 8 CF Parameter Set (only if PCF is supported) ++** 9 IBSS Parameter Set (ad-hoc only) ++** ++** Beacon only: ++** 10 TIM (AP only) (see 802.11 7.3.2.6) ++** 11 Country Information (802.11d) ++** 12 FH Parameters (802.11d) ++** 13 FH Pattern Table (802.11d) ++** ... (?!! did not yet find relevant PDF file... --vda) ++** 19 ERP Information (extended rate PHYs) ++** 20 Extended Supported Rates (if more than 8 rates) ++** ++** Proberesp only: ++** 10 Country information (802.11d) ++** 11 FH Parameters (802.11d) ++** 12 FH Pattern Table (802.11d) ++** 13-n Requested information elements (802.11d) ++** ???? ++** 18 ERP Information (extended rate PHYs) ++** 19 Extended Supported Rates (if more than 8 rates) ++*/ ++static int ++acx_fill_beacon_or_proberesp_template(acx_device_t *adev, ++ struct acx_template_beacon *templ, ++ u16 fc /* in host order! */) ++{ ++ int len; ++ u8 *p; ++ ++ FN_ENTER; ++ ++ memset(templ, 0, sizeof(*templ)); ++ MAC_BCAST(templ->da); ++ MAC_COPY(templ->sa, adev->dev_addr); ++ MAC_COPY(templ->bssid, adev->bssid); ++ ++ templ->beacon_interval = cpu_to_le16(adev->beacon_interval); ++ acx_update_capabilities(adev); ++ templ->cap = cpu_to_le16(adev->capabilities); ++ ++ p = templ->variable; ++ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid); ++ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported); ++ p = wlan_fill_ie_ds_parms(p, adev->channel); ++ /* NB: should go AFTER tim, but acx seem to keep tim last always */ ++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported); ++ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ /* ATIM window */ ++ p = wlan_fill_ie_ibss_parms(p, 0); break; ++ case ACX_MODE_3_AP: ++ /* TIM IE is set up as separate template */ ++ break; ++ } ++ ++ len = p - (u8*)templ; ++ templ->fc = cpu_to_le16(WF_FTYPE_MGMT | fc); ++ /* - 2: do not count 'u16 size' field */ ++ templ->size = cpu_to_le16(len - 2); ++ ++ FN_EXIT1(len); ++ return len; ++} ++ ++ ++#if POWER_SAVE_80211 ++/*********************************************************************** ++** acx_s_set_null_data_template ++*/ ++static int ++acx_s_set_null_data_template(acx_device_t *adev) ++{ ++ struct acx_template_nullframe b; ++ int result; ++ ++ FN_ENTER; ++ ++ /* memset(&b, 0, sizeof(b)); not needed, setting all members */ ++ ++ b.size = cpu_to_le16(sizeof(b) - 2); ++ b.hdr.fc = WF_FTYPE_MGMTi | WF_FSTYPE_NULLi; ++ b.hdr.dur = 0; ++ MAC_BCAST(b.hdr.a1); ++ MAC_COPY(b.hdr.a2, adev->dev_addr); ++ MAC_COPY(b.hdr.a3, adev->bssid); ++ b.hdr.seq = 0; ++ ++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_NULL_DATA, &b, sizeof(b)); ++ ++ FN_EXIT1(result); ++ return result; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_s_set_beacon_template ++*/ ++static int ++acx_s_set_beacon_template(acx_device_t *adev) ++{ ++ struct acx_template_beacon bcn; ++ int len, result; ++ ++ FN_ENTER; ++ ++ len = acx_fill_beacon_or_proberesp_template(adev, &bcn, WF_FSTYPE_BEACON); ++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_BEACON, &bcn, len); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_s_set_probe_response_template ++*/ ++static int ++acx_s_set_probe_response_template(acx_device_t *adev) ++{ ++ struct acx_template_proberesp pr; ++ int len, result; ++ ++ FN_ENTER; ++ ++ len = acx_fill_beacon_or_proberesp_template(adev, &pr, WF_FSTYPE_PROBERESP); ++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_RESPONSE, &pr, len); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_s_init_packet_templates() ++** ++** NOTE: order is very important here, to have a correct memory layout! ++** init templates: max Probe Request (station mode), max NULL data, ++** max Beacon, max TIM, max Probe Response. ++*/ ++static int ++acx_s_init_packet_templates(acx_device_t *adev) ++{ ++ acx_ie_memmap_t mm; /* ACX100 only */ ++ int result = NOT_OK; ++ ++ FN_ENTER; ++ ++ log(L_DEBUG|L_INIT, "initializing max packet templates\n"); ++ ++ if (OK != acx_s_init_max_probe_request_template(adev)) ++ goto failed; ++ ++ if (OK != acx_s_init_max_null_data_template(adev)) ++ goto failed; ++ ++ if (OK != acx_s_init_max_beacon_template(adev)) ++ goto failed; ++ ++ if (OK != acx_s_init_max_tim_template(adev)) ++ goto failed; ++ ++ if (OK != acx_s_init_max_probe_response_template(adev)) ++ goto failed; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111 doesn't need the memory map magic below, ++ * and the other templates will be set later (acx_start) */ ++ result = OK; ++ goto success; ++ } ++ ++ /* ACX100 will have its TIM template set, ++ * and we also need to update the memory map */ ++ ++ if (OK != acx_s_set_tim_template(adev)) ++ goto failed_acx100; ++ ++ log(L_DEBUG, "sizeof(memmap)=%d bytes\n", (int)sizeof(mm)); ++ ++ if (OK != acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP)) ++ goto failed_acx100; ++ ++ mm.QueueStart = cpu_to_le32(le32_to_cpu(mm.PacketTemplateEnd) + 4); ++ if (OK != acx_s_configure(adev, &mm, ACX1xx_IE_MEMORY_MAP)) ++ goto failed_acx100; ++ ++ result = OK; ++ goto success; ++ ++failed_acx100: ++ log(L_DEBUG|L_INIT, ++ /* "cb=0x%X\n" */ ++ "ACXMemoryMap:\n" ++ ".CodeStart=0x%X\n" ++ ".CodeEnd=0x%X\n" ++ ".WEPCacheStart=0x%X\n" ++ ".WEPCacheEnd=0x%X\n" ++ ".PacketTemplateStart=0x%X\n" ++ ".PacketTemplateEnd=0x%X\n", ++ /* len, */ ++ le32_to_cpu(mm.CodeStart), ++ le32_to_cpu(mm.CodeEnd), ++ le32_to_cpu(mm.WEPCacheStart), ++ le32_to_cpu(mm.WEPCacheEnd), ++ le32_to_cpu(mm.PacketTemplateStart), ++ le32_to_cpu(mm.PacketTemplateEnd)); ++ ++failed: ++ printk("%s: %s() FAILED\n", adev->ndev->name, __func__); ++ ++success: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_s_set_probe_request_template(acx_device_t *adev) ++{ ++ struct acx_template_probereq probereq; ++ char *p; ++ int res; ++ int frame_len; ++ ++ FN_ENTER; ++ ++ memset(&probereq, 0, sizeof(probereq)); ++ ++ probereq.fc = WF_FTYPE_MGMTi | WF_FSTYPE_PROBEREQi; ++ MAC_BCAST(probereq.da); ++ MAC_COPY(probereq.sa, adev->dev_addr); ++ MAC_BCAST(probereq.bssid); ++ ++ p = probereq.variable; ++ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid); ++ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported); ++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported); ++ frame_len = p - (char*)&probereq; ++ probereq.size = cpu_to_le16(frame_len - 2); ++ ++ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_REQUEST, &probereq, frame_len); ++ FN_EXIT0; ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acx_s_init_mac ++*/ ++int ++acx_s_init_mac(acx_device_t *adev) ++{ ++ int result = NOT_OK; ++ ++ FN_ENTER; ++ ++ if (IS_ACX111(adev)) { ++ adev->ie_len = acx111_ie_len; ++ adev->ie_len_dot11 = acx111_ie_len_dot11; ++ } else { ++ adev->ie_len = acx100_ie_len; ++ adev->ie_len_dot11 = acx100_ie_len_dot11; ++ } ++ ++#if defined (ACX_MEM) ++ adev->memblocksize = 256; /* 256 is default */ ++ /* try to load radio for both ACX100 and ACX111, since both ++ * chips have at least some firmware versions making use of an ++ * external radio module */ ++ acxmem_s_upload_radio(adev); ++#else ++ if (IS_PCI(adev)) { ++ adev->memblocksize = 256; /* 256 is default */ ++ /* try to load radio for both ACX100 and ACX111, since both ++ * chips have at least some firmware versions making use of an ++ * external radio module */ ++ acxpci_s_upload_radio(adev); ++ } else { ++ adev->memblocksize = 128; ++ } ++#endif ++ ++ if (IS_ACX111(adev)) { ++ /* for ACX111, the order is different from ACX100 ++ 1. init packet templates ++ 2. create station context and create dma regions ++ 3. init wep default keys ++ */ ++ if (OK != acx_s_init_packet_templates(adev)) ++ goto fail; ++ if (OK != acx111_s_create_dma_regions(adev)) { ++ printk("%s: acx111_create_dma_regions FAILED\n", ++ adev->ndev->name); ++ goto fail; ++ } ++ } else { ++ if (OK != acx100_s_init_wep(adev)) ++ goto fail; ++ if (OK != acx_s_init_packet_templates(adev)) ++ goto fail; ++ if (OK != acx100_s_create_dma_regions(adev)) { ++ printk("%s: acx100_create_dma_regions FAILED\n", ++ adev->ndev->name); ++ goto fail; ++ } ++ } ++ ++ MAC_COPY(adev->ndev->dev_addr, adev->dev_addr); ++ result = OK; ++ ++fail: ++ if (result) ++ printk("acx: init_mac() FAILED\n"); ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++void ++acx_s_set_sane_reg_domain(acx_device_t *adev, int do_set) ++{ ++ unsigned mask; ++ ++ unsigned int i; ++ ++ for (i = 0; i < sizeof(acx_reg_domain_ids); i++) ++ if (acx_reg_domain_ids[i] == adev->reg_dom_id) ++ break; ++ ++ if (sizeof(acx_reg_domain_ids) == i) { ++ log(L_INIT, "Invalid or unsupported regulatory domain" ++ " 0x%02X specified, falling back to FCC (USA)!" ++ " Please report if this sounds fishy!\n", ++ adev->reg_dom_id); ++ i = 0; ++ adev->reg_dom_id = acx_reg_domain_ids[i]; ++ ++ /* since there was a mismatch, we need to force updating */ ++ do_set = 1; ++ } ++ ++ if (do_set) { ++ acx_ie_generic_t dom; ++ dom.m.bytes[0] = adev->reg_dom_id; ++ acx_s_configure(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN); ++ } ++ ++ adev->reg_dom_chanmask = reg_domain_channel_masks[i]; ++ ++ mask = (1 << (adev->channel - 1)); ++ if (!(adev->reg_dom_chanmask & mask)) { ++ /* hmm, need to adjust our channel to reside within domain */ ++ mask = 1; ++ for (i = 1; i <= 14; i++) { ++ if (adev->reg_dom_chanmask & mask) { ++ printk("%s: adjusting selected channel from %d " ++ "to %d due to new regulatory domain\n", ++ adev->ndev->name, adev->channel, i); ++ adev->channel = i; ++ break; ++ } ++ mask <<= 1; ++ } ++ } ++} ++ ++ ++#if POWER_SAVE_80211 ++static void ++acx_s_update_80211_powersave_mode(acx_device_t *adev) ++{ ++ /* merge both structs in a union to be able to have common code */ ++ union { ++ acx111_ie_powersave_t acx111; ++ acx100_ie_powersave_t acx100; ++ } pm; ++ ++ /* change 802.11 power save mode settings */ ++ log(L_INIT, "updating 802.11 power save mode settings: " ++ "wakeup_cfg 0x%02X, listen interval %u, " ++ "options 0x%02X, hangover period %u, " ++ "enhanced_ps_transition_time %u\n", ++ adev->ps_wakeup_cfg, adev->ps_listen_interval, ++ adev->ps_options, adev->ps_hangover_period, ++ adev->ps_enhanced_transition_time); ++ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT); ++ log(L_INIT, "Previous PS mode settings: wakeup_cfg 0x%02X, " ++ "listen interval %u, options 0x%02X, " ++ "hangover period %u, " ++ "enhanced_ps_transition_time %u, beacon_rx_time %u\n", ++ pm.acx111.wakeup_cfg, ++ pm.acx111.listen_interval, ++ pm.acx111.options, ++ pm.acx111.hangover_period, ++ IS_ACX111(adev) ? ++ pm.acx111.enhanced_ps_transition_time ++ : pm.acx100.enhanced_ps_transition_time, ++ IS_ACX111(adev) ? ++ pm.acx111.beacon_rx_time ++ : (u32)-1 ++ ); ++ pm.acx111.wakeup_cfg = adev->ps_wakeup_cfg; ++ pm.acx111.listen_interval = adev->ps_listen_interval; ++ pm.acx111.options = adev->ps_options; ++ pm.acx111.hangover_period = adev->ps_hangover_period; ++ if (IS_ACX111(adev)) { ++ pm.acx111.beacon_rx_time = cpu_to_le32(adev->ps_beacon_rx_time); ++ pm.acx111.enhanced_ps_transition_time = cpu_to_le32(adev->ps_enhanced_transition_time); ++ } else { ++ pm.acx100.enhanced_ps_transition_time = cpu_to_le16(adev->ps_enhanced_transition_time); ++ } ++ acx_s_configure(adev, &pm, ACX1xx_IE_POWER_MGMT); ++ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT); ++ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg); ++ acx_s_msleep(40); ++ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT); ++ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg); ++ log(L_INIT, "power save mode change %s\n", ++ (pm.acx111.wakeup_cfg & PS_CFG_PENDING) ? "FAILED" : "was successful"); ++ /* FIXME: maybe verify via PS_CFG_PENDING bit here ++ * that power save mode change was successful. */ ++ /* FIXME: we shouldn't trigger a scan immediately after ++ * fiddling with power save mode (since the firmware is sending ++ * a NULL frame then). */ ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_s_update_card_settings ++** ++** Applies accumulated changes in various adev->xxxx members ++** Called by ioctl commit handler, acx_start, acx_set_defaults, ++** acx_s_after_interrupt_task (if IRQ_CMD_UPDATE_CARD_CFG), ++*/ ++static void ++acx111_s_sens_radio_16_17(acx_device_t *adev) ++{ ++ u32 feature1, feature2; ++ ++ if ((adev->sensitivity < 1) || (adev->sensitivity > 3)) { ++ printk("%s: invalid sensitivity setting (1..3), " ++ "setting to 1\n", adev->ndev->name); ++ adev->sensitivity = 1; ++ } ++ acx111_s_get_feature_config(adev, &feature1, &feature2); ++ CLEAR_BIT(feature1, FEATURE1_LOW_RX|FEATURE1_EXTRA_LOW_RX); ++ if (adev->sensitivity > 1) ++ SET_BIT(feature1, FEATURE1_LOW_RX); ++ if (adev->sensitivity > 2) ++ SET_BIT(feature1, FEATURE1_EXTRA_LOW_RX); ++ acx111_s_feature_set(adev, feature1, feature2); ++} ++ ++ ++void ++acx_s_update_card_settings(acx_device_t *adev) ++{ ++ unsigned long flags; ++ unsigned int start_scan = 0; ++ int i; ++ ++ FN_ENTER; ++ ++ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X\n", ++ adev->get_mask, adev->set_mask); ++ ++ /* Track dependencies betweed various settings */ ++ ++ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_WEP)) { ++ log(L_INIT, "important setting has been changed. " ++ "Need to update packet templates, too\n"); ++ SET_BIT(adev->set_mask, SET_TEMPLATES); ++ } ++ if (adev->set_mask & GETSET_CHANNEL) { ++ /* This will actually tune RX/TX to the channel */ ++ SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX); ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_3_AP: ++ /* Beacons contain channel# - update them */ ++ SET_BIT(adev->set_mask, SET_TEMPLATES); ++ } ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ start_scan = 1; ++ } ++ } ++ ++ /* Apply settings */ ++ ++#ifdef WHY_SHOULD_WE_BOTHER /* imagine we were just powered off */ ++ /* send a disassoc request in case it's required */ ++ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_CHANNEL|GETSET_WEP)) { ++ if (ACX_MODE_2_STA == adev->mode) { ++ if (ACX_STATUS_4_ASSOCIATED == adev->status) { ++ log(L_ASSOC, "we were ASSOCIATED - " ++ "sending disassoc request\n"); ++ acx_lock(adev, flags); ++ acx_l_transmit_disassoc(adev, NULL); ++ /* FIXME: deauth? */ ++ acx_unlock(adev, flags); ++ } ++ /* need to reset some other stuff as well */ ++ log(L_DEBUG, "resetting bssid\n"); ++ MAC_ZERO(adev->bssid); ++ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST); ++ start_scan = 1; ++ } ++ } ++#endif ++ ++ if (adev->get_mask & GETSET_STATION_ID) { ++ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN]; ++ const u8 *paddr; ++ ++ acx_s_interrogate(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID); ++ paddr = &stationID[4]; ++ for (i = 0; i < ETH_ALEN; i++) { ++ /* we copy the MAC address (reversed in ++ * the card) to the netdevice's MAC ++ * address, and on ifup it will be ++ * copied into iwadev->dev_addr */ ++ adev->ndev->dev_addr[ETH_ALEN - 1 - i] = paddr[i]; ++ } ++ CLEAR_BIT(adev->get_mask, GETSET_STATION_ID); ++ } ++ ++ if (adev->get_mask & GETSET_SENSITIVITY) { ++ if ((RADIO_RFMD_11 == adev->radio_type) ++ || (RADIO_MAXIM_0D == adev->radio_type) ++ || (RADIO_RALINK_15 == adev->radio_type)) { ++ acx_s_read_phy_reg(adev, 0x30, &adev->sensitivity); ++ } else { ++ log(L_INIT, "don't know how to get sensitivity " ++ "for radio type 0x%02X\n", adev->radio_type); ++ adev->sensitivity = 0; ++ } ++ log(L_INIT, "got sensitivity value %u\n", adev->sensitivity); ++ ++ CLEAR_BIT(adev->get_mask, GETSET_SENSITIVITY); ++ } ++ ++ if (adev->get_mask & GETSET_ANTENNA) { ++ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN]; ++ ++ memset(antenna, 0, sizeof(antenna)); ++ acx_s_interrogate(adev, antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA); ++ adev->antenna = antenna[4]; ++ log(L_INIT, "got antenna value 0x%02X\n", adev->antenna); ++ CLEAR_BIT(adev->get_mask, GETSET_ANTENNA); ++ } ++ ++ if (adev->get_mask & GETSET_ED_THRESH) { ++ if (IS_ACX100(adev)) { ++ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN]; ++ ++ memset(ed_threshold, 0, sizeof(ed_threshold)); ++ acx_s_interrogate(adev, ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD); ++ adev->ed_threshold = ed_threshold[4]; ++ } else { ++ log(L_INIT, "acx111 doesn't support ED\n"); ++ adev->ed_threshold = 0; ++ } ++ log(L_INIT, "got Energy Detect (ED) threshold %u\n", adev->ed_threshold); ++ CLEAR_BIT(adev->get_mask, GETSET_ED_THRESH); ++ } ++ ++ if (adev->get_mask & GETSET_CCA) { ++ if (IS_ACX100(adev)) { ++ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN]; ++ ++ memset(cca, 0, sizeof(adev->cca)); ++ acx_s_interrogate(adev, cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE); ++ adev->cca = cca[4]; ++ } else { ++ log(L_INIT, "acx111 doesn't support CCA\n"); ++ adev->cca = 0; ++ } ++ log(L_INIT, "got Channel Clear Assessment (CCA) value %u\n", adev->cca); ++ CLEAR_BIT(adev->get_mask, GETSET_CCA); ++ } ++ ++ if (adev->get_mask & GETSET_REG_DOMAIN) { ++ acx_ie_generic_t dom; ++ ++ acx_s_interrogate(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN); ++ adev->reg_dom_id = dom.m.bytes[0]; ++ acx_s_set_sane_reg_domain(adev, 0); ++ log(L_INIT, "got regulatory domain 0x%02X\n", adev->reg_dom_id); ++ CLEAR_BIT(adev->get_mask, GETSET_REG_DOMAIN); ++ } ++ ++ if (adev->set_mask & GETSET_STATION_ID) { ++ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN]; ++ u8 *paddr; ++ ++ paddr = &stationID[4]; ++ memcpy(adev->dev_addr, adev->ndev->dev_addr, ETH_ALEN); ++ for (i = 0; i < ETH_ALEN; i++) { ++ /* copy the MAC address we obtained when we noticed ++ * that the ethernet iface's MAC changed ++ * to the card (reversed in ++ * the card!) */ ++ paddr[i] = adev->dev_addr[ETH_ALEN - 1 - i]; ++ } ++ acx_s_configure(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID); ++ CLEAR_BIT(adev->set_mask, GETSET_STATION_ID); ++ } ++ ++ if (adev->set_mask & SET_TEMPLATES) { ++ log(L_INIT, "updating packet templates\n"); ++ switch (adev->mode) { ++ case ACX_MODE_2_STA: ++ acx_s_set_probe_request_template(adev); ++#if POWER_SAVE_80211 ++ acx_s_set_null_data_template(adev); ++#endif ++ break; ++ case ACX_MODE_0_ADHOC: ++ acx_s_set_probe_request_template(adev); ++#if POWER_SAVE_80211 ++ /* maybe power save functionality is somehow possible ++ * for Ad-Hoc mode, too... FIXME: verify it somehow? firmware debug fields? */ ++ acx_s_set_null_data_template(adev); ++#endif ++ /* fall through */ ++ case ACX_MODE_3_AP: ++ acx_s_set_beacon_template(adev); ++ acx_s_set_tim_template(adev); ++ /* BTW acx111 firmware would not send probe responses ++ ** if probe request does not have all basic rates flagged ++ ** by 0x80! Thus firmware does not conform to 802.11, ++ ** it should ignore 0x80 bit in ratevector from STA. ++ ** We can 'fix' it by not using this template and ++ ** sending probe responses by hand. TODO --vda */ ++ acx_s_set_probe_response_template(adev); ++ } ++ /* Needed if generated frames are to be emitted at different tx rate now */ ++ log(L_IRQ, "redoing cmd_join_bssid() after template cfg\n"); ++ acx_s_cmd_join_bssid(adev, adev->bssid); ++ CLEAR_BIT(adev->set_mask, SET_TEMPLATES); ++ } ++ if (adev->set_mask & SET_STA_LIST) { ++ acx_lock(adev, flags); ++ acx_l_sta_list_init(adev); ++ CLEAR_BIT(adev->set_mask, SET_STA_LIST); ++ acx_unlock(adev, flags); ++ } ++ if (adev->set_mask & SET_RATE_FALLBACK) { ++ u8 rate[4 + ACX1xx_IE_RATE_FALLBACK_LEN]; ++ ++ /* configure to not do fallbacks when not in auto rate mode */ ++ rate[4] = (adev->rate_auto) ? /* adev->txrate_fallback_retries */ 1 : 0; ++ log(L_INIT, "updating Tx fallback to %u retries\n", rate[4]); ++ acx_s_configure(adev, &rate, ACX1xx_IE_RATE_FALLBACK); ++ CLEAR_BIT(adev->set_mask, SET_RATE_FALLBACK); ++ } ++ if (adev->set_mask & GETSET_TXPOWER) { ++ log(L_INIT, "updating transmit power: %u dBm\n", ++ adev->tx_level_dbm); ++ acx_s_set_tx_level(adev, adev->tx_level_dbm); ++ CLEAR_BIT(adev->set_mask, GETSET_TXPOWER); ++ } ++ ++ if (adev->set_mask & GETSET_SENSITIVITY) { ++ log(L_INIT, "updating sensitivity value: %u\n", ++ adev->sensitivity); ++ switch (adev->radio_type) { ++ case RADIO_RFMD_11: ++ case RADIO_MAXIM_0D: ++ case RADIO_RALINK_15: ++ acx_s_write_phy_reg(adev, 0x30, adev->sensitivity); ++ break; ++ case RADIO_RADIA_16: ++ case RADIO_UNKNOWN_17: ++ acx111_s_sens_radio_16_17(adev); ++ break; ++ default: ++ log(L_INIT, "don't know how to modify sensitivity " ++ "for radio type 0x%02X\n", adev->radio_type); ++ } ++ CLEAR_BIT(adev->set_mask, GETSET_SENSITIVITY); ++ } ++ ++ if (adev->set_mask & GETSET_ANTENNA) { ++ /* antenna */ ++ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN]; ++ ++ memset(antenna, 0, sizeof(antenna)); ++ antenna[4] = adev->antenna; ++ log(L_INIT, "updating antenna value: 0x%02X\n", ++ adev->antenna); ++ acx_s_configure(adev, &antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA); ++ CLEAR_BIT(adev->set_mask, GETSET_ANTENNA); ++ } ++ ++ if (adev->set_mask & GETSET_ED_THRESH) { ++ /* ed_threshold */ ++ log(L_INIT, "updating Energy Detect (ED) threshold: %u\n", ++ adev->ed_threshold); ++ if (IS_ACX100(adev)) { ++ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN]; ++ ++ memset(ed_threshold, 0, sizeof(ed_threshold)); ++ ed_threshold[4] = adev->ed_threshold; ++ acx_s_configure(adev, &ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD); ++ } ++ else ++ log(L_INIT, "acx111 doesn't support ED!\n"); ++ CLEAR_BIT(adev->set_mask, GETSET_ED_THRESH); ++ } ++ ++ if (adev->set_mask & GETSET_CCA) { ++ /* CCA value */ ++ log(L_INIT, "updating Channel Clear Assessment " ++ "(CCA) value: 0x%02X\n", adev->cca); ++ if (IS_ACX100(adev)) { ++ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN]; ++ ++ memset(cca, 0, sizeof(cca)); ++ cca[4] = adev->cca; ++ acx_s_configure(adev, &cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE); ++ } ++ else ++ log(L_INIT, "acx111 doesn't support CCA!\n"); ++ CLEAR_BIT(adev->set_mask, GETSET_CCA); ++ } ++ ++ if (adev->set_mask & GETSET_LED_POWER) { ++ /* Enable Tx */ ++ log(L_INIT, "updating power LED status: %u\n", adev->led_power); ++ ++ acx_lock(adev, flags); ++#if defined (ACX_MEM) ++ acxmem_l_power_led(adev, adev->led_power); ++#else ++ if (IS_PCI(adev)) ++ acxpci_l_power_led(adev, adev->led_power); ++#endif ++ CLEAR_BIT(adev->set_mask, GETSET_LED_POWER); ++ acx_unlock(adev, flags); ++ } ++ ++ if (adev->set_mask & GETSET_POWER_80211) { ++#if POWER_SAVE_80211 ++ acx_s_update_80211_powersave_mode(adev); ++#endif ++ CLEAR_BIT(adev->set_mask, GETSET_POWER_80211); ++ } ++ ++ if (adev->set_mask & GETSET_CHANNEL) { ++ /* channel */ ++ log(L_INIT, "updating channel to: %u\n", adev->channel); ++ CLEAR_BIT(adev->set_mask, GETSET_CHANNEL); ++ } ++ ++ if (adev->set_mask & GETSET_TX) { ++ /* set Tx */ ++ log(L_INIT, "updating: %s Tx\n", ++ adev->tx_disabled ? "disable" : "enable"); ++ if (adev->tx_disabled) ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0); ++ else ++ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1); ++ CLEAR_BIT(adev->set_mask, GETSET_TX); ++ } ++ ++ if (adev->set_mask & GETSET_RX) { ++ /* Enable Rx */ ++ log(L_INIT, "updating: enable Rx on channel: %u\n", ++ adev->channel); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1); ++ CLEAR_BIT(adev->set_mask, GETSET_RX); ++ } ++ ++ if (adev->set_mask & GETSET_RETRY) { ++ u8 short_retry[4 + ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN]; ++ u8 long_retry[4 + ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN]; ++ ++ log(L_INIT, "updating short retry limit: %u, long retry limit: %u\n", ++ adev->short_retry, adev->long_retry); ++ short_retry[0x4] = adev->short_retry; ++ long_retry[0x4] = adev->long_retry; ++ acx_s_configure(adev, &short_retry, ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT); ++ acx_s_configure(adev, &long_retry, ACX1xx_IE_DOT11_LONG_RETRY_LIMIT); ++ CLEAR_BIT(adev->set_mask, GETSET_RETRY); ++ } ++ ++ if (adev->set_mask & SET_MSDU_LIFETIME) { ++ u8 xmt_msdu_lifetime[4 + ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN]; ++ ++ log(L_INIT, "updating tx MSDU lifetime: %u\n", ++ adev->msdu_lifetime); ++ *(u32 *)&xmt_msdu_lifetime[4] = cpu_to_le32((u32)adev->msdu_lifetime); ++ acx_s_configure(adev, &xmt_msdu_lifetime, ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME); ++ CLEAR_BIT(adev->set_mask, SET_MSDU_LIFETIME); ++ } ++ ++ if (adev->set_mask & GETSET_REG_DOMAIN) { ++ log(L_INIT, "updating regulatory domain: 0x%02X\n", ++ adev->reg_dom_id); ++ acx_s_set_sane_reg_domain(adev, 1); ++ CLEAR_BIT(adev->set_mask, GETSET_REG_DOMAIN); ++ } ++ ++ if (adev->set_mask & GETSET_MODE) { ++ adev->ndev->type = (adev->mode == ACX_MODE_MONITOR) ? ++ adev->monitor_type : ARPHRD_ETHER; ++ ++ switch (adev->mode) { ++ case ACX_MODE_3_AP: ++ ++ acx_lock(adev, flags); ++ acx_l_sta_list_init(adev); ++ adev->aid = 0; ++ adev->ap_client = NULL; ++ MAC_COPY(adev->bssid, adev->dev_addr); ++ /* this basically says "we're connected" */ ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); ++ acx_unlock(adev, flags); ++ ++ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER); ++ /* start sending beacons */ ++ acx_s_cmd_join_bssid(adev, adev->bssid); ++ break; ++ case ACX_MODE_MONITOR: ++ acx111_s_feature_on(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER); ++ /* this stops beacons */ ++ acx_s_cmd_join_bssid(adev, adev->bssid); ++ /* this basically says "we're connected" */ ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); ++ SET_BIT(adev->set_mask, SET_RXCONFIG|SET_WEP_OPTIONS); ++ break; ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER); ++ ++ acx_lock(adev, flags); ++ adev->aid = 0; ++ adev->ap_client = NULL; ++ acx_unlock(adev, flags); ++ ++ /* we want to start looking for peer or AP */ ++ start_scan = 1; ++ break; ++ case ACX_MODE_OFF: ++ /* TODO: disable RX/TX, stop any scanning activity etc: */ ++ /* adev->tx_disabled = 1; */ ++ /* SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX); */ ++ ++ /* This stops beacons (invalid macmode...) */ ++ acx_s_cmd_join_bssid(adev, adev->bssid); ++ acx_set_status(adev, ACX_STATUS_0_STOPPED); ++ break; ++ } ++ CLEAR_BIT(adev->set_mask, GETSET_MODE); ++ } ++ ++ if (adev->set_mask & SET_RXCONFIG) { ++ acx_s_initialize_rx_config(adev); ++ CLEAR_BIT(adev->set_mask, SET_RXCONFIG); ++ } ++ ++ if (adev->set_mask & GETSET_RESCAN) { ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ start_scan = 1; ++ break; ++ } ++ CLEAR_BIT(adev->set_mask, GETSET_RESCAN); ++ } ++ ++ if (adev->set_mask & GETSET_WEP) { ++ /* encode */ ++ ++ ie_dot11WEPDefaultKeyID_t dkey; ++#ifdef DEBUG_WEP ++ struct { ++ u16 type; ++ u16 len; ++ u8 val; ++ } ACX_PACKED keyindic; ++#endif ++ log(L_INIT, "updating WEP key settings\n"); ++ ++ acx_s_set_wepkey(adev); ++ ++ dkey.KeyID = adev->wep_current_index; ++ log(L_INIT, "setting WEP key %u as default\n", dkey.KeyID); ++ acx_s_configure(adev, &dkey, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET); ++#ifdef DEBUG_WEP ++ keyindic.val = 3; ++ acx_s_configure(adev, &keyindic, ACX111_IE_KEY_CHOOSE); ++#endif ++ start_scan = 1; ++ CLEAR_BIT(adev->set_mask, GETSET_WEP); ++ } ++ ++ if (adev->set_mask & SET_WEP_OPTIONS) { ++ acx100_ie_wep_options_t options; ++ if (IS_ACX111(adev)) { ++ log(L_DEBUG, "setting WEP Options for acx111 is not supported\n"); ++ } else { ++ log(L_INIT, "setting WEP Options\n"); ++ acx100_s_init_wep(adev); ++#if 0 ++ /* let's choose maximum setting: 4 default keys, ++ * plus 10 other keys: */ ++ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10); ++ /* don't decrypt default key only, ++ * don't override decryption: */ ++ options.WEPOption = 0; ++ if (adev->mode == ACX_MODE_MONITOR) { ++ /* don't decrypt default key only, ++ * override decryption mechanism: */ ++ options.WEPOption = 2; ++ } ++ ++ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS); ++#endif ++ } ++ CLEAR_BIT(adev->set_mask, SET_WEP_OPTIONS); ++ } ++ ++ /* Rescan was requested */ ++ if (start_scan) { ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ /* We can avoid clearing list if join code ++ ** will be a bit more clever about not picking ++ ** 'bad' AP over and over again */ ++ acx_lock(adev, flags); ++ adev->ap_client = NULL; ++ acx_l_sta_list_init(adev); ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); ++ acx_unlock(adev, flags); ++ ++ acx_s_cmd_start_scan(adev); ++ } ++ } ++ ++ /* debug, rate, and nick don't need any handling */ ++ /* what about sniffing mode?? */ ++ ++ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X - after update\n", ++ adev->get_mask, adev->set_mask); ++ ++/* end: */ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_e_after_interrupt_task ++*/ ++static int ++acx_s_recalib_radio(acx_device_t *adev) ++{ ++ if (IS_ACX111(adev)) { ++ acx111_cmd_radiocalib_t cal; ++ ++ printk("%s: recalibrating radio\n", adev->ndev->name); ++ /* automatic recalibration, choose all methods: */ ++ cal.methods = cpu_to_le32(0x8000000f); ++ /* automatic recalibration every 60 seconds (value in TUs) ++ * I wonder what the firmware default here is? */ ++ cal.interval = cpu_to_le32(58594); ++ return acx_s_issue_cmd_timeo(adev, ACX111_CMD_RADIOCALIB, ++ &cal, sizeof(cal), CMD_TIMEOUT_MS(100)); ++ } else { ++ /* On ACX100, we need to recalibrate the radio ++ * by issuing a GETSET_TX|GETSET_RX */ ++ if (/* (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0)) && ++ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0)) && */ ++ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1)) && ++ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1)) ) ++ return OK; ++ return NOT_OK; ++ } ++} ++ ++static void ++acx_s_after_interrupt_recalib(acx_device_t *adev) ++{ ++ int res; ++ ++ /* this helps with ACX100 at least; ++ * hopefully ACX111 also does a ++ * recalibration here */ ++ ++ /* clear flag beforehand, since we want to make sure ++ * it's cleared; then only set it again on specific circumstances */ ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ ++ /* better wait a bit between recalibrations to ++ * prevent overheating due to torturing the card ++ * into working too long despite high temperature ++ * (just a safety measure) */ ++ if (adev->recalib_time_last_success ++ && time_before(jiffies, adev->recalib_time_last_success ++ + RECALIB_PAUSE * 60 * HZ)) { ++ if (adev->recalib_msg_ratelimit <= 4) { ++ printk("%s: less than " STRING(RECALIB_PAUSE) ++ " minutes since last radio recalibration, " ++ "not recalibrating (maybe card is too hot?)\n", ++ adev->ndev->name); ++ adev->recalib_msg_ratelimit++; ++ if (adev->recalib_msg_ratelimit == 5) ++ printk("disabling above message until next recalib\n"); ++ } ++ return; ++ } ++ ++ adev->recalib_msg_ratelimit = 0; ++ ++ /* note that commands sometimes fail (card busy), ++ * so only clear flag if we were fully successful */ ++ res = acx_s_recalib_radio(adev); ++ if (res == OK) { ++ printk("%s: successfully recalibrated radio\n", ++ adev->ndev->name); ++ adev->recalib_time_last_success = jiffies; ++ adev->recalib_failure_count = 0; ++ } else { ++ /* failed: resubmit, but only limited ++ * amount of times within some time range ++ * to prevent endless loop */ ++ ++ adev->recalib_time_last_success = 0; /* we failed */ ++ ++ /* if some time passed between last ++ * attempts, then reset failure retry counter ++ * to be able to do next recalib attempt */ ++ if (time_after(jiffies, adev->recalib_time_last_attempt + 5*HZ)) ++ adev->recalib_failure_count = 0; ++ ++ if (adev->recalib_failure_count < 5) { ++ /* increment inside only, for speedup of outside path */ ++ adev->recalib_failure_count++; ++ adev->recalib_time_last_attempt = jiffies; ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ } ++ } ++} ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++static void ++acx_e_after_interrupt_task(struct work_struct *work) ++{ ++ acx_device_t *adev = container_of(work, acx_device_t, after_interrupt_task); ++#else ++ static void ++ acx_e_after_interrupt_task(void *data) ++ { ++ struct net_device *ndev = (struct net_device*)data; ++ acx_device_t *adev = ndev2adev(ndev); ++#endif ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ if (!adev->after_interrupt_jobs) ++ goto end; /* no jobs to do */ ++ ++#if TX_CLEANUP_IN_SOFTIRQ ++ /* can happen only on PCI */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_TX_CLEANUP) { ++ acx_lock(adev, flags); ++ acxpci_l_clean_txdesc(adev); ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_TX_CLEANUP); ++ acx_unlock(adev, flags); ++ } ++#endif ++ /* we see lotsa tx errors */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_RADIO_RECALIB) { ++ acx_s_after_interrupt_recalib(adev); ++ } ++ ++ /* a poor interrupt code wanted to do update_card_settings() */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_UPDATE_CARD_CFG) { ++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) ++ acx_s_update_card_settings(adev); ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_UPDATE_CARD_CFG); ++ } ++ ++ /* 1) we detected that no Scan_Complete IRQ came from fw, or ++ ** 2) we found too many STAs */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_STOP_SCAN) { ++ log(L_IRQ, "sending a stop scan cmd...\n"); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_STOP_SCAN, NULL, 0); ++ /* HACK: set the IRQ bit, since we won't get a ++ * scan complete IRQ any more on ACX111 (works on ACX100!), ++ * since _we_, not a fw, have stopped the scan */ ++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE); ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_STOP_SCAN); ++ } ++ ++ /* either fw sent Scan_Complete or we detected that ++ ** no Scan_Complete IRQ came from fw. Finish scanning, ++ ** pick join partner if any */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_COMPLETE_SCAN) { ++ if (adev->status == ACX_STATUS_1_SCANNING) { ++ if (OK != acx_s_complete_scan(adev)) { ++ SET_BIT(adev->after_interrupt_jobs, ++ ACX_AFTER_IRQ_RESTART_SCAN); ++ } ++ } else { ++ /* + scan kills current join status - restore it ++ ** (do we need it for STA?) */ ++ /* + does it happen only with active scans? ++ ** active and passive scans? ALL scans including ++ ** background one? */ ++ /* + was not verified that everything is restored ++ ** (but at least we start to emit beacons again) */ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_3_AP: ++ log(L_IRQ, "redoing cmd_join_bssid() after scan\n"); ++ acx_s_cmd_join_bssid(adev, adev->bssid); ++ } ++ } ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_COMPLETE_SCAN); ++ } ++ ++ /* STA auth or assoc timed out, start over again */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_RESTART_SCAN) { ++ log(L_IRQ, "sending a start_scan cmd...\n"); ++ acx_s_cmd_start_scan(adev); ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_RESTART_SCAN); ++ } ++ ++ /* whee, we got positive assoc response! 8) */ ++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_ASSOCIATE) { ++ acx_ie_generic_t pdr; ++ /* tiny race window exists, checking that we still a STA */ ++ switch (adev->mode) { ++ case ACX_MODE_2_STA: ++ pdr.m.aid = cpu_to_le16(adev->aid); ++ acx_s_configure(adev, &pdr, ACX1xx_IE_ASSOC_ID); ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); ++ log(L_ASSOC|L_DEBUG, "ASSOCIATED!\n"); ++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_ASSOCIATE); ++ } ++ } ++end: ++ acx_sem_unlock(adev); ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_schedule_task ++** ++** Schedule the call of the after_interrupt method after leaving ++** the interrupt context. ++*/ ++void ++acx_schedule_task(acx_device_t *adev, unsigned int set_flag) ++{ ++ SET_BIT(adev->after_interrupt_jobs, set_flag); ++ SCHEDULE_WORK(&adev->after_interrupt_task); ++} ++ ++ ++/*********************************************************************** ++*/ ++void ++acx_init_task_scheduler(acx_device_t *adev) ++{ ++ /* configure task scheduler */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task); ++#else ++ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task, ++ adev->ndev); ++#endif ++} ++ ++ ++/*********************************************************************** ++** acx_s_start ++*/ ++void ++acx_s_start(acx_device_t *adev) ++{ ++ FN_ENTER; ++ ++ /* ++ * Ok, now we do everything that can possibly be done with ioctl ++ * calls to make sure that when it was called before the card ++ * was up we get the changes asked for ++ */ ++ ++ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST|GETSET_WEP ++ |GETSET_TXPOWER|GETSET_ANTENNA|GETSET_ED_THRESH|GETSET_CCA ++ |GETSET_REG_DOMAIN|GETSET_MODE|GETSET_CHANNEL ++ |GETSET_TX|GETSET_RX|GETSET_STATION_ID); ++ ++ log(L_INIT, "updating initial settings on iface activation\n"); ++ acx_s_update_card_settings(adev); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acx_update_capabilities ++*/ ++void ++acx_update_capabilities(acx_device_t *adev) ++{ ++ u16 cap = 0; ++ ++ switch (adev->mode) { ++ case ACX_MODE_3_AP: ++ SET_BIT(cap, WF_MGMT_CAP_ESS); break; ++ case ACX_MODE_0_ADHOC: ++ SET_BIT(cap, WF_MGMT_CAP_IBSS); break; ++ /* other types of stations do not emit beacons */ ++ } ++ ++ if (adev->wep_restricted) { ++ SET_BIT(cap, WF_MGMT_CAP_PRIVACY); ++ } ++ if (adev->cfgopt_dot11ShortPreambleOption) { ++ SET_BIT(cap, WF_MGMT_CAP_SHORT); ++ } ++ if (adev->cfgopt_dot11PBCCOption) { ++ SET_BIT(cap, WF_MGMT_CAP_PBCC); ++ } ++ if (adev->cfgopt_dot11ChannelAgility) { ++ SET_BIT(cap, WF_MGMT_CAP_AGILITY); ++ } ++ log(L_DEBUG, "caps updated from 0x%04X to 0x%04X\n", ++ adev->capabilities, cap); ++ adev->capabilities = cap; ++} ++ ++/*********************************************************************** ++** Common function to parse ALL configoption struct formats ++** (ACX100 and ACX111; FIXME: how to make it work with ACX100 USB!?!?). ++** FIXME: logging should be removed here and added to a /proc file instead ++*/ ++void ++acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg) ++{ ++ const u8 *pEle; ++ int i; ++ int is_acx111 = IS_ACX111(adev); ++ ++ if (acx_debug & L_DEBUG) { ++ printk("configoption struct content:\n"); ++ acx_dump_bytes(pcfg, sizeof(*pcfg)); ++ } ++ ++ if (( is_acx111 && (adev->eeprom_version == 5)) ++ || (!is_acx111 && (adev->eeprom_version == 4)) ++ || (!is_acx111 && (adev->eeprom_version == 5))) { ++ /* these versions are known to be supported */ ++ } else { ++ printk("unknown chip and EEPROM version combination (%s, v%d), " ++ "don't know how to parse config options yet. " ++ "Please report\n", is_acx111 ? "ACX111" : "ACX100", ++ adev->eeprom_version); ++ return; ++ } ++ ++ /* first custom-parse the first part which has chip-specific layout */ ++ ++ pEle = (const u8 *) pcfg; ++ ++ pEle += 4; /* skip (type,len) header */ ++ ++ memcpy(adev->cfgopt_NVSv, pEle, sizeof(adev->cfgopt_NVSv)); ++ pEle += sizeof(adev->cfgopt_NVSv); ++ ++ if (is_acx111) { ++ adev->cfgopt_NVS_vendor_offs = le16_to_cpu(*(u16 *)pEle); ++ pEle += sizeof(adev->cfgopt_NVS_vendor_offs); ++ ++ adev->cfgopt_probe_delay = 200; /* good default value? */ ++ pEle += 2; /* FIXME: unknown, value 0x0001 */ ++ } else { ++ memcpy(adev->cfgopt_MAC, pEle, sizeof(adev->cfgopt_MAC)); ++ pEle += sizeof(adev->cfgopt_MAC); ++ ++ adev->cfgopt_probe_delay = le16_to_cpu(*(u16 *)pEle); ++ pEle += sizeof(adev->cfgopt_probe_delay); ++ if ((adev->cfgopt_probe_delay < 100) || (adev->cfgopt_probe_delay > 500)) { ++ printk("strange probe_delay value %d, " ++ "tweaking to 200\n", adev->cfgopt_probe_delay); ++ adev->cfgopt_probe_delay = 200; ++ } ++ } ++ ++ adev->cfgopt_eof_memory = le32_to_cpu(*(u32 *)pEle); ++ pEle += sizeof(adev->cfgopt_eof_memory); ++ ++ printk("NVS_vendor_offs:%04X probe_delay:%d eof_memory:%d\n", ++ adev->cfgopt_NVS_vendor_offs, ++ adev->cfgopt_probe_delay, ++ adev->cfgopt_eof_memory); ++ ++ adev->cfgopt_dot11CCAModes = *pEle++; ++ adev->cfgopt_dot11Diversity = *pEle++; ++ adev->cfgopt_dot11ShortPreambleOption = *pEle++; ++ adev->cfgopt_dot11PBCCOption = *pEle++; ++ adev->cfgopt_dot11ChannelAgility = *pEle++; ++ adev->cfgopt_dot11PhyType = *pEle++; ++ adev->cfgopt_dot11TempType = *pEle++; ++ printk("CCAModes:%02X Diversity:%02X ShortPreOpt:%02X " ++ "PBCC:%02X ChanAgil:%02X PHY:%02X Temp:%02X\n", ++ adev->cfgopt_dot11CCAModes, ++ adev->cfgopt_dot11Diversity, ++ adev->cfgopt_dot11ShortPreambleOption, ++ adev->cfgopt_dot11PBCCOption, ++ adev->cfgopt_dot11ChannelAgility, ++ adev->cfgopt_dot11PhyType, ++ adev->cfgopt_dot11TempType); ++ ++ /* then use common parsing for next part which has common layout */ ++ ++ pEle++; /* skip table_count (6) */ ++ ++ if (IS_MEM(adev) && IS_ACX100(adev)) ++ { ++ /* ++ * For iPaq hx4700 Generic Slave F/W 1.10.7.K. I'm not sure if these ++ * 4 extra bytes are before the dot11 things above or after, so I'm just ++ * going to guess after. If someone sees these aren't reasonable numbers, ++ * please fix this. ++ * The area from which the dot11 values above are read contains: ++ * 04 01 01 01 00 05 01 06 00 02 01 02 ++ * the 8 dot11 reads above take care of 8 of them, but which 8... ++ */ ++ pEle += 4; ++ } ++ ++ adev->cfgopt_antennas.type = pEle[0]; ++ adev->cfgopt_antennas.len = pEle[1]; ++ printk("AntennaID:%02X Len:%02X Data:", ++ adev->cfgopt_antennas.type, adev->cfgopt_antennas.len); ++ for (i = 0; i < pEle[1]; i++) { ++ adev->cfgopt_antennas.list[i] = pEle[i+2]; ++ printk("%02X ", pEle[i+2]); ++ } ++ printk("\n"); ++ ++ pEle += pEle[1] + 2; ++ adev->cfgopt_power_levels.type = pEle[0]; ++ adev->cfgopt_power_levels.len = pEle[1]; ++ printk("PowerLevelID:%02X Len:%02X Data:", ++ adev->cfgopt_power_levels.type, adev->cfgopt_power_levels.len); ++ for (i = 0; i < pEle[1]; i++) { ++ adev->cfgopt_power_levels.list[i] = le16_to_cpu(*(u16 *)&pEle[i*2+2]); ++ printk("%04X ", adev->cfgopt_power_levels.list[i]); ++ } ++ printk("\n"); ++ ++ pEle += pEle[1]*2 + 2; ++ adev->cfgopt_data_rates.type = pEle[0]; ++ adev->cfgopt_data_rates.len = pEle[1]; ++ printk("DataRatesID:%02X Len:%02X Data:", ++ adev->cfgopt_data_rates.type, adev->cfgopt_data_rates.len); ++ for (i = 0; i < pEle[1]; i++) { ++ adev->cfgopt_data_rates.list[i] = pEle[i+2]; ++ printk("%02X ", pEle[i+2]); ++ } ++ printk("\n"); ++ ++ pEle += pEle[1] + 2; ++ adev->cfgopt_domains.type = pEle[0]; ++ adev->cfgopt_domains.len = pEle[1]; ++ if (IS_MEM(adev) && IS_ACX100(adev)) ++ { ++ /* ++ * For iPaq hx4700 Generic Slave F/W 1.10.7.K. ++ * There's an extra byte between this structure and the next ++ * that is not accounted for with this structure's length. It's ++ * most likely a bug in the firmware, but we can fix it here ++ * by bumping the length of this field by 1. ++ */ ++ adev->cfgopt_domains.len++; ++ } ++ printk("DomainID:%02X Len:%02X Data:", ++ adev->cfgopt_domains.type, adev->cfgopt_domains.len); ++ for (i = 0; i < adev->cfgopt_domains.len; i++) { ++ adev->cfgopt_domains.list[i] = pEle[i+2]; ++ printk("%02X ", pEle[i+2]); ++ } ++ printk("\n"); ++ ++ pEle += adev->cfgopt_domains.len + 2; ++ ++ adev->cfgopt_product_id.type = pEle[0]; ++ adev->cfgopt_product_id.len = pEle[1]; ++ for (i = 0; i < pEle[1]; i++) { ++ adev->cfgopt_product_id.list[i] = pEle[i+2]; ++ } ++ printk("ProductID:%02X Len:%02X Data:%.*s\n", ++ adev->cfgopt_product_id.type, adev->cfgopt_product_id.len, ++ adev->cfgopt_product_id.len, (char *)adev->cfgopt_product_id.list); ++ ++ pEle += pEle[1] + 2; ++ adev->cfgopt_manufacturer.type = pEle[0]; ++ adev->cfgopt_manufacturer.len = pEle[1]; ++ for (i = 0; i < pEle[1]; i++) { ++ adev->cfgopt_manufacturer.list[i] = pEle[i+2]; ++ } ++ printk("ManufacturerID:%02X Len:%02X Data:%.*s\n", ++ adev->cfgopt_manufacturer.type, adev->cfgopt_manufacturer.len, ++ adev->cfgopt_manufacturer.len, (char *)adev->cfgopt_manufacturer.list); ++/* ++ printk("EEPROM part:\n"); ++ for (i=0; i<58; i++) { ++ printk("%02X =======> 0x%02X\n", ++ i, (u8 *)adev->cfgopt_NVSv[i-2]); ++ } ++*/ ++} ++ ++ ++/*********************************************************************** ++*/ ++static int __init ++acx_e_init_module(void) ++{ ++ int r1,r2,r3,r4; ++ ++ acx_struct_size_check(); ++ ++ printk("acx: this driver is still EXPERIMENTAL\n" ++ "acx: reading README file and/or Craig's HOWTO is " ++ "recommended, visit http://acx100.sf.net in case " ++ "of further questions/discussion\n"); ++ ++#if defined(CONFIG_ACX_PCI) ++ r1 = acxpci_e_init_module(); ++#else ++ r1 = -EINVAL; ++#endif ++#if defined(CONFIG_ACX_MEM) ++ r2 = acxmem_e_init_module(); ++#else ++ r2 = -EINVAL; ++#endif ++#if defined(CONFIG_ACX_USB) ++ r3 = acxusb_e_init_module(); ++#else ++ r3 = -EINVAL; ++#endif ++#if defined(CONFIG_ACX_CS) ++ r4 = acx_cs_init(); ++#else ++ r4 = -EINVAL; ++#endif ++ if (r2 && r1 && r3 && r4) { /* all failed! */ ++ if (r3 || r1) ++ return r3 ? r3 : r1; ++ else ++ return r2; ++ } ++ /* return success if at least one succeeded */ ++ return 0; ++ ++} ++ ++static void __exit ++acx_e_cleanup_module(void) ++{ ++#if defined(CONFIG_ACX_PCI) ++ acxpci_e_cleanup_module(); ++#endif ++#if defined(CONFIG_ACX_MEM) ++ acxmem_e_cleanup_module(); ++#endif ++#if defined(CONFIG_ACX_USB) ++ acxusb_e_cleanup_module(); ++#endif ++#if defined(CONFIG_ACX_CS) ++ acx_cs_cleanup(); ++#endif ++} ++ ++module_init(acx_e_init_module) ++module_exit(acx_e_cleanup_module) +Index: linux-2.6.23/drivers/net/wireless/acx/conv.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/conv.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,504 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx.h" ++ ++ ++/*********************************************************************** ++** proto_is_stt ++** ++** Searches the 802.1h Selective Translation Table for a given ++** protocol. ++** ++** prottype - protocol number (in host order) to search for. ++** ++** Returns: ++** 1 - if the table is empty or a match is found. ++** 0 - if the table is non-empty and a match is not found. ++** ++** Based largely on p80211conv.c of the linux-wlan-ng project ++*/ ++static inline int ++proto_is_stt(unsigned int proto) ++{ ++ /* Always return found for now. This is the behavior used by the */ ++ /* Zoom Win95 driver when 802.1h mode is selected */ ++ /* TODO: If necessary, add an actual search we'll probably ++ need this to match the CMAC's way of doing things. ++ Need to do some testing to confirm. ++ */ ++ ++ if (proto == 0x80f3) /* APPLETALK */ ++ return 1; ++ ++ return 0; ++/* return ((prottype == ETH_P_AARP) || (prottype == ETH_P_IPX)); */ ++} ++ ++/* Helpers */ ++ ++static inline void ++store_llc_snap(struct wlan_llc *llc) ++{ ++ llc->dsap = 0xaa; /* SNAP, see IEEE 802 */ ++ llc->ssap = 0xaa; ++ llc->ctl = 0x03; ++} ++static inline int ++llc_is_snap(const struct wlan_llc *llc) ++{ ++ return (llc->dsap == 0xaa) ++ && (llc->ssap == 0xaa) ++ && (llc->ctl == 0x03); ++} ++static inline void ++store_oui_rfc1042(struct wlan_snap *snap) ++{ ++ snap->oui[0] = 0; ++ snap->oui[1] = 0; ++ snap->oui[2] = 0; ++} ++static inline int ++oui_is_rfc1042(const struct wlan_snap *snap) ++{ ++ return (snap->oui[0] == 0) ++ && (snap->oui[1] == 0) ++ && (snap->oui[2] == 0); ++} ++static inline void ++store_oui_8021h(struct wlan_snap *snap) ++{ ++ snap->oui[0] = 0; ++ snap->oui[1] = 0; ++ snap->oui[2] = 0xf8; ++} ++static inline int ++oui_is_8021h(const struct wlan_snap *snap) ++{ ++ return (snap->oui[0] == 0) ++ && (snap->oui[1] == 0) ++ && (snap->oui[2] == 0xf8); ++} ++ ++ ++/*********************************************************************** ++** acx_ether_to_txbuf ++** ++** Uses the contents of the ether frame to build the elements of ++** the 802.11 frame. ++** ++** We don't actually set up the frame header here. That's the ++** MAC's job. We're only handling conversion of DIXII or 802.3+LLC ++** frames to something that works with 802.11. ++** ++** Based largely on p80211conv.c of the linux-wlan-ng project ++*/ ++int ++acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb) ++{ ++ struct wlan_hdr_a3 *w_hdr; ++ struct wlan_ethhdr *e_hdr; ++ struct wlan_llc *e_llc; ++ struct wlan_snap *e_snap; ++ const u8 *a1, *a3; ++ int header_len, payload_len = -1; ++ /* protocol type or data length, depending on whether ++ * DIX or 802.3 ethernet format */ ++ u16 proto; ++ u16 fc; ++ ++ FN_ENTER; ++ ++ if (unlikely(!skb->len)) { ++ log(L_DEBUG, "zero-length skb!\n"); ++ goto end; ++ } ++ ++ w_hdr = (struct wlan_hdr_a3*)txbuf; ++ ++ switch (adev->mode) { ++ case ACX_MODE_MONITOR: ++ /* NB: one day we might want to play with DESC_CTL2_FCS ++ ** Will need to stop doing "- WLAN_FCS_LEN" here then */ ++ if (unlikely(skb->len >= WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_FCS_LEN)) { ++ printk("%s: can't tx oversized frame (%d bytes)\n", ++ adev->ndev->name, skb->len); ++ goto end; ++ } ++ memcpy(w_hdr, skb->data, skb->len); ++ payload_len = skb->len; ++ goto end; ++ } ++ ++ /* step 1: classify ether frame, DIX or 802.3? */ ++ e_hdr = (wlan_ethhdr_t *)skb->data; ++ proto = ntohs(e_hdr->type); ++ if (proto <= 1500) { ++ log(L_DEBUG, "tx: 802.3 len: %d\n", skb->len); ++ /* codes <= 1500 reserved for 802.3 lengths */ ++ /* it's 802.3, pass ether payload unchanged, */ ++ /* trim off ethernet header and copy payload to txdesc */ ++ header_len = WLAN_HDR_A3_LEN; ++ } else { ++ /* it's DIXII, time for some conversion */ ++ /* Create 802.11 packet. Header also contains llc and snap. */ ++ ++ log(L_DEBUG, "tx: DIXII len: %d\n", skb->len); ++ ++ /* size of header is 802.11 header + llc + snap */ ++ header_len = WLAN_HDR_A3_LEN + sizeof(wlan_llc_t) + sizeof(wlan_snap_t); ++ /* llc is located behind the 802.11 header */ ++ e_llc = (wlan_llc_t*)(w_hdr + 1); ++ /* snap is located behind the llc */ ++ e_snap = (wlan_snap_t*)(e_llc + 1); ++ ++ /* setup the LLC header */ ++ store_llc_snap(e_llc); ++ ++ /* setup the SNAP header */ ++ e_snap->type = htons(proto); ++ if (proto_is_stt(proto)) { ++ store_oui_8021h(e_snap); ++ } else { ++ store_oui_rfc1042(e_snap); ++ } ++ } ++ /* trim off ethernet header and copy payload to txbuf */ ++ payload_len = skb->len - sizeof(wlan_ethhdr_t); ++ /* TODO: can we just let acx DMA payload from skb instead? */ ++ memcpy((u8*)txbuf + header_len, skb->data + sizeof(wlan_ethhdr_t), payload_len); ++ payload_len += header_len; ++ ++ /* Set up the 802.11 header */ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi); ++ a1 = e_hdr->daddr; ++ a3 = adev->bssid; ++ break; ++ case ACX_MODE_2_STA: ++ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_TODSi); ++ a1 = adev->bssid; ++ a3 = e_hdr->daddr; ++ break; ++ case ACX_MODE_3_AP: ++ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_FROMDSi); ++ a1 = e_hdr->daddr; ++ a3 = e_hdr->saddr; ++ break; ++ default: ++ printk("%s: error - converting eth to wlan in unknown mode\n", ++ adev->ndev->name); ++ payload_len = -1; ++ goto end; ++ } ++ if (adev->wep_enabled) ++ SET_BIT(fc, WF_FC_ISWEPi); ++ ++ w_hdr->fc = fc; ++ w_hdr->dur = 0; ++ MAC_COPY(w_hdr->a1, a1); ++ MAC_COPY(w_hdr->a2, adev->dev_addr); ++ MAC_COPY(w_hdr->a3, a3); ++ w_hdr->seq = 0; ++ ++#ifdef DEBUG_CONVERT ++ if (acx_debug & L_DATA) { ++ printk("original eth frame [%d]: ", skb->len); ++ acx_dump_bytes(skb->data, skb->len); ++ printk("802.11 frame [%d]: ", payload_len); ++ acx_dump_bytes(w_hdr, payload_len); ++ } ++#endif ++ ++end: ++ FN_EXIT1(payload_len); ++ return payload_len; ++} ++ ++ ++/*********************************************************************** ++** acx_rxbuf_to_ether ++** ++** Uses the contents of a received 802.11 frame to build an ether ++** frame. ++** ++** This function extracts the src and dest address from the 802.11 ++** frame to use in the construction of the eth frame. ++** ++** Based largely on p80211conv.c of the linux-wlan-ng project ++*/ ++struct sk_buff* ++acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf) ++{ ++ struct wlan_hdr *w_hdr; ++ struct wlan_ethhdr *e_hdr; ++ struct wlan_llc *e_llc; ++ struct wlan_snap *e_snap; ++ struct sk_buff *skb; ++ const u8 *daddr; ++ const u8 *saddr; ++ const u8 *e_payload; ++ int buflen, payload_length; ++ unsigned int payload_offset, mtu; ++ u16 fc; ++ ++ FN_ENTER; ++ ++ /* This looks complex because it must handle possible ++ ** phy header in rxbuff */ ++ w_hdr = acx_get_wlan_hdr(adev, rxbuf); ++ payload_offset = WLAN_HDR_A3_LEN; /* it is relative to w_hdr */ ++ payload_length = RXBUF_BYTES_USED(rxbuf) /* entire rxbuff... */ ++ - ((u8*)w_hdr - (u8*)rxbuf) /* minus space before 802.11 frame */ ++ - WLAN_HDR_A3_LEN; /* minus 802.11 header */ ++ ++ /* setup some vars for convenience */ ++ fc = w_hdr->fc; ++ switch (WF_FC_FROMTODSi & fc) { ++ case 0: ++ daddr = w_hdr->a1; ++ saddr = w_hdr->a2; ++ break; ++ case WF_FC_FROMDSi: ++ daddr = w_hdr->a1; ++ saddr = w_hdr->a3; ++ break; ++ case WF_FC_TODSi: ++ daddr = w_hdr->a3; ++ saddr = w_hdr->a2; ++ break; ++ default: /* WF_FC_FROMTODSi */ ++ payload_offset += (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN); ++ payload_length -= (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN); ++ daddr = w_hdr->a3; ++ saddr = w_hdr->a4; ++ } ++ ++ if ((WF_FC_ISWEPi & fc) && IS_ACX100(adev)) { ++ /* chop off the IV+ICV WEP header and footer */ ++ log(L_DATA|L_DEBUG, "rx: WEP packet, " ++ "chopping off IV and ICV\n"); ++ payload_offset += WLAN_WEP_IV_LEN; ++ payload_length -= WLAN_WEP_IV_LEN + WLAN_WEP_ICV_LEN; ++ } ++ ++ if (unlikely(payload_length < 0)) { ++ printk("%s: rx frame too short, ignored\n", adev->ndev->name); ++ goto ret_null; ++ } ++ ++ e_hdr = (wlan_ethhdr_t*) ((u8*) w_hdr + payload_offset); ++ e_llc = (wlan_llc_t*) e_hdr; ++ e_snap = (wlan_snap_t*) (e_llc + 1); ++ mtu = adev->ndev->mtu; ++ e_payload = (u8*) (e_snap + 1); ++ ++ log(L_DATA, "rx: payload_offset %d, payload_length %d\n", ++ payload_offset, payload_length); ++ log(L_XFER|L_DATA, ++ "rx: frame info: llc=%02X%02X%02X " ++ "snap.oui=%02X%02X%02X snap.type=%04X\n", ++ e_llc->dsap, e_llc->ssap, e_llc->ctl, ++ e_snap->oui[0], e_snap->oui[1], e_snap->oui[2], ++ ntohs(e_snap->type)); ++ ++ /* Test for the various encodings */ ++ if ((payload_length >= sizeof(wlan_ethhdr_t)) ++ && ((e_llc->dsap != 0xaa) || (e_llc->ssap != 0xaa)) ++ && ( (mac_is_equal(daddr, e_hdr->daddr)) ++ || (mac_is_equal(saddr, e_hdr->saddr)) ++ ) ++ ) { ++ /* 802.3 Encapsulated: */ ++ /* wlan frame body contains complete eth frame (header+body) */ ++ log(L_DEBUG|L_DATA, "rx: 802.3 ENCAP len=%d\n", payload_length); ++ ++ if (unlikely(payload_length > (mtu + ETH_HLEN))) { ++ printk("%s: rx: ENCAP frame too large (%d > %d)\n", ++ adev->ndev->name, ++ payload_length, mtu + ETH_HLEN); ++ goto ret_null; ++ } ++ ++ /* allocate space and setup host buffer */ ++ buflen = payload_length; ++ /* Attempt to align IP header (14 bytes eth header + 2 = 16) */ ++ skb = dev_alloc_skb(buflen + 2); ++ if (unlikely(!skb)) ++ goto no_skb; ++ skb_reserve(skb, 2); ++ skb_put(skb, buflen); /* make room */ ++ ++ /* now copy the data from the 80211 frame */ ++ memcpy(skb->data, e_hdr, payload_length); ++ ++ } else if ( (payload_length >= sizeof(wlan_llc_t)+sizeof(wlan_snap_t)) ++ && llc_is_snap(e_llc) ) { ++ /* wlan frame body contains: AA AA 03 ... (it's a SNAP) */ ++ ++ if ( !oui_is_rfc1042(e_snap) ++ || (proto_is_stt(ieee2host16(e_snap->type)) /* && (ethconv == WLAN_ETHCONV_8021h) */)) { ++ log(L_DEBUG|L_DATA, "rx: SNAP+RFC1042 len=%d\n", payload_length); ++ /* wlan frame body contains: AA AA 03 !(00 00 00) ... -or- */ ++ /* wlan frame body contains: AA AA 03 00 00 00 0x80f3 ... */ ++ /* build eth hdr, type = len, copy AA AA 03... as eth body */ ++ /* it's a SNAP + RFC1042 frame && protocol is in STT */ ++ ++ if (unlikely(payload_length > mtu)) { ++ printk("%s: rx: SNAP frame too large (%d > %d)\n", ++ adev->ndev->name, ++ payload_length, mtu); ++ goto ret_null; ++ } ++ ++ /* allocate space and setup host buffer */ ++ buflen = payload_length + ETH_HLEN; ++ skb = dev_alloc_skb(buflen + 2); ++ if (unlikely(!skb)) ++ goto no_skb; ++ skb_reserve(skb, 2); ++ skb_put(skb, buflen); /* make room */ ++ ++ /* create 802.3 header */ ++ e_hdr = (wlan_ethhdr_t*) skb->data; ++ MAC_COPY(e_hdr->daddr, daddr); ++ MAC_COPY(e_hdr->saddr, saddr); ++ e_hdr->type = htons(payload_length); ++ ++ /* Now copy the data from the 80211 frame. ++ Make room in front for the eth header, and keep the ++ llc and snap from the 802.11 payload */ ++ memcpy(skb->data + ETH_HLEN, ++ e_llc, payload_length); ++ ++ } else { ++ /* wlan frame body contains: AA AA 03 00 00 00 [type] [tail] */ ++ /* build eth hdr, type=[type], copy [tail] as eth body */ ++ log(L_DEBUG|L_DATA, "rx: 802.1h/RFC1042 len=%d\n", ++ payload_length); ++ /* it's an 802.1h frame (an RFC1042 && protocol is not in STT) */ ++ /* build a DIXII + RFC894 */ ++ ++ payload_length -= sizeof(wlan_llc_t) + sizeof(wlan_snap_t); ++ if (unlikely(payload_length > mtu)) { ++ printk("%s: rx: DIXII frame too large (%d > %d)\n", ++ adev->ndev->name, ++ payload_length, mtu); ++ goto ret_null; ++ } ++ ++ /* allocate space and setup host buffer */ ++ buflen = payload_length + ETH_HLEN; ++ skb = dev_alloc_skb(buflen + 2); ++ if (unlikely(!skb)) ++ goto no_skb; ++ skb_reserve(skb, 2); ++ skb_put(skb, buflen); /* make room */ ++ ++ /* create 802.3 header */ ++ e_hdr = (wlan_ethhdr_t *) skb->data; ++ MAC_COPY(e_hdr->daddr, daddr); ++ MAC_COPY(e_hdr->saddr, saddr); ++ e_hdr->type = e_snap->type; ++ ++ /* Now copy the data from the 80211 frame. ++ Make room in front for the eth header, and cut off the ++ llc and snap from the 802.11 payload */ ++ memcpy(skb->data + ETH_HLEN, ++ e_payload, payload_length); ++ } ++ ++ } else { ++ log(L_DEBUG|L_DATA, "rx: NON-ENCAP len=%d\n", payload_length); ++ /* build eth hdr, type=len, copy wlan body as eth body */ ++ /* any NON-ENCAP */ ++ /* it's a generic 80211+LLC or IPX 'Raw 802.3' */ ++ /* build an 802.3 frame */ ++ ++ if (unlikely(payload_length > mtu)) { ++ printk("%s: rx: OTHER frame too large (%d > %d)\n", ++ adev->ndev->name, payload_length, mtu); ++ goto ret_null; ++ } ++ ++ /* allocate space and setup host buffer */ ++ buflen = payload_length + ETH_HLEN; ++ skb = dev_alloc_skb(buflen + 2); ++ if (unlikely(!skb)) ++ goto no_skb; ++ skb_reserve(skb, 2); ++ skb_put(skb, buflen); /* make room */ ++ ++ /* set up the 802.3 header */ ++ e_hdr = (wlan_ethhdr_t *) skb->data; ++ MAC_COPY(e_hdr->daddr, daddr); ++ MAC_COPY(e_hdr->saddr, saddr); ++ e_hdr->type = htons(payload_length); ++ ++ /* now copy the data from the 80211 frame */ ++ memcpy(skb->data + ETH_HLEN, e_llc, payload_length); ++ } ++ ++ skb->dev = adev->ndev; ++ skb->protocol = eth_type_trans(skb, adev->ndev); ++ ++#ifdef DEBUG_CONVERT ++ if (acx_debug & L_DATA) { ++ int len = RXBUF_BYTES_RCVD(adev, rxbuf); ++ printk("p802.11 frame [%d]: ", len); ++ acx_dump_bytes(w_hdr, len); ++ printk("eth frame [%d]: ", skb->len); ++ acx_dump_bytes(skb->data, skb->len); ++ } ++#endif ++ ++ FN_EXIT0; ++ return skb; ++ ++no_skb: ++ printk("%s: rx: no memory for skb (%d bytes)\n", ++ adev->ndev->name, buflen + 2); ++ret_null: ++ FN_EXIT1((int)NULL); ++ return NULL; ++} +Index: linux-2.6.23/drivers/net/wireless/acx/cs.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/cs.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,5703 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++** ++** Slave memory interface support: ++** ++** Todd Blumer - SDG Systems ++** Bill Reese - HP ++** Eric McCorkle - Shadowsun ++** ++** CF support, (c) Fabrice Crohas, Paul Sokolovsky ++*/ ++#define ACX_MEM 1 ++ ++/* ++ * non-zero makes it dump the ACX memory to the console then ++ * panic when you cat /proc/driver/acx_wlan0_diag ++ */ ++#define DUMP_MEM_DEFINED 1 ++ ++#define DUMP_MEM_DURING_DIAG 0 ++#define DUMP_IF_SLOW 0 ++ ++#define PATCH_AROUND_BAD_SPOTS 1 ++#define HX4700_FIRMWARE_CHECKSUM 0x0036862e ++#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75 ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++ ++/* Linux 2.6.18+ uses */ ++#ifndef UTS_RELEASE ++#include ++#endif ++ ++#include /* required for Lx 2.6.8 ?? */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define PCMCIA_DEBUG 1 ++ ++/* ++ All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If ++ you do not define PCMCIA_DEBUG at all, all the debug code will be ++ left out. If you compile with PCMCIA_DEBUG=0, the debug code will ++ be present but disabled -- but it can then be enabled for specific ++ modules at load time with a 'pc_debug=#' option to insmod. ++ ++*/ ++#include ++#include ++#include ++#include ++#include ++#include "acx.h" ++#include "acx_hw.h" ++ ++#ifdef PCMCIA_DEBUG ++static int pc_debug = PCMCIA_DEBUG; ++module_param(pc_debug, int, 0); ++static char *version = "$Revision: 1.10 $"; ++#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args); ++#else ++#define DEBUG(n, args...) ++#endif ++ ++ ++static win_req_t memwin; ++ ++typedef struct local_info_t { ++ dev_node_t node; ++ struct net_device *ndev; ++} local_info_t; ++ ++static struct net_device *resume_ndev; ++ ++ ++/*********************************************************************** ++*/ ++ ++#define CARD_EEPROM_ID_SIZE 6 ++ ++#include ++ ++#define REG_ACX_VENDOR_ID 0x900 ++/* ++ * This is the vendor id on the HX4700, anyway ++ */ ++#define ACX_VENDOR_ID 0x8400104c ++ ++typedef enum { ++ ACX_SOFT_RESET = 0, ++ ++ ACX_SLV_REG_ADDR, ++ ACX_SLV_REG_DATA, ++ ACX_SLV_REG_ADATA, ++ ++ ACX_SLV_MEM_CP, ++ ACX_SLV_MEM_ADDR, ++ ACX_SLV_MEM_DATA, ++ ACX_SLV_MEM_CTL, ++} acxreg_t; ++ ++/*********************************************************************** ++*/ ++static void acxmem_i_tx_timeout(struct net_device *ndev); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id); ++#else ++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs); ++#endif ++static void acxmem_i_set_multicast_list(struct net_device *ndev); ++ ++static int acxmem_e_open(struct net_device *ndev); ++static int acxmem_e_close(struct net_device *ndev); ++static void acxmem_s_up(struct net_device *ndev); ++static void acxmem_s_down(struct net_device *ndev); ++ ++static void dump_acxmem (acx_device_t *adev, u32 start, int length); ++static int acxmem_complete_hw_reset (acx_device_t *adev); ++static void acxmem_s_delete_dma_regions(acx_device_t *adev); ++ ++static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++acxmem_e_suspend( struct net_device *ndev, pm_message_t state); ++#else ++acxmem_e_suspend( struct net_device *ndev, u32 state); ++#endif ++static void ++fw_resumer(struct work_struct *notused); ++//fw_resumer( void *data ); ++ ++static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) ++{ ++ struct net_device *ndev = ptr; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ /* ++ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes. ++ */ ++ ++ if (NETDEV_CHANGEADDR == event) { ++ /* ++ * the upper layers put the new MAC address in ndev->dev_addr; we just copy ++ * it over and update the ACX with it. ++ */ ++ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr); ++ adev->set_mask |= GETSET_STATION_ID; ++ acx_s_update_card_settings (adev); ++ } ++ ++ return 0; ++} ++ ++static struct notifier_block acx_netdev_notifier = { ++ .notifier_call = acx_netdev_event, ++}; ++ ++/*********************************************************************** ++** Register access ++*/ ++ ++/* Pick one */ ++/* #define INLINE_IO static */ ++#define INLINE_IO static inline ++ ++INLINE_IO u32 ++read_id_register (acx_device_t *adev) ++{ ++ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]); ++ return readl (&adev->iobase[ACX_SLV_REG_DATA]); ++} ++ ++INLINE_IO u32 ++read_reg32(acx_device_t *adev, unsigned int offset) ++{ ++ u32 val; ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ return readl(((u8*)adev->iobase) + addr); ++ } ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ val = readl( &adev->iobase[ACX_SLV_REG_DATA] ); ++ ++ return val; ++} ++ ++INLINE_IO u16 ++read_reg16(acx_device_t *adev, unsigned int offset) ++{ ++ u16 lo; ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ return readw(((u8 *) adev->iobase) + addr); ++ } ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] ); ++ ++ return lo; ++} ++ ++INLINE_IO u8 ++read_reg8(acx_device_t *adev, unsigned int offset) ++{ ++ u8 lo; ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) ++ return readb(((u8 *)adev->iobase) + addr); ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] ); ++ ++ return (u8)lo; ++} ++ ++INLINE_IO void ++write_reg32(acx_device_t *adev, unsigned int offset, u32 val) ++{ ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ writel(val, ((u8*)adev->iobase) + addr); ++ return; ++ } ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ writel( val, &adev->iobase[ACX_SLV_REG_DATA] ); ++} ++ ++INLINE_IO void ++write_reg16(acx_device_t *adev, unsigned int offset, u16 val) ++{ ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ writew(val, ((u8 *)adev->iobase) + addr); ++ return; ++ } ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] ); ++} ++ ++INLINE_IO void ++write_reg8(acx_device_t *adev, unsigned int offset, u8 val) ++{ ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ writeb(val, ((u8 *) adev->iobase) + addr); ++ return; ++ } ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] ); ++} ++ ++/* Handle PCI posting properly: ++ * Make sure that writes reach the adapter in case they require to be executed ++ * *before* the next write, by reading a random (and safely accessible) register. ++ * This call has to be made if there is no read following (which would flush the data ++ * to the adapter), yet the written data has to reach the adapter immediately. */ ++INLINE_IO void ++write_flush(acx_device_t *adev) ++{ ++ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */ ++ /* faster version (accesses the first register, IO_ACX_SOFT_RESET, ++ * which should also be safe): */ ++ (void) readl(adev->iobase); ++} ++ ++INLINE_IO void ++set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) { ++ u32 tmp; ++ ++ tmp = read_reg32 (adev, offset); ++ tmp = tmp | bits; ++ write_reg32 (adev, offset, tmp); ++ write_flush (adev); ++} ++ ++INLINE_IO void ++clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) { ++ u32 tmp; ++ ++ tmp = read_reg32 (adev, offset); ++ tmp = tmp & ~bits; ++ write_reg32 (adev, offset, tmp); ++ write_flush (adev); ++} ++ ++/* ++ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX ++ * addresses are 32 bit aligned. Count is in bytes. ++ */ ++INLINE_IO void ++write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val) ++{ ++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0); ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address); ++ udelay (10); ++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val); ++} ++ ++INLINE_IO u32 ++read_slavemem32 (acx_device_t *adev, u32 slave_address) ++{ ++ u32 val; ++ ++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0); ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address); ++ udelay (10); ++ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ ++ return val; ++} ++ ++INLINE_IO void ++write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val) ++{ ++ u32 data; ++ u32 base; ++ int offset; ++ ++ /* ++ * Get the word containing the target address and the byte offset in that word. ++ */ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ data &= ~(0xff << offset); ++ data |= val << offset; ++ write_slavemem32 (adev, base, data); ++} ++ ++INLINE_IO u8 ++read_slavemem8 (acx_device_t *adev, u32 slave_address) ++{ ++ u8 val; ++ u32 base; ++ u32 data; ++ int offset; ++ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ ++ val = (data >> offset) & 0xff; ++ ++ return val; ++} ++ ++/* ++ * doesn't split across word boundaries ++ */ ++INLINE_IO void ++write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val) ++{ ++ u32 data; ++ u32 base; ++ int offset; ++ ++ /* ++ * Get the word containing the target address and the byte offset in that word. ++ */ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ data &= ~(0xffff << offset); ++ data |= val << offset; ++ write_slavemem32 (adev, base, data); ++} ++ ++/* ++ * doesn't split across word boundaries ++ */ ++INLINE_IO u16 ++read_slavemem16 (acx_device_t *adev, u32 slave_address) ++{ ++ u16 val; ++ u32 base; ++ u32 data; ++ int offset; ++ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ ++ val = (data >> offset) & 0xffff; ++ ++ return val; ++} ++ ++/* ++ * Copy from slave memory ++ * ++ * TODO - rewrite using address autoincrement, handle partial words ++ */ ++void ++copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) { ++ u32 tmp = 0; ++ u8 *ptmp = (u8 *) &tmp; ++ ++ /* ++ * Right now I'm making the assumption that the destination is aligned, but ++ * I'd better check. ++ */ ++ if ((u32) destination & 3) { ++ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n"); ++ } ++ ++ while (count >= 4) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source); ++ udelay (10); ++ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ count -= 4; ++ source += 4; ++ destination += 4; ++ } ++ ++ /* ++ * If the word reads above didn't satisfy the count, read one more word ++ * and transfer a byte at a time until the request is satisfied. ++ */ ++ if (count) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source); ++ udelay (10); ++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ while (count--) { ++ *destination++ = *ptmp++; ++ } ++ } ++} ++ ++/* ++ * Copy to slave memory ++ * ++ * TODO - rewrite using autoincrement, handle partial words ++ */ ++void ++copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count) ++{ ++ u32 tmp = 0; ++ u8* ptmp = (u8 *) &tmp; ++ static u8 src[512]; /* make static to avoid huge stack objects */ ++ ++ /* ++ * For now, make sure the source is word-aligned by copying it to a word-aligned ++ * buffer. Someday rewrite to avoid the extra copy. ++ */ ++ if (count > sizeof (src)) { ++ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n"); ++ count = sizeof (src); ++ } ++ memcpy (src, source, count); ++ source = src; ++ ++ while (count >= 4) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination); ++ udelay (10); ++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source)); ++ count -= 4; ++ source += 4; ++ destination += 4; ++ } ++ ++ /* ++ * If there are leftovers read the next word from the acx and merge in ++ * what they want to write. ++ */ ++ if (count) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination); ++ udelay (10); ++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ while (count--) { ++ *ptmp++ = *source++; ++ } ++ /* ++ * reset address in case we're currently in auto-increment mode ++ */ ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination); ++ udelay (10); ++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp); ++ udelay (10); ++ } ++ ++} ++ ++/* ++ * Block copy to slave buffers using memory block chain mode. Copies to the ACX ++ * transmit buffer structure with minimal intervention on our part. ++ * Interrupts should be disabled when calling this. ++ */ ++void ++chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count) ++{ ++ u32 val; ++ u32 *data = (u32 *) source; ++ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS]; ++ ++ /* ++ * Warn if the pointers don't look right. Destination must fit in [23:5] with ++ * zero elsewhere and source should be 32 bit aligned. ++ * This should never happen since we're in control of both, but I want to know about ++ * it if it does. ++ */ ++ if ((destination & 0x00ffffe0) != destination) { ++ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination); ++ } ++ if (count > sizeof aligned_source) { ++ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" ); ++ count = sizeof aligned_source; ++ } ++ if ((u32) source & 3) { ++ memcpy (aligned_source, source, count); ++ data = (u32 *) aligned_source; ++ } ++ ++ /* ++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment ++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word ++ */ ++ val = 2 << 16 | 1 << 2; ++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]); ++ ++ /* ++ * SLV_MEM_CP[23:5] = start of 1st block ++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0 ++ */ ++ val = destination & 0x00ffffe0; ++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]); ++ ++ /* ++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5] ++ */ ++ val = (destination & 0x00ffffe0) + (1<<2); ++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]); ++ ++ /* ++ * Write the data to the slave data register, rounding up to the end ++ * of the word containing the last byte (hence the > 0) ++ */ ++ while (count > 0) { ++ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]); ++ count -= 4; ++ } ++} ++ ++ ++/* ++ * Block copy from slave buffers using memory block chain mode. Copies from the ACX ++ * receive buffer structures with minimal intervention on our part. ++ * Interrupts should be disabled when calling this. ++ */ ++void ++chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) ++{ ++ u32 val; ++ u32 *data = (u32 *) destination; ++ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS]; ++ int saved_count = count; ++ ++ /* ++ * Warn if the pointers don't look right. Destination must fit in [23:5] with ++ * zero elsewhere and source should be 32 bit aligned. ++ * Turns out the network stack sends unaligned things, so fix them before ++ * copying to the ACX. ++ */ ++ if ((source & 0x00ffffe0) != source) { ++ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source); ++ dump_acxmem (adev, 0, 0x10000); ++ } ++ if ((u32) destination & 3) { ++ //printk ("acx chaincopy: data destination not word aligned!\n"); ++ data = (u32 *) aligned_destination; ++ if (count > sizeof aligned_destination) { ++ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" ); ++ count = sizeof aligned_destination; ++ } ++ } ++ ++ /* ++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment ++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word ++ */ ++ val = (2 << 16) | (1 << 2); ++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]); ++ ++ /* ++ * SLV_MEM_CP[23:5] = start of 1st block ++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0 ++ */ ++ val = source & 0x00ffffe0; ++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]); ++ ++ /* ++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5] ++ */ ++ val = (source & 0x00ffffe0) + (1<<2); ++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]); ++ ++ /* ++ * Read the data from the slave data register, rounding up to the end ++ * of the word containing the last byte (hence the > 0) ++ */ ++ while (count > 0) { ++ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]); ++ count -= 4; ++ } ++ ++ /* ++ * If the destination wasn't aligned, we would have saved it in ++ * the aligned buffer, so copy it where it should go. ++ */ ++ if ((u32) destination & 3) { ++ memcpy (destination, aligned_destination, saved_count); ++ } ++} ++ ++char ++printable (char c) ++{ ++ return ((c >= 20) && (c < 127)) ? c : '.'; ++} ++ ++#if DUMP_MEM_DEFINED > 0 ++static void ++dump_acxmem (acx_device_t *adev, u32 start, int length) ++{ ++ int i; ++ u8 buf[16]; ++ ++ while (length > 0) { ++ printk ("%04x ", start); ++ copy_from_slavemem (adev, buf, start, 16); ++ for (i = 0; (i < 16) && (i < length); i++) { ++ printk ("%02x ", buf[i]); ++ } ++ for (i = 0; (i < 16) && (i < length); i++) { ++ printk ("%c", printable (buf[i])); ++ } ++ printk ("\n"); ++ start += 16; ++ length -= 16; ++ } ++} ++#endif ++ ++static void ++enable_acx_irq(acx_device_t *adev); ++static void ++disable_acx_irq(acx_device_t *adev); ++ ++/* ++ * Return an acx pointer to the next transmit data block. ++ */ ++u32 ++allocate_acx_txbuf_space (acx_device_t *adev, int count) { ++ u32 block, next, last_block; ++ int blocks_needed; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&adev->txbuf_lock, flags); ++ /* ++ * Take 4 off the memory block size to account for the reserved word at the start of ++ * the block. ++ */ ++ blocks_needed = count / (adev->memblocksize - 4); ++ if (count % (adev->memblocksize - 4)) ++ blocks_needed++; ++ ++ if (blocks_needed <= adev->acx_txbuf_blocks_free) { ++ /* ++ * Take blocks at the head of the free list. ++ */ ++ last_block = block = adev->acx_txbuf_free; ++ ++ /* ++ * Follow block pointers through the requested number of blocks both to ++ * find the new head of the free list and to set the flags for the blocks ++ * appropriately. ++ */ ++ while (blocks_needed--) { ++ /* ++ * Keep track of the last block of the allocation ++ */ ++ last_block = adev->acx_txbuf_free; ++ ++ /* ++ * Make sure the end control flag is not set. ++ */ ++ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff; ++ write_slavemem32 (adev, adev->acx_txbuf_free, next); ++ ++ /* ++ * Update the new head of the free list ++ */ ++ adev->acx_txbuf_free = next << 5; ++ adev->acx_txbuf_blocks_free--; ++ ++ } ++ ++ /* ++ * Flag the last block both by clearing out the next pointer ++ * and marking the control field. ++ */ ++ write_slavemem32 (adev, last_block, 0x02000000); ++ ++ /* ++ * If we're out of buffers make sure the free list pointer is NULL ++ */ ++ if (!adev->acx_txbuf_blocks_free) { ++ adev->acx_txbuf_free = 0; ++ } ++ } ++ else { ++ block = 0; ++ } ++ spin_unlock_irqrestore (&adev->txbuf_lock, flags); ++ return block; ++} ++ ++/* ++ * Return buffer space back to the pool by following the next pointers until we find ++ * the block marked as the end. Point the last block to the head of the free list, ++ * then update the head of the free list to point to the newly freed memory. ++ * This routine gets called in interrupt context, so it shouldn't block to protect ++ * the integrity of the linked list. The ISR already holds the lock. ++ */ ++void ++reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) { ++ u32 cur, last, next; ++ unsigned long flags; ++ ++ spin_lock_irqsave (&adev->txbuf_lock, flags); ++ if ((blockptr >= adev->acx_txbuf_start) && ++ (blockptr <= adev->acx_txbuf_start + ++ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) { ++ cur = blockptr; ++ do { ++ last = cur; ++ next = read_slavemem32 (adev, cur); ++ ++ /* ++ * Advance to the next block in this allocation ++ */ ++ cur = (next & 0x7ffff) << 5; ++ ++ /* ++ * This block now counts as free. ++ */ ++ adev->acx_txbuf_blocks_free++; ++ } while (!(next & 0x02000000)); ++ ++ /* ++ * last now points to the last block of that allocation. Update the pointer ++ * in that block to point to the free list and reset the free list to the ++ * first block of the free call. If there were no free blocks, make sure ++ * the new end of the list marks itself as truly the end. ++ */ ++ if (adev->acx_txbuf_free) { ++ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5); ++ } ++ else { ++ write_slavemem32 (adev, last, 0x02000000); ++ } ++ adev->acx_txbuf_free = blockptr; ++ } ++ spin_unlock_irqrestore(&adev->txbuf_lock, flags); ++} ++ ++/* ++ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit ++ * buffer is a circular queue with one 32 bit word reserved at the beginning of each ++ * block. The upper 13 bits are a control field, of which only 0x02000000 has any ++ * meaning. The lower 19 bits are the address of the next block divided by 32. ++ */ ++void ++init_acx_txbuf (acx_device_t *adev) { ++ ++ /* ++ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us. ++ * All we need to do is reset the rest of the bookeeping. ++ */ ++ ++ adev->acx_txbuf_free = adev->acx_txbuf_start; ++ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks; ++ ++ /* ++ * Initialization leaves the last transmit pool block without a pointer back to ++ * the head of the list, but marked as the end of the list. That's how we want ++ * to see it, too, so leave it alone. This is only ever called after a firmware ++ * reset, so the ACX memory is in the state we want. ++ */ ++ ++} ++ ++INLINE_IO int ++adev_present(acx_device_t *adev) ++{ ++ /* fast version (accesses the first register, IO_ACX_SOFT_RESET, ++ * which should be safe): */ ++ return readl(adev->iobase) != 0xffffffff; ++} ++ ++/*********************************************************************** ++*/ ++static inline txdesc_t* ++get_txdesc(acx_device_t *adev, int index) ++{ ++ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size); ++} ++ ++static inline txdesc_t* ++advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc) ++{ ++ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size); ++} ++ ++static txhostdesc_t* ++get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ return &adev->txhostdesc_start[index*2]; ++} ++ ++static inline client_t* ++get_txc(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ return adev->txc[index]; ++} ++ ++static inline u16 ++get_txr(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ index /= adev->txdesc_size; ++ return adev->txr[index]; ++} ++ ++static inline void ++put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return; ++ } ++ adev->txc[index] = c; ++ adev->txr[index] = r111; ++} ++ ++ ++/*********************************************************************** ++** EEPROM and PHY read/write helpers ++*/ ++/*********************************************************************** ++** acxmem_read_eeprom_byte ++** ++** Function called to read an octet in the EEPROM. ++** ++** This function is used by acxmem_e_probe to check if the ++** connected card is a legal one or not. ++** ++** Arguments: ++** adev ptr to acx_device structure ++** addr address to read in the EEPROM ++** charbuf ptr to a char. This is where the read octet ++** will be stored ++*/ ++int ++acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf) ++{ ++ int result; ++ int count; ++ ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for EEPROM read\n", ++ adev->ndev->name); ++ result = NOT_OK; ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA); ++ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf); ++ result = OK; ++ ++fail: ++ return result; ++} ++ ++ ++/*********************************************************************** ++** We don't lock hw accesses here since we never r/w eeprom in IRQ ++** Note: this function sleeps only because of GFP_KERNEL alloc ++*/ ++#ifdef UNUSED ++int ++acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf) ++{ ++ u8 *data_verify = NULL; ++ unsigned long flags; ++ int count, i; ++ int result = NOT_OK; ++ u16 gpio_orig; ++ ++ printk("acx: WARNING! I would write to EEPROM now. " ++ "Since I really DON'T want to unless you know " ++ "what you're doing (THIS CODE WILL PROBABLY " ++ "NOT WORK YET!), I will abort that now. And " ++ "definitely make sure to make a " ++ "/proc/driver/acx_wlan0_eeprom backup copy first!!! " ++ "(the EEPROM content includes the PCI config header!! " ++ "If you kill important stuff, then you WILL " ++ "get in trouble and people DID get in trouble already)\n"); ++ return OK; ++ ++ FN_ENTER; ++ ++ data_verify = kmalloc(len, GFP_KERNEL); ++ if (!data_verify) { ++ goto end; ++ } ++ ++ /* first we need to enable the OE (EEPROM Output Enable) GPIO line ++ * to be able to write to the EEPROM. ++ * NOTE: an EEPROM writing success has been reported, ++ * but you probably have to modify GPIO_OUT, too, ++ * and you probably need to activate a different GPIO ++ * line instead! */ ++ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE); ++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1); ++ write_flush(adev); ++ ++ /* ok, now start writing the data out */ ++ for (i = 0; i < len; i++) { ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i); ++ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i)); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 1); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ if (unlikely(!--count)) { ++ printk("WARNING, DANGER!!! " ++ "Timeout waiting for EEPROM write\n"); ++ goto end; ++ } ++ cpu_relax(); ++ } ++ } ++ ++ /* disable EEPROM writing */ ++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig); ++ write_flush(adev); ++ ++ /* now start a verification run */ ++ for (i = 0; i < len; i++) { ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ if (unlikely(!--count)) { ++ printk("timeout waiting for EEPROM read\n"); ++ goto end; ++ } ++ cpu_relax(); ++ } ++ ++ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA); ++ } ++ ++ if (0 == memcmp(charbuf, data_verify, len)) ++ result = OK; /* read data matches, success */ ++ ++end: ++ kfree(data_verify); ++ FN_EXIT1(result); ++ return result; ++} ++#endif /* UNUSED */ ++ ++ ++/*********************************************************************** ++** acxmem_s_read_phy_reg ++** ++** Messing with rx/tx disabling and enabling here ++** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic ++*/ ++int ++acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf) ++{ ++ int result = NOT_OK; ++ int count; ++ ++ FN_ENTER; ++ ++ write_reg32(adev, IO_ACX_PHY_ADDR, reg); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_PHY_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg32(adev, IO_ACX_PHY_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for phy read\n", ++ adev->ndev->name); ++ *charbuf = 0; ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ log(L_DEBUG, "count was %u\n", count); ++ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA); ++ ++ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg); ++ result = OK; ++ goto fail; /* silence compiler warning */ ++fail: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value) ++{ ++ int count; ++ FN_ENTER; ++ ++ /* mprusko said that 32bit accesses result in distorted sensitivity ++ * on his card. Unconfirmed, looks like it's not true (most likely since we ++ * now properly flush writes). */ ++ write_reg32(adev, IO_ACX_PHY_DATA, value); ++ write_reg32(adev, IO_ACX_PHY_ADDR, reg); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_PHY_CTL, 1); ++ write_flush(adev); ++ ++ count = 0xffff; ++ while (read_reg32(adev, IO_ACX_PHY_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for phy read\n", ++ adev->ndev->name); ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg); ++ fail: ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++#define NO_AUTO_INCREMENT 1 ++ ++/*********************************************************************** ++** acxmem_s_write_fw ++** ++** Write the firmware image into the card. ++** ++** Arguments: ++** adev wlan device structure ++** fw_image firmware image. ++** ++** Returns: ++** 1 firmware image corrupted ++** 0 success ++*/ ++static int ++acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset) ++{ ++ int len, size, checkMismatch = -1; ++ u32 sum, v32, tmp, id; ++ /* we skip the first four bytes which contain the control sum */ ++ const u8 *p = (u8*)fw_image + 4; ++ ++ /* start the image checksum by adding the image size value */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++#ifdef NOPE ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */ ++#else ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */ ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */ ++ write_flush(adev); ++#endif ++#endif ++ len = 0; ++ size = le32_to_cpu(fw_image->size) & (~3); ++ ++ while (likely(len < size)) { ++ v32 = be32_to_cpu(*(u32*)p); ++ sum += p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ len += 4; ++ ++#ifdef NOPE ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4); ++ write_flush(adev); ++#endif ++ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32); ++ write_flush(adev); ++#endif ++ write_slavemem32 (adev, offset + len - 4, v32); ++ ++ id = read_id_register (adev); ++ ++ /* ++ * check the data written ++ */ ++ tmp = read_slavemem32 (adev, offset + len - 4); ++ if (checkMismatch && (tmp != v32)) { ++ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n", ++ offset + len - 4, v32, tmp, id); ++ checkMismatch = 0; ++ } ++ } ++ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n", ++ size, sum, le32_to_cpu(fw_image->chksum)); ++ ++ /* compare our checksum with the stored image checksum */ ++ return (sum != le32_to_cpu(fw_image->chksum)); ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_validate_fw ++** ++** Compare the firmware image given with ++** the firmware image written into the card. ++** ++** Arguments: ++** adev wlan device structure ++** fw_image firmware image. ++** ++** Returns: ++** NOT_OK firmware image corrupted or not correctly written ++** OK success ++*/ ++static int ++acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image, ++ u32 offset) ++{ ++ u32 sum, v32, w32; ++ int len, size; ++ int result = OK; ++ /* we skip the first four bytes which contain the control sum */ ++ const u8 *p = (u8*)fw_image + 4; ++ ++ /* start the image checksum by adding the image size value */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0); ++ ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */ ++#else ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */ ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */ ++#endif ++ ++ len = 0; ++ size = le32_to_cpu(fw_image->size) & (~3); ++ ++ while (likely(len < size)) { ++ v32 = be32_to_cpu(*(u32*)p); ++ p += 4; ++ len += 4; ++ ++#ifdef NOPE ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4); ++#endif ++ udelay(10); ++ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA); ++#endif ++ w32 = read_slavemem32 (adev, offset + len - 4); ++ ++ if (unlikely(w32 != v32)) { ++ printk("acx: FATAL: firmware upload: " ++ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n" ++ "I/O timing issues or defective memory, with DWL-xx0+? " ++ "ACX_IO_WIDTH=16 may help. Please report\n", ++ len, v32, w32); ++ result = NOT_OK; ++ break; ++ } ++ ++ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24); ++ } ++ ++ /* sum control verification */ ++ if (result != NOT_OK) { ++ if (sum != le32_to_cpu(fw_image->chksum)) { ++ printk("acx: FATAL: firmware upload: " ++ "checksums don't match!\n"); ++ result = NOT_OK; ++ } ++ } ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_upload_fw ++** ++** Called from acx_reset_dev ++*/ ++static int ++acxmem_s_upload_fw(acx_device_t *adev) ++{ ++ firmware_image_t *fw_image = NULL; ++ int res = NOT_OK; ++ int try; ++ u32 file_size; ++ char *filename = "WLANGEN.BIN"; ++#ifdef PATCH_AROUND_BAD_SPOTS ++ u32 offset; ++ int i; ++ /* ++ * arm-linux-objdump -d patch.bin, or ++ * od -Ax -t x4 patch.bin after finding the bounds ++ * of the .text section with arm-linux-objdump -s patch.bin ++ */ ++ u32 patch[] = { ++ 0xe584c030, 0xe59fc008, ++ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c, ++ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a, ++ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24, ++ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db, ++ 0x60ca6003, 0xbdf0750a, 0xffff0808 ++ }; ++#endif ++ ++ FN_ENTER; ++ /* No combined image; tell common we need the radio firmware, too */ ++ adev->need_radio_fw = 1; ++ ++ fw_image = acx_s_read_fw(adev->dev, filename, &file_size); ++ if (!fw_image) { ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++ } ++ ++ for (try = 1; try <= 5; try++) { ++ res = acxmem_s_write_fw(adev, fw_image, 0); ++ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res); ++ if (OK == res) { ++ res = acxmem_s_validate_fw(adev, fw_image, 0); ++ log(L_DEBUG|L_INIT, "acx_validate_fw " ++ "(main): %d\n", res); ++ } ++ ++ if (OK == res) { ++ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED); ++ break; ++ } ++ printk("acx: firmware upload attempt #%d FAILED, " ++ "retrying...\n", try); ++ acx_s_msleep(1000); /* better wait for a while... */ ++ } ++ ++#ifdef PATCH_AROUND_BAD_SPOTS ++ /* ++ * Only want to do this if the firmware is exactly what we expect for an ++ * iPaq 4700; otherwise, bad things would ensue. ++ */ ++ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) || ++ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) { ++ /* ++ * Put the patch after the main firmware image. 0x950c contains ++ * the ACX's idea of the end of the firmware. Use that location to ++ * load ours (which depends on that location being 0xab58) then ++ * update that location to point to after ours. ++ */ ++ ++ offset = read_slavemem32 (adev, 0x950c); ++ ++ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset); ++ ++ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) { ++ write_slavemem32 (adev, offset, patch[i]); ++ offset += sizeof(u32); ++ } ++ ++ /* ++ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58 ++ */ ++ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4); ++ ++ /* ++ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74 ++ * ++ * 4a00 ldr r2, [pc, #0] ++ * 4710 bx r2 ++ * .data 0xab74+1 ++ */ ++ write_slavemem32 (adev, 0x1f40, 0x47104a00); ++ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1); ++ ++ /* ++ * Bump the end of the firmware up to beyond our patch. ++ */ ++ write_slavemem32 (adev, 0x950c, offset); ++ ++ } ++#endif ++ ++ vfree(fw_image); ++ ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_upload_radio ++** ++** Uploads the appropriate radio module firmware into the card. ++*/ ++int ++acxmem_s_upload_radio(acx_device_t *adev) ++{ ++ acx_ie_memmap_t mm; ++ firmware_image_t *radio_image; ++ acx_cmd_radioinit_t radioinit; ++ int res = NOT_OK; ++ int try; ++ u32 offset; ++ u32 size; ++ char filename[sizeof("RADIONN.BIN")]; ++ ++ if (!adev->need_radio_fw) return OK; ++ ++ FN_ENTER; ++ ++ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP); ++ offset = le32_to_cpu(mm.CodeEnd); ++ ++ snprintf(filename, sizeof(filename), "RADIO%02x.BIN", ++ adev->radio_type); ++ radio_image = acx_s_read_fw(adev->dev, filename, &size); ++ if (!radio_image) { ++ printk("acx: can't load radio module '%s'\n", filename); ++ goto fail; ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0); ++ ++ for (try = 1; try <= 5; try++) { ++ res = acxmem_s_write_fw(adev, radio_image, offset); ++ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res); ++ if (OK == res) { ++ res = acxmem_s_validate_fw(adev, radio_image, offset); ++ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res); ++ } ++ ++ if (OK == res) ++ break; ++ printk("acx: radio firmware upload attempt #%d FAILED, " ++ "retrying...\n", try); ++ acx_s_msleep(1000); /* better wait for a while... */ ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0); ++ radioinit.offset = cpu_to_le32(offset); ++ ++ /* no endian conversion needed, remains in card CPU area: */ ++ radioinit.len = radio_image->size; ++ ++ vfree(radio_image); ++ ++ if (OK != res) ++ goto fail; ++ ++ /* will take a moment so let's have a big timeout */ ++ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT, ++ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000)); ++ ++ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP); ++ ++fail: ++ FN_EXIT1(res); ++ return res; ++} ++ ++/*********************************************************************** ++** acxmem_l_reset_mac ++** ++** MAC will be reset ++** Call context: reset_dev ++*/ ++static void ++acxmem_l_reset_mac(acx_device_t *adev) ++{ ++ int count; ++ FN_ENTER; ++ ++ /* halt eCPU */ ++ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1); ++ ++ /* now do soft reset of eCPU, set bit */ ++ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1); ++ log(L_DEBUG, "%s: enable soft reset...\n", __func__); ++ ++ /* Windows driver sleeps here for a while with this sequence */ ++ for (count = 0; count < 200; count++) { ++ udelay (50); ++ } ++ ++ /* now clear bit again: deassert eCPU reset */ ++ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__); ++ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1); ++ ++ /* now start a burst read from initial EEPROM */ ++ set_regbits (adev, IO_ACX_EE_START, 0x1); ++ ++ /* ++ * Windows driver sleeps here for a while with this sequence ++ */ ++ for (count = 0; count < 200; count++) { ++ udelay (50); ++ } ++ ++ /* Windows driver writes 0x10000 to register 0x808 here */ ++ ++ write_reg32 (adev, 0x808, 0x10000); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_verify_init ++*/ ++static int ++acxmem_s_verify_init(acx_device_t *adev) ++{ ++ int result = NOT_OK; ++ unsigned long timeout; ++ ++ FN_ENTER; ++ ++ timeout = jiffies + 2*HZ; ++ for (;;) { ++ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES); ++ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) { ++ result = OK; ++ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD); ++ break; ++ } ++ if (time_after(jiffies, timeout)) ++ break; ++ /* Init may take up to ~0.5 sec total */ ++ acx_s_msleep(50); ++ } ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** A few low-level helpers ++** ++** Note: these functions are not protected by lock ++** and thus are never allowed to be called from IRQ. ++** Also they must not race with fw upload which uses same hw regs ++*/ ++ ++/*********************************************************************** ++** acxmem_write_cmd_type_status ++*/ ++ ++static inline void ++acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status) ++{ ++ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16)); ++ write_flush(adev); ++} ++ ++ ++/*********************************************************************** ++** acxmem_read_cmd_type_status ++*/ ++static u32 ++acxmem_read_cmd_type_status(acx_device_t *adev) ++{ ++ u32 cmd_type, cmd_status; ++ ++ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area); ++ ++ cmd_status = (cmd_type >> 16); ++ cmd_type = (u16)cmd_type; ++ ++ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n", ++ cmd_type, cmd_status, ++ acx_cmd_status_str(cmd_status)); ++ ++ return cmd_status; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_reset_dev ++** ++** Arguments: ++** netdevice that contains the adev variable ++** Returns: ++** NOT_OK on fail ++** OK on success ++** Side effects: ++** device is hard reset ++** Call context: ++** acxmem_e_probe ++** Comment: ++** This resets the device using low level hardware calls ++** as well as uploads and verifies the firmware to the card ++*/ ++ ++static inline void ++init_mboxes(acx_device_t *adev) ++{ ++ u32 cmd_offs, info_offs; ++ ++ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS); ++ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS); ++ adev->cmd_area = (u8*) cmd_offs; ++ adev->info_area = (u8*) info_offs; ++ /* ++ log(L_DEBUG, "iobase2=%p\n" ++ */ ++ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n" ++ "info_mbox_offset=%X info_area=%p\n", ++ cmd_offs, adev->cmd_area, ++ info_offs, adev->info_area); ++} ++ ++ ++static inline void ++read_eeprom_area(acx_device_t *adev) ++{ ++#if ACX_DEBUG > 1 ++ int offs; ++ u8 tmp; ++ ++ for (offs = 0x8c; offs < 0xb9; offs++) ++ acxmem_read_eeprom_byte(adev, offs, &tmp); ++#endif ++} ++ ++static int ++acxmem_s_reset_dev(acx_device_t *adev) ++{ ++ const char* msg = ""; ++ unsigned long flags; ++ int result = NOT_OK; ++ u16 hardware_info; ++ u16 ecpu_ctrl; ++ int count; ++ u32 tmp; ++ ++ FN_ENTER; ++ /* ++ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0); ++ */ ++ /* reset the device to make sure the eCPU is stopped ++ * to upload the firmware correctly */ ++ ++ acx_lock(adev, flags); ++ ++ /* Windows driver does some funny things here */ ++ /* ++ * clear bit 0x200 in register 0x2A0 ++ */ ++ clear_regbits (adev, 0x2A0, 0x200); ++ ++ /* ++ * Set bit 0x200 in ACX_GPIO_OUT ++ */ ++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200); ++ ++ /* ++ * read register 0x900 until its value is 0x8400104C, sleeping ++ * in between reads if it's not immediate ++ */ ++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID); ++ count = 500; ++ while (count-- && (tmp != ACX_VENDOR_ID)) { ++ mdelay (10); ++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID); ++ } ++ ++ /* end what Windows driver does */ ++ ++ acxmem_l_reset_mac(adev); ++ ++ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1; ++ if (!ecpu_ctrl) { ++ msg = "eCPU is already running. "; ++ goto end_unlock; ++ } ++ ++#ifdef WE_DONT_NEED_THAT_DO_WE ++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) { ++ /* eCPU most likely means "embedded CPU" */ ++ msg = "eCPU did not start after boot from flash. "; ++ goto end_unlock; ++ } ++ ++ /* check sense on reset flags */ ++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) { ++ printk("%s: eCPU did not start after boot (SOR), " ++ "is this fatal?\n", adev->ndev->name); ++ } ++#endif ++ /* scan, if any, is stopped now, setting corresponding IRQ bit */ ++ adev->irq_status |= HOST_INT_SCAN_COMPLETE; ++ ++ acx_unlock(adev, flags); ++ ++ /* need to know radio type before fw load */ ++ /* Need to wait for arrival of this information in a loop, ++ * most probably since eCPU runs some init code from EEPROM ++ * (started burst read in reset_mac()) which also ++ * sets the radio type ID */ ++ ++ count = 0xffff; ++ do { ++ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION); ++ if (!--count) { ++ msg = "eCPU didn't indicate radio type"; ++ goto end_fail; ++ } ++ cpu_relax(); ++ } while (!(hardware_info & 0xff00)); /* radio type still zero? */ ++ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff); ++ /* printk("DEBUG: count %d\n", count); */ ++ adev->form_factor = hardware_info & 0xff; ++ adev->radio_type = hardware_info >> 8; ++ ++ /* load the firmware */ ++ if (OK != acxmem_s_upload_fw(adev)) ++ goto end_fail; ++ ++ /* acx_s_msleep(10); this one really shouldn't be required */ ++ ++ /* now start eCPU by clearing bit */ ++ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1); ++ log(L_DEBUG, "booted eCPU up and waiting for completion...\n"); ++ ++ /* Windows driver clears bit 0x200 in register 0x2A0 here */ ++ clear_regbits (adev, 0x2A0, 0x200); ++ ++ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */ ++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200); ++ /* wait for eCPU bootup */ ++ if (OK != acxmem_s_verify_init(adev)) { ++ msg = "timeout waiting for eCPU. "; ++ goto end_fail; ++ } ++ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n"); ++ init_mboxes(adev); ++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0); ++ ++ /* test that EEPROM is readable */ ++ read_eeprom_area(adev); ++ ++ result = OK; ++ goto end; ++ ++/* Finish error message. Indicate which function failed */ ++end_unlock: ++ acx_unlock(adev, flags); ++end_fail: ++ printk("acx: %sreset_dev() FAILED\n", msg); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_issue_cmd_timeo ++** ++** Sends command to fw, extract result ++** ++** NB: we do _not_ take lock inside, so be sure to not touch anything ++** which may interfere with IRQ handler operation ++** ++** TODO: busy wait is a bit silly, so: ++** 1) stop doing many iters - go to sleep after first ++** 2) go to waitqueue based approach: wait, not poll! ++*/ ++#undef FUNC ++#define FUNC "issue_cmd" ++ ++#if !ACX_DEBUG ++int ++acxmem_s_issue_cmd_timeo( ++ acx_device_t *adev, ++ unsigned int cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned cmd_timeout) ++{ ++#else ++int ++acxmem_s_issue_cmd_timeo_debug( ++ acx_device_t *adev, ++ unsigned cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned cmd_timeout, ++ const char* cmdstr) ++{ ++ unsigned long start = jiffies; ++#endif ++ const char *devname; ++ unsigned counter; ++ u16 irqtype; ++ int i, j; ++ u8 *p; ++ u16 cmd_status; ++ unsigned long timeout; ++ ++ FN_ENTER; ++ ++ devname = adev->ndev->name; ++ if (!devname || !devname[0] || devname[4]=='%') ++ devname = "acx"; ++ ++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n", ++ cmdstr, buflen, cmd_timeout, ++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1); ++ ++ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) { ++ printk("%s: "FUNC"(): firmware is not loaded yet, " ++ "cannot execute commands!\n", devname); ++ goto bad; ++ } ++ ++ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) { ++ printk("input buffer (len=%u):\n", buflen); ++ acx_dump_bytes(buffer, buflen); ++ } ++ ++ /* wait for firmware to become idle for our command submission */ ++ timeout = HZ/5; ++ counter = (timeout * 1000 / HZ) - 1; /* in ms */ ++ timeout += jiffies; ++ do { ++ cmd_status = acxmem_read_cmd_type_status(adev); ++ /* Test for IDLE state */ ++ if (!cmd_status) ++ break; ++ if (counter % 8 == 0) { ++ if (time_after(jiffies, timeout)) { ++ counter = 0; ++ break; ++ } ++ /* we waited 8 iterations, no luck. Sleep 8 ms */ ++ acx_s_msleep(8); ++ } ++ } while (likely(--counter)); ++ ++ if (!counter) { ++ /* the card doesn't get idle, we're in trouble */ ++ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n", ++ devname, cmd_status); ++#if DUMP_IF_SLOW > 0 ++ dump_acxmem (adev, 0, 0x10000); ++ panic ("not idle"); ++#endif ++ goto bad; ++ } else if (counter < 190) { /* if waited >10ms... */ ++ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. " ++ "Please report\n", 199 - counter); ++ } ++ ++ /* now write the parameters of the command if needed */ ++ if (buffer && buflen) { ++ /* if it's an INTERROGATE command, just pass the length ++ * of parameters to read, as data */ ++#if CMD_DISCOVERY ++ if (cmd == ACX1xx_CMD_INTERROGATE) ++ memset_io(adev->cmd_area + 4, 0xAA, buflen); ++#endif ++ /* ++ * slave memory version ++ */ ++ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer, ++ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen); ++ } ++ /* now write the actual command type */ ++ acxmem_write_cmd_type_status(adev, cmd, 0); ++ ++ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */ ++ adev->irq_status &= ~HOST_INT_CMD_COMPLETE; ++ ++ /* execute command */ ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD); ++ write_flush(adev); ++ ++ /* wait for firmware to process command */ ++ ++ /* Ensure nonzero and not too large timeout. ++ ** Also converts e.g. 100->99, 200->199 ++ ** which is nice but not essential */ ++ cmd_timeout = (cmd_timeout-1) | 1; ++ if (unlikely(cmd_timeout > 1199)) ++ cmd_timeout = 1199; ++ ++ /* we schedule away sometimes (timeout can be large) */ ++ counter = cmd_timeout; ++ timeout = jiffies + cmd_timeout * HZ / 1000; ++ do { ++ if (!adev->irqs_active) { /* IRQ disabled: poll */ ++ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES); ++ if (irqtype & HOST_INT_CMD_COMPLETE) { ++ write_reg16(adev, IO_ACX_IRQ_ACK, ++ HOST_INT_CMD_COMPLETE); ++ break; ++ } ++ } else { /* Wait when IRQ will set the bit */ ++ irqtype = adev->irq_status; ++ if (irqtype & HOST_INT_CMD_COMPLETE) ++ break; ++ } ++ ++ if (counter % 8 == 0) { ++ if (time_after(jiffies, timeout)) { ++ counter = 0; ++ break; ++ } ++ /* we waited 8 iterations, no luck. Sleep 8 ms */ ++ acx_s_msleep(8); ++ } ++ } while (likely(--counter)); ++ ++ /* save state for debugging */ ++ cmd_status = acxmem_read_cmd_type_status(adev); ++ ++ /* put the card in IDLE state */ ++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0); ++ ++ if (!counter) { /* timed out! */ ++ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. " ++ "irq bits:0x%04X irq_status:0x%04X timeout:%dms " ++ "cmd_status:%d (%s)\n", ++ devname, (adev->irqs_active) ? "waiting" : "polling", ++ irqtype, adev->irq_status, cmd_timeout, ++ cmd_status, acx_cmd_status_str(cmd_status)); ++ printk("%s: "FUNC"(): device irq status 0x%04x\n", ++ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES)); ++ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n", ++ devname, ++ read_reg16 (adev, IO_ACX_IRQ_MASK), ++ read_reg16 (adev, IO_ACX_FEMR)); ++ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) { ++ printk ("acxmem: firmware probably hosed - reloading\n"); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++ { ++ pm_message_t state; ++ /* acxmem_e_suspend (resume_pdev, state); */ ++ acxmem_e_suspend (adev->ndev , state); ++ } ++#else ++ acxmem_e_suspend (adev, 0); ++#endif ++ { ++ resume_ndev = adev->ndev; ++ fw_resumer (NULL); ++ } ++ } ++ ++ goto bad; ++ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */ ++ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. " ++ "count:%d. Please report\n", ++ (adev->irqs_active) ? "waited" : "polled", ++ cmd_timeout - counter, counter); ++ } ++ ++ if (1 != cmd_status) { /* it is not a 'Success' */ ++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). " ++ "Took %dms of %d\n", ++ devname, cmd_status, acx_cmd_status_str(cmd_status), ++ cmd_timeout - counter, cmd_timeout); ++ /* zero out result buffer ++ * WARNING: this will trash stack in case of illegally large input ++ * length! */ ++ if (buflen > 388) { ++ /* ++ * 388 is maximum command length ++ */ ++ printk ("invalid length 0x%08x\n", buflen); ++ buflen = 388; ++ } ++ p = (u8 *) buffer; ++ for (i = 0; i < buflen; i+= 16) { ++ printk ("%04x:", i); ++ for (j = 0; (j < 16) && (i+j < buflen); j++) { ++ printk (" %02x", *p++); ++ } ++ printk ("\n"); ++ } ++ if (buffer && buflen) ++ memset(buffer, 0, buflen); ++ goto bad; ++ } ++ ++ /* read in result parameters if needed */ ++ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) { ++ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen); ++ if (acx_debug & L_DEBUG) { ++ printk("output buffer (len=%u): ", buflen); ++ acx_dump_bytes(buffer, buflen); ++ } ++ } ++ ++/* ok: */ ++ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n", ++ cmdstr, jiffies - start); ++ FN_EXIT1(OK); ++ return OK; ++ ++bad: ++ /* Give enough info so that callers can avoid ++ ** printing their own diagnostic messages */ ++#if ACX_DEBUG ++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr); ++#else ++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd); ++#endif ++ dump_stack(); ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++#if defined(NONESSENTIAL_FEATURES) ++typedef struct device_id { ++ unsigned char id[6]; ++ char *descr; ++ char *type; ++} device_id_t; ++ ++static const device_id_t ++device_ids[] = ++{ ++ { ++ {'G', 'l', 'o', 'b', 'a', 'l'}, ++ NULL, ++ NULL, ++ }, ++ { ++ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, ++ "uninitialized", ++ "SpeedStream SS1021 or Gigafast WF721-AEX" ++ }, ++ { ++ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85}, ++ "non-standard", ++ "DrayTek Vigor 520" ++ }, ++ { ++ {'?', '?', '?', '?', '?', '?'}, ++ "non-standard", ++ "Level One WPC-0200" ++ }, ++ { ++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ "empty", ++ "DWL-650+ variant" ++ } ++}; ++ ++static void ++acx_show_card_eeprom_id(acx_device_t *adev) ++{ ++ unsigned char buffer[CARD_EEPROM_ID_SIZE]; ++ int i; ++ ++ memset(&buffer, 0, CARD_EEPROM_ID_SIZE); ++ /* use direct EEPROM access */ ++ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) { ++ if (OK != acxmem_read_eeprom_byte(adev, ++ ACX100_EEPROM_ID_OFFSET + i, ++ &buffer[i])) { ++ printk("acx: reading EEPROM FAILED\n"); ++ break; ++ } ++ } ++ ++ for (i = 0; i < VEC_SIZE(device_ids); i++) { ++ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) { ++ if (device_ids[i].descr) { ++ printk("acx: EEPROM card ID string check " ++ "found %s card ID: is this %s?\n", ++ device_ids[i].descr, device_ids[i].type); ++ } ++ break; ++ } ++ } ++ if (i == VEC_SIZE(device_ids)) { ++ printk("acx: EEPROM card ID string check found " ++ "unknown card: expected 'Global', got '%.*s\'. " ++ "Please report\n", CARD_EEPROM_ID_SIZE, buffer); ++ } ++} ++#endif /* NONESSENTIAL_FEATURES */ ++ ++/*********************************************************************** ++** acxmem_free_desc_queues ++** ++** Releases the queues that have been allocated, the ++** others have been initialised to NULL so this ++** function can be used if only part of the queues were allocated. ++*/ ++ ++void ++acxmem_free_desc_queues(acx_device_t *adev) ++{ ++#define ACX_FREE_QUEUE(size, ptr, phyaddr) \ ++ if (ptr) { \ ++ kfree(ptr); \ ++ ptr = NULL; \ ++ size = 0; \ ++ } ++ ++ FN_ENTER; ++ ++ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy); ++ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy); ++ ++ adev->txdesc_start = NULL; ++ ++ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy); ++ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy); ++ ++ adev->rxdesc_start = NULL; ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_delete_dma_regions ++*/ ++static void ++acxmem_s_delete_dma_regions(acx_device_t *adev) ++{ ++ unsigned long flags; ++ ++ FN_ENTER; ++ /* disable radio Tx/Rx. Shouldn't we use the firmware commands ++ * here instead? Or are we that much down the road that it's no ++ * longer possible here? */ ++ /* ++ * slave memory interface really doesn't like this. ++ */ ++ /* ++ write_reg16(adev, IO_ACX_ENABLE, 0); ++ */ ++ ++ acx_s_msleep(100); ++ ++ acx_lock(adev, flags); ++ acxmem_free_desc_queues(adev); ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_probe ++** ++** Probe routine called when a PCI device w/ matching ID is found. ++** Here's the sequence: ++** - Allocate the PCI resources. ++** - Read the PCMCIA attribute memory to make sure we have a WLAN card ++** - Reset the MAC ++** - Initialize the dev and wlan data ++** - Initialize the MAC ++** ++** pdev - ptr to pci device structure containing info about pci configuration ++** id - ptr to the device id entry that matched this device ++*/ ++static const u16 ++IO_ACX100[] = ++{ ++ 0x0000, /* IO_ACX_SOFT_RESET */ ++ ++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */ ++ 0x0018, /* IO_ACX_SLV_MEM_DATA */ ++ 0x001c, /* IO_ACX_SLV_MEM_CTL */ ++ 0x0020, /* IO_ACX_SLV_END_CTL */ ++ ++ 0x0034, /* IO_ACX_FEMR */ ++ ++ 0x007c, /* IO_ACX_INT_TRIG */ ++ 0x0098, /* IO_ACX_IRQ_MASK */ ++ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */ ++ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */ ++ 0x00ac, /* IO_ACX_IRQ_ACK */ ++ 0x00b0, /* IO_ACX_HINT_TRIG */ ++ ++ 0x0104, /* IO_ACX_ENABLE */ ++ ++ 0x0250, /* IO_ACX_EEPROM_CTL */ ++ 0x0254, /* IO_ACX_EEPROM_ADDR */ ++ 0x0258, /* IO_ACX_EEPROM_DATA */ ++ 0x025c, /* IO_ACX_EEPROM_CFG */ ++ ++ 0x0268, /* IO_ACX_PHY_ADDR */ ++ 0x026c, /* IO_ACX_PHY_DATA */ ++ 0x0270, /* IO_ACX_PHY_CTL */ ++ ++ 0x0290, /* IO_ACX_GPIO_OE */ ++ ++ 0x0298, /* IO_ACX_GPIO_OUT */ ++ ++ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */ ++ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */ ++ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */ ++ ++ 0x02d0, /* IO_ACX_EE_START */ ++ 0x02d4, /* IO_ACX_SOR_CFG */ ++ 0x02d8 /* IO_ACX_ECPU_CTRL */ ++}; ++ ++static const u16 ++IO_ACX111[] = ++{ ++ 0x0000, /* IO_ACX_SOFT_RESET */ ++ ++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */ ++ 0x0018, /* IO_ACX_SLV_MEM_DATA */ ++ 0x001c, /* IO_ACX_SLV_MEM_CTL */ ++ 0x0020, /* IO_ACX_SLV_MEM_CP */ ++ ++ 0x0034, /* IO_ACX_FEMR */ ++ ++ 0x00b4, /* IO_ACX_INT_TRIG */ ++ 0x00d4, /* IO_ACX_IRQ_MASK */ ++ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */ ++ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */ ++ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */ ++ 0x00e8, /* IO_ACX_IRQ_ACK */ ++ 0x00ec, /* IO_ACX_HINT_TRIG */ ++ ++ 0x01d0, /* IO_ACX_ENABLE */ ++ ++ 0x0338, /* IO_ACX_EEPROM_CTL */ ++ 0x033c, /* IO_ACX_EEPROM_ADDR */ ++ 0x0340, /* IO_ACX_EEPROM_DATA */ ++ 0x0344, /* IO_ACX_EEPROM_CFG */ ++ ++ 0x0350, /* IO_ACX_PHY_ADDR */ ++ 0x0354, /* IO_ACX_PHY_DATA */ ++ 0x0358, /* IO_ACX_PHY_CTL */ ++ ++ 0x0374, /* IO_ACX_GPIO_OE */ ++ ++ 0x037c, /* IO_ACX_GPIO_OUT */ ++ ++ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */ ++ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */ ++ 0x0390, /* IO_ACX_EEPROM_INFORMATION */ ++ ++ 0x0100, /* IO_ACX_EE_START */ ++ 0x0104, /* IO_ACX_SOR_CFG */ ++ 0x0108, /* IO_ACX_ECPU_CTRL */ ++}; ++ ++static void ++dummy_netdev_init(struct net_device *ndev) {} ++ ++/* ++ * Most of the acx specific pieces of hardware reset. ++ */ ++static int ++acxmem_complete_hw_reset (acx_device_t *adev) ++{ ++ acx111_ie_configoption_t co; ++ ++ /* NB: read_reg() reads may return bogus data before reset_dev(), ++ * since the firmware which directly controls large parts of the I/O ++ * registers isn't initialized yet. ++ * acx100 seems to be more affected than acx111 */ ++ if (OK != acxmem_s_reset_dev (adev)) ++ return -1; ++ ++ if (IS_ACX100(adev)) { ++ /* ACX100: configopt struct in cmd mailbox - directly after reset */ ++ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co)); ++ } ++ ++ if (OK != acx_s_init_mac(adev)) ++ return -3; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111: configopt struct needs to be queried after full init */ ++ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS); ++ } ++ ++ /* ++ * Set up transmit buffer administration ++ */ ++ init_acx_txbuf (adev); ++ ++ /* ++ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor ++ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT ++ */ ++ if (adev->form_factor == 3) { ++ set_regbits (adev, 0x288, 0x01000000); ++ set_regbits (adev, 0x298, 1<<9); ++ } ++ ++/* TODO: merge them into one function, they are called just once and are the same for pci & usb */ ++ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version)) ++ return -2; ++ ++ acx_s_parse_configoption(adev, &co); ++ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */ ++ acx_display_hardware_details(adev); ++ ++ return 0; ++} ++ ++static int acx_init_netdev(struct net_device *ndev, struct device *dev, int base_addr, int addr_size, int irq) ++{ ++ const char *chip_name; ++ int result = -EIO; ++ int err; ++ u8 chip_type; ++ acx_device_t *adev = NULL; ++ ++ FN_ENTER; ++ ++ /* FIXME: prism54 calls pci_set_mwi() here, ++ * should we do/support the same? */ ++ ++ /* chiptype is u8 but id->driver_data is ulong ++ ** Works for now (possible values are 1 and 2) */ ++ chip_type = CHIPTYPE_ACX100; ++ /* acx100 and acx111 have different PCI memory regions */ ++ if (chip_type == CHIPTYPE_ACX100) { ++ chip_name = "ACX100"; ++ } else if (chip_type == CHIPTYPE_ACX111) { ++ chip_name = "ACX111"; ++ } else { ++ printk("acx: unknown chip type 0x%04X\n", chip_type); ++ goto fail_unknown_chiptype; ++ } ++ ++ printk("acx: found %s-based wireless network card\n", chip_name); ++ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug); ++ ++ ++ dev_set_drvdata(dev, ndev); ++ ++ ether_setup(ndev); ++ ++ ndev->irq = irq; ++ ++ ndev->base_addr = base_addr; ++printk (KERN_INFO "memwinbase=%lx memwinsize=%u\n",memwin.Base,memwin.Size); ++ if (addr_size == 0 || ndev->irq == 0) ++ goto fail_hw_params; ++ ndev->open = &acxmem_e_open; ++ ndev->stop = &acxmem_e_close; ++ //pdev->dev.release = &acxmem_e_release; ++ ndev->hard_start_xmit = &acx_i_start_xmit; ++ ndev->get_stats = &acx_e_get_stats; ++#if IW_HANDLER_VERSION <= 5 ++ ndev->get_wireless_stats = &acx_e_get_wireless_stats; ++#endif ++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def; ++ ndev->set_multicast_list = &acxmem_i_set_multicast_list; ++ ndev->tx_timeout = &acxmem_i_tx_timeout; ++ ndev->change_mtu = &acx_e_change_mtu; ++ ndev->watchdog_timeo = 4 * HZ; ++ ++ adev = ndev2adev(ndev); ++ spin_lock_init(&adev->lock); /* initial state: unlocked */ ++ spin_lock_init(&adev->txbuf_lock); ++ /* We do not start with downed sem: we want PARANOID_LOCKING to work */ ++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */ ++ /* since nobody can see new netdev yet, we can as well ++ ** just _presume_ that we're under sem (instead of actually taking it): */ ++ /* acx_sem_lock(adev); */ ++ adev->dev = dev; ++ adev->ndev = ndev; ++ adev->dev_type = DEVTYPE_MEM; ++ adev->chip_type = chip_type; ++ adev->chip_name = chip_name; ++ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111; ++ adev->membase = (volatile u32 *) ndev->base_addr; ++ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size); ++ /* to find crashes due to weird driver access ++ * to unconfigured interface (ifup) */ ++ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead; ++ ++#if defined(NONESSENTIAL_FEATURES) ++ acx_show_card_eeprom_id(adev); ++#endif /* NONESSENTIAL_FEATURES */ ++ ++#ifdef SET_MODULE_OWNER ++ SET_MODULE_OWNER(ndev); ++#endif ++ // need to fix that @@ ++ SET_NETDEV_DEV(ndev, dev); ++ ++ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq); ++ ++ /* ok, pci setup is finished, now start initializing the card */ ++ ++ if (OK != acxmem_complete_hw_reset (adev)) ++ goto fail_reset; ++ ++ /* ++ * Set up default things for most of the card settings. ++ */ ++ acx_s_set_defaults(adev); ++ ++ /* Register the card, AFTER everything else has been set up, ++ * since otherwise an ioctl could step on our feet due to ++ * firmware operations happening in parallel or uninitialized data */ ++ err = register_netdev(ndev); ++ if (OK != err) { ++ printk("acx: register_netdev() FAILED: %d\n", err); ++ goto fail_register_netdev; ++ } ++ ++ acx_proc_register_entries(ndev); ++ ++ /* Now we have our device, so make sure the kernel doesn't try ++ * to send packets even though we're not associated to a network yet */ ++ acx_stop_queue(ndev, "on probe"); ++ acx_carrier_off(ndev, "on probe"); ++ ++ /* ++ * Set up a default monitor type so that poor combinations of initialization ++ * sequences in monitor mode don't end up destroying the hardware type. ++ */ ++ adev->monitor_type = ARPHRD_ETHER; ++ ++ /* ++ * Register to receive inetaddr notifier changes. This will allow us to ++ * catch if the user changes the MAC address of the interface. ++ */ ++ register_netdevice_notifier(&acx_netdev_notifier); ++ ++ /* after register_netdev() userspace may start working with dev ++ * (in particular, on other CPUs), we only need to up the sem */ ++ /* acx_sem_unlock(adev); */ ++ ++ printk("acx "ACX_RELEASE": net device %s, driver compiled " ++ "against wireless extensions %d and Linux %s\n", ++ ndev->name, WIRELESS_EXT, UTS_RELEASE); ++ ++#if CMD_DISCOVERY ++ great_inquisitor(adev); ++#endif ++ ++ result = OK; ++ goto done; ++ ++ /* error paths: undo everything in reverse order... */ ++ ++fail_register_netdev: ++ ++ acxmem_s_delete_dma_regions(adev); ++ ++fail_reset: ++fail_hw_params: ++ free_netdev(ndev); ++fail_unknown_chiptype: ++ ++ ++done: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_remove ++** ++** Shut device down (if not hot unplugged) ++** and deallocate PCI resources for the acx chip. ++** ++** pdev - ptr to PCI device structure containing info about pci configuration ++*/ ++static int __devexit ++acxmem_e_remove(struct pcmcia_device *link) ++{ ++ struct net_device *ndev; ++ acx_device_t *adev; ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ ndev = ((local_info_t*)link->priv)->ndev; ++ if (!ndev) { ++ log(L_DEBUG, "%s: card is unused. Skipping any release code\n", ++ __func__); ++ goto end; ++ } ++ ++ adev = ndev2adev(ndev); ++ ++ /* If device wasn't hot unplugged... */ ++ if (adev_present(adev)) { ++ ++ acx_sem_lock(adev); ++ ++ /* disable both Tx and Rx to shut radio down properly */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0); ++ ++#ifdef REDUNDANT ++ /* put the eCPU to sleep to save power ++ * Halting is not possible currently, ++ * since not supported by all firmware versions */ ++ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0); ++#endif ++ acx_lock(adev, flags); ++ ++ /* disable power LED to save power :-) */ ++ log(L_INIT, "switching off power LED to save power\n"); ++ acxmem_l_power_led(adev, 0); ++ ++ /* stop our eCPU */ ++ if (IS_ACX111(adev)) { ++ /* FIXME: does this actually keep halting the eCPU? ++ * I don't think so... ++ */ ++ acxmem_l_reset_mac(adev); ++ } else { ++ u16 temp; ++ ++ /* halt eCPU */ ++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1; ++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp); ++ write_flush(adev); ++ } ++ ++ acx_unlock(adev, flags); ++ ++ acx_sem_unlock(adev); ++ } ++ ++ ++ /* ++ * Unregister the notifier chain ++ */ ++ unregister_netdevice_notifier(&acx_netdev_notifier); ++ ++ /* unregister the device to not let the kernel ++ * (e.g. ioctls) access a half-deconfigured device ++ * NB: this will cause acxmem_e_close() to be called, ++ * thus we shouldn't call it under sem! */ ++ log(L_INIT, "removing device %s\n", ndev->name); ++ unregister_netdev(ndev); ++ ++ /* unregister_netdev ensures that no references to us left. ++ * For paranoid reasons we continue to follow the rules */ ++ acx_sem_lock(adev); ++ ++ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) { ++ acxmem_s_down(ndev); ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ } ++ ++ acx_proc_unregister_entries(ndev); ++ ++ acxmem_s_delete_dma_regions(adev); ++ ++ /* finally, clean up PCI bus state */ ++ if (adev->iobase) iounmap((void *)adev->iobase); ++ ++ acx_sem_unlock(adev); ++ ++ /* Free netdev (quite late, ++ * since otherwise we might get caught off-guard ++ * by a netdev timeout handler execution ++ * expecting to see a working dev...) */ ++ free_netdev(ndev); ++ ++ printk ("e_remove done\n"); ++end: ++ FN_EXIT0; ++ ++ return 0; ++} ++ ++ ++/*********************************************************************** ++** TODO: PM code needs to be fixed / debugged / tested. ++*/ ++#ifdef CONFIG_PM ++static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++acxmem_e_suspend( struct net_device *ndev, pm_message_t state) ++#else ++acxmem_e_suspend( struct net_device *ndev, u32 state) ++#endif ++{ ++ FN_ENTER; ++ acx_device_t *adev; ++ printk("acx: suspend handler is experimental!\n"); ++ printk("sus: dev %p\n", ndev); ++ ++ if (!netif_running(ndev)) ++ goto end; ++ // @@ need to get it from link or something like that ++ adev = ndev2adev(ndev); ++ printk("sus: adev %p\n", adev); ++ ++ acx_sem_lock(adev); ++ ++ netif_device_detach(adev->ndev); /* this one cannot sleep */ ++ acxmem_s_down(adev->ndev); ++ /* down() does not set it to 0xffff, but here we really want that */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ acxmem_s_delete_dma_regions(adev); ++ ++ /* ++ * Turn the ACX chip off. ++ */ ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++static void ++fw_resumer(struct work_struct *notused) ++{ ++ acx_device_t *adev; ++ struct net_device *ndev = resume_ndev; ++ ++ printk("acx: resume handler is experimental!\n"); ++ printk("rsm: got dev %p\n", ndev); ++ ++ if (!netif_running(ndev)) ++ return; ++ ++ adev = ndev2adev(ndev); ++ printk("rsm: got adev %p\n", adev); ++ ++ acx_sem_lock(adev); ++ ++ /* ++ * Turn on the ACX. ++ */ ++ ++ acxmem_complete_hw_reset (adev); ++ ++ /* ++ * done by acx_s_set_defaults for initial startup ++ */ ++ acxmem_set_interrupt_mask(adev); ++ ++ printk ("rsm: bringing up interface\n"); ++ SET_BIT (adev->set_mask, GETSET_ALL); ++ acxmem_s_up(ndev); ++ printk("rsm: acx up done\n"); ++ ++ /* now even reload all card parameters as they were before suspend, ++ * and possibly be back in the network again already :-) ++ */ ++ /* - most settings updated in acxmem_s_up() ++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) { ++ adev->set_mask = GETSET_ALL; ++ acx_s_update_card_settings(adev); ++ printk("rsm: settings updated\n"); ++ } ++ */ ++ netif_device_attach(ndev); ++ printk("rsm: device attached\n"); ++ ++ acx_sem_unlock(adev); ++} ++ ++DECLARE_WORK( fw_resume_work, fw_resumer ); ++ ++static int ++acxmem_e_resume(struct pcmcia_device *link) ++{ ++ FN_ENTER; ++ ++ //resume_pdev = pdev; ++ schedule_work( &fw_resume_work ); ++ ++ FN_EXIT0; ++ return OK; ++} ++#endif /* CONFIG_PM */ ++ ++ ++/*********************************************************************** ++** acxmem_s_up ++** ++** This function is called by acxmem_e_open (when ifconfig sets the device as up) ++** ++** Side effects: ++** - Enables on-card interrupt requests ++** - calls acx_s_start ++*/ ++ ++static void ++enable_acx_irq(acx_device_t *adev) ++{ ++ FN_ENTER; ++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask); ++ write_reg16(adev, IO_ACX_FEMR, 0x8000); ++ adev->irqs_active = 1; ++ FN_EXIT0; ++} ++ ++static void ++acxmem_s_up(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ enable_acx_irq(adev); ++ acx_unlock(adev, flags); ++ ++ /* acx fw < 1.9.3.e has a hardware timer, and older drivers ++ ** used to use it. But we don't do that anymore, our OS ++ ** has reliable software timers */ ++ init_timer(&adev->mgmt_timer); ++ adev->mgmt_timer.function = acx_i_timer; ++ adev->mgmt_timer.data = (unsigned long)adev; ++ ++ /* Need to set ACX_STATE_IFACE_UP first, or else ++ ** timer won't be started by acx_set_status() */ ++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ /* actual scan cmd will happen in start() */ ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); break; ++ case ACX_MODE_3_AP: ++ case ACX_MODE_MONITOR: ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break; ++ } ++ ++ acx_s_start(adev); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_down ++** ++** This disables the netdevice ++** ++** Side effects: ++** - disables on-card interrupt request ++*/ ++ ++static void ++disable_acx_irq(acx_device_t *adev) ++{ ++ FN_ENTER; ++ ++ /* I guess mask is not 0xffff because acx100 won't signal ++ ** cmd completion then (needed for ifup). ++ ** Someone with acx100 please confirm */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ adev->irqs_active = 0; ++ FN_EXIT0; ++} ++ ++static void ++acxmem_s_down(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ /* Disable IRQs first, so that IRQs cannot race with us */ ++ /* then wait until interrupts have finished executing on other CPUs */ ++ acx_lock(adev, flags); ++ disable_acx_irq(adev); ++ synchronize_irq(adev->pdev->irq); ++ acx_unlock(adev, flags); ++ ++ /* we really don't want to have an asynchronous tasklet disturb us ++ ** after something vital for its job has been shut down, so ++ ** end all remaining work now. ++ ** ++ ** NB: carrier_off (done by set_status below) would lead to ++ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK(). ++ ** That's why we do FLUSH first. ++ ** ++ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK() ++ ** waits for acx_e_after_interrupt_task to complete if it is running ++ ** on another CPU, but acx_e_after_interrupt_task ++ ** will sleep on sem forever, because it is taken by us! ++ ** Work around that by temporary sem unlock. ++ ** This will fail miserably if we'll be hit by concurrent ++ ** iwconfig or something in between. TODO! */ ++ acx_sem_unlock(adev); ++ FLUSH_SCHEDULED_WORK(); ++ acx_sem_lock(adev); ++ ++ /* This is possible: ++ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task -> ++ ** -> set_status(ASSOCIATED) -> wake_queue() ++ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK ++ ** lock/unlock is just paranoia, maybe not needed */ ++ acx_lock(adev, flags); ++ acx_stop_queue(ndev, "on ifdown"); ++ acx_set_status(adev, ACX_STATUS_0_STOPPED); ++ acx_unlock(adev, flags); ++ ++ /* kernel/timer.c says it's illegal to del_timer_sync() ++ ** a timer which restarts itself. We guarantee this cannot ++ ** ever happen because acx_i_timer() never does this if ++ ** status is ACX_STATUS_0_STOPPED */ ++ del_timer_sync(&adev->mgmt_timer); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_open ++** ++** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP ++** from clear to set. In other words: ifconfig up. ++** ++** Returns: ++** 0 success ++** >0 f/w reported error ++** <0 driver reported error ++*/ ++static int ++acxmem_e_open(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result = OK; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ acx_init_task_scheduler(adev); ++ ++/* TODO: pci_set_power_state(pdev, PCI_D0); ? */ ++ ++#if 0 ++ /* request shared IRQ handler */ ++ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) { ++ printk("%s: request_irq FAILED\n", ndev->name); ++ result = -EAGAIN; ++ goto done; ++ } ++ set_irq_type (ndev->irq, IRQT_FALLING); ++ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq); ++#endif ++ ++ /* ifup device */ ++ acxmem_s_up(ndev); ++ ++ /* We don't currently have to do anything else. ++ * The setup of the MAC should be subsequently completed via ++ * the mlme commands. ++ * Higher layers know we're ready from dev->start==1 and ++ * dev->tbusy==0. Our rx path knows to pass up received/ ++ * frames because of dev->flags&IFF_UP is true. ++ */ ++done: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_close ++** ++** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP ++** from set to clear. I.e. called by "ifconfig DEV down" ++** ++** Returns: ++** 0 success ++** >0 f/w reported error ++** <0 driver reported error ++*/ ++static int ++acxmem_e_close(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* ifdown device */ ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ if (netif_device_present(ndev)) { ++ acxmem_s_down(ndev); ++ } ++ ++ /* disable all IRQs, release shared IRQ handler */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ free_irq(ndev->irq, ndev); ++ ++/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */ ++ ++ /* We currently don't have to do anything else. ++ * Higher layers know we're not ready from dev->start==0 and ++ * dev->tbusy==1. Our rx path knows to not pass up received ++ * frames because of dev->flags&IFF_UP is false. ++ */ ++ acx_sem_unlock(adev); ++ ++ log(L_INIT, "closed device\n"); ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acxmem_i_tx_timeout ++** ++** Called from network core. Must not sleep! ++*/ ++static void ++acxmem_i_tx_timeout(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ unsigned int tx_num_cleaned; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ /* clean processed tx descs, they may have been completely full */ ++ tx_num_cleaned = acxmem_l_clean_txdesc(adev); ++ ++ /* nothing cleaned, yet (almost) no free buffers available? ++ * --> clean all tx descs, no matter which status!! ++ * Note that I strongly suspect that doing emergency cleaning ++ * may confuse the firmware. This is a last ditch effort to get ++ * ANYTHING to work again... ++ * ++ * TODO: it's best to simply reset & reinit hw from scratch... ++ */ ++ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) { ++ printk("%s: FAILED to free any of the many full tx buffers. " ++ "Switching to emergency freeing. " ++ "Please report!\n", ndev->name); ++ acxmem_l_clean_txdesc_emergency(adev); ++ } ++ ++ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status)) ++ acx_wake_queue(ndev, "after tx timeout"); ++ ++ /* stall may have happened due to radio drift, so recalib radio */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ ++ /* do unimportant work last */ ++ printk("%s: tx timeout!\n", ndev->name); ++ adev->stats.tx_errors++; ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_i_set_multicast_list ++** FIXME: most likely needs refinement ++*/ ++static void ++acxmem_i_set_multicast_list(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ /* firmwares don't have allmulti capability, ++ * so just use promiscuous mode instead in this case. */ ++ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) { ++ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS); ++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI); ++ SET_BIT(adev->set_mask, SET_RXCONFIG); ++ /* let kernel know in case *we* needed to set promiscuous */ ++ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI); ++ } else { ++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS); ++ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI); ++ SET_BIT(adev->set_mask, SET_RXCONFIG); ++ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI); ++ } ++ ++ /* cannot update card settings directly here, atomic context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG); ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxmem_l_process_rxdesc ++** ++** Called directly and only from the IRQ handler ++*/ ++ ++#if !ACX_DEBUG ++static inline void log_rxbuffer(const acx_device_t *adev) {} ++#else ++static void ++log_rxbuffer(const acx_device_t *adev) ++{ ++ register const struct rxhostdesc *rxhostdesc; ++ int i; ++ /* no FN_ENTER here, we don't want that */ ++ ++ rxhostdesc = adev->rxhostdesc_start; ++ if (unlikely(!rxhostdesc)) return; ++ for (i = 0; i < RX_CNT; i++) { ++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN)) ++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL))) ++ printk("rx: buf %d full\n", i); ++ rxhostdesc++; ++ } ++} ++#endif ++ ++static void ++acxmem_l_process_rxdesc(acx_device_t *adev) ++{ ++ register rxhostdesc_t *hostdesc; ++ register rxdesc_t *rxdesc; ++ unsigned count, tail; ++ u32 addr; ++ u8 Ctl_8; ++ ++ FN_ENTER; ++ ++ if (unlikely(acx_debug & L_BUFR)) ++ log_rxbuffer(adev); ++ ++ /* First, have a loop to determine the first descriptor that's ++ * full, just in case there's a mismatch between our current ++ * rx_tail and the full descriptor we're supposed to handle. */ ++ tail = adev->rx_tail; ++ count = RX_CNT; ++ while (1) { ++ hostdesc = &adev->rxhostdesc_start[tail]; ++ rxdesc = &adev->rxdesc_start[tail]; ++ /* advance tail regardless of outcome of the below test */ ++ tail = (tail + 1) % RX_CNT; ++ ++ /* ++ * Unlike the PCI interface, where the ACX can write directly to ++ * the host descriptors, on the slave memory interface we have to ++ * pull these. All we really need to do is check the Ctl_8 field ++ * in the rx descriptor on the ACX, which should be 0x11000000 if ++ * we should process it. ++ */ ++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8)); ++ if ((Ctl_8 & DESC_CTL_HOSTOWN) && ++ (Ctl_8 & DESC_CTL_ACXDONE)) ++ break; /* found it! */ ++ ++ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */ ++ goto end; ++ } ++ ++ /* now process descriptors, starting with the first we figured out */ ++ while (1) { ++ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8); ++ /* ++ * If the ACX has CTL_RECLAIM set on this descriptor there ++ * is no buffer associated; it just wants us to tell it to ++ * reclaim the memory. ++ */ ++ if (!(Ctl_8 & DESC_CTL_RECLAIM)) { ++ ++ /* ++ * slave interface - pull data now ++ */ ++ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length)); ++ ++ /* ++ * hostdesc->data is an rxbuffer_t, which includes header information, ++ * but the length in the data packet doesn't. The header information ++ * takes up an additional 12 bytes, so add that to the length we copy. ++ */ ++ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr)); ++ if (addr) { ++ /* ++ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we ++ * get that now and then - try to trap it for debug. ++ */ ++ if (addr & 0xffff0000) { ++ printk("rxdesc 0x%08x\n", (u32) rxdesc); ++ dump_acxmem (adev, 0, 0x10000); ++ panic ("Bad access!"); ++ } ++ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr, ++ hostdesc->length + ++ (u32) &((rxbuffer_t *)0)->hdr_a3); ++ acx_l_process_rxbuf(adev, hostdesc->data); ++ } ++ } ++ else { ++ printk ("rx reclaim only!\n"); ++ } ++ ++ hostdesc->Status = 0; ++ ++ /* ++ * Let the ACX know we're done. ++ */ ++ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN); ++ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE); ++ SET_BIT (Ctl_8, DESC_CTL_RECLAIM); ++ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8); ++ ++ /* ++ * Now tell the ACX we've finished with the receive buffer so ++ * it can finish the reclaim. ++ */ ++ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC); ++ ++ /* ok, descriptor is handled, now check the next descriptor */ ++ hostdesc = &adev->rxhostdesc_start[tail]; ++ rxdesc = &adev->rxdesc_start[tail]; ++ ++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8)); ++ ++ /* if next descriptor is empty, then bail out */ ++ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE)) ++ break; ++ ++ tail = (tail + 1) % RX_CNT; ++ } ++end: ++ adev->rx_tail = tail; ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_i_interrupt ++** ++** IRQ handler (atomic context, must not sleep, blah, blah) ++*/ ++ ++/* scan is complete. all frames now on the receive queue are valid */ ++#define INFO_SCAN_COMPLETE 0x0001 ++#define INFO_WEP_KEY_NOT_FOUND 0x0002 ++/* hw has been reset as the result of a watchdog timer timeout */ ++#define INFO_WATCH_DOG_RESET 0x0003 ++/* failed to send out NULL frame from PS mode notification to AP */ ++/* recommended action: try entering 802.11 PS mode again */ ++#define INFO_PS_FAIL 0x0004 ++/* encryption/decryption process on a packet failed */ ++#define INFO_IV_ICV_FAILURE 0x0005 ++ ++/* Info mailbox format: ++2 bytes: type ++2 bytes: status ++more bytes may follow ++ rumors say about status: ++ 0x0000 info available (set by hw) ++ 0x0001 information received (must be set by host) ++ 0x1000 info available, mailbox overflowed (messages lost) (set by hw) ++ but in practice we've seen: ++ 0x9000 when we did not set status to 0x0001 on prev message ++ 0x1001 when we did set it ++ 0x0000 was never seen ++ conclusion: this is really a bitfield: ++ 0x1000 is 'info available' bit ++ 'mailbox overflowed' bit is 0x8000, not 0x1000 ++ value of 0x0000 probably means that there are no messages at all ++ P.S. I dunno how in hell hw is supposed to notice that messages are lost - ++ it does NOT clear bit 0x0001, and this bit will probably stay forever set ++ after we set it once. Let's hope this will be fixed in firmware someday ++*/ ++ ++static void ++handle_info_irq(acx_device_t *adev) ++{ ++#if ACX_DEBUG ++ static const char * const info_type_msg[] = { ++ "(unknown)", ++ "scan complete", ++ "WEP key not found", ++ "internal watchdog reset was done", ++ "failed to send powersave (NULL frame) notification to AP", ++ "encrypt/decrypt on a packet has failed", ++ "TKIP tx keys disabled", ++ "TKIP rx keys disabled", ++ "TKIP rx: key ID not found", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "TKIP IV value exceeds thresh" ++ }; ++#endif ++ u32 info_type, info_status; ++ ++ info_type = read_slavemem32 (adev, (u32) adev->info_area); ++ ++ info_status = (info_type >> 16); ++ info_type = (u16)info_type; ++ ++ /* inform fw that we have read this info message */ ++ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK); ++ write_flush(adev); ++ ++ log(L_CTL, "info_type:%04X info_status:%04X\n", ++ info_type, info_status); ++ ++ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n", ++ info_status, info_type, ++ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ? ++ 0 : info_type] ++ ); ++} ++ ++ ++static void ++log_unusual_irq(u16 irqtype) { ++ /* ++ if (!printk_ratelimit()) ++ return; ++ */ ++ ++ printk("acx: got"); ++ if (irqtype & HOST_INT_TX_XFER) { ++ printk(" Tx_Xfer"); ++ } ++ if (irqtype & HOST_INT_RX_COMPLETE) { ++ printk(" Rx_Complete"); ++ } ++ if (irqtype & HOST_INT_DTIM) { ++ printk(" DTIM"); ++ } ++ if (irqtype & HOST_INT_BEACON) { ++ printk(" Beacon"); ++ } ++ if (irqtype & HOST_INT_TIMER) { ++ log(L_IRQ, " Timer"); ++ } ++ if (irqtype & HOST_INT_KEY_NOT_FOUND) { ++ printk(" Key_Not_Found"); ++ } ++ if (irqtype & HOST_INT_IV_ICV_FAILURE) { ++ printk(" IV_ICV_Failure (crypto)"); ++ } ++ /* HOST_INT_CMD_COMPLETE */ ++ /* HOST_INT_INFO */ ++ if (irqtype & HOST_INT_OVERFLOW) { ++ printk(" Overflow"); ++ } ++ if (irqtype & HOST_INT_PROCESS_ERROR) { ++ printk(" Process_Error"); ++ } ++ /* HOST_INT_SCAN_COMPLETE */ ++ if (irqtype & HOST_INT_FCS_THRESHOLD) { ++ printk(" FCS_Threshold"); ++ } ++ if (irqtype & HOST_INT_UNKNOWN) { ++ printk(" Unknown"); ++ } ++ printk(" IRQ(s)\n"); ++} ++ ++ ++static void ++update_link_quality_led(acx_device_t *adev) ++{ ++ int qual; ++ ++ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise); ++ if (qual > adev->brange_max_quality) ++ qual = adev->brange_max_quality; ++ ++ if (time_after(jiffies, adev->brange_time_last_state_change + ++ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) { ++ acxmem_l_power_led(adev, (adev->brange_last_state == 0)); ++ adev->brange_last_state ^= 1; /* toggle */ ++ adev->brange_time_last_state_change = jiffies; ++ } ++} ++ ++ ++#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */ ++ ++static irqreturn_t ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++acxmem_i_interrupt(int irq, void *dev_id) ++#else ++acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++#endif ++{ ++ acx_device_t *adev; ++ unsigned long flags; ++ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY; ++ register u16 irqtype; ++ u16 unmasked; ++ ++ adev = ndev2adev((struct net_device*)dev_id); ++ ++ /* LOCKING: can just spin_lock() since IRQs are disabled anyway. ++ * I am paranoid */ ++ acx_lock(adev, flags); ++ ++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR); ++ if (unlikely(0xffff == unmasked)) { ++ /* 0xffff value hints at missing hardware, ++ * so don't do anything. ++ * Not very clean, but other drivers do the same... */ ++ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n"); ++ goto none; ++ } ++ ++ /* We will check only "interesting" IRQ types */ ++ irqtype = unmasked & ~adev->irq_mask; ++ if (!irqtype) { ++ /* We are on a shared IRQ line and it wasn't our IRQ */ ++ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n", ++ unmasked, adev->irq_mask); ++ goto none; ++ } ++ ++ /* Done here because IRQ_NONEs taking three lines of log ++ ** drive me crazy */ ++ FN_ENTER; ++ ++#define IRQ_ITERATE 1 ++#if IRQ_ITERATE ++if (jiffies != adev->irq_last_jiffies) { ++ adev->irq_loops_this_jiffy = 0; ++ adev->irq_last_jiffies = jiffies; ++} ++ ++/* safety condition; we'll normally abort loop below ++ * in case no IRQ type occurred */ ++while (likely(--irqcount)) { ++#endif ++ /* ACK all IRQs ASAP */ ++ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff); ++ ++ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n", ++ unmasked, adev->irq_mask, irqtype); ++ ++ /* Handle most important IRQ types first */ ++ if (irqtype & HOST_INT_RX_DATA) { ++ log(L_IRQ, "got Rx_Data IRQ\n"); ++ acxmem_l_process_rxdesc(adev); ++ } ++ if (irqtype & HOST_INT_TX_COMPLETE) { ++ log(L_IRQ, "got Tx_Complete IRQ\n"); ++ /* don't clean up on each Tx complete, wait a bit ++ * unless we're going towards full, in which case ++ * we do it immediately, too (otherwise we might lockup ++ * with a full Tx buffer if we go into ++ * acxmem_l_clean_txdesc() at a time when we won't wakeup ++ * the net queue in there for some reason...) */ ++ if (adev->tx_free <= TX_START_CLEAN) { ++#if TX_CLEANUP_IN_SOFTIRQ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP); ++#else ++ acxmem_l_clean_txdesc(adev); ++#endif ++ } ++ } ++ ++ /* Less frequent ones */ ++ if (irqtype & (0 ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ | HOST_INT_SCAN_COMPLETE ++ )) { ++ if (irqtype & HOST_INT_CMD_COMPLETE) { ++ log(L_IRQ, "got Command_Complete IRQ\n"); ++ /* save the state for the running issue_cmd() */ ++ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE); ++ } ++ if (irqtype & HOST_INT_INFO) { ++ handle_info_irq(adev); ++ } ++ if (irqtype & HOST_INT_SCAN_COMPLETE) { ++ log(L_IRQ, "got Scan_Complete IRQ\n"); ++ /* need to do that in process context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN); ++ /* remember that fw is not scanning anymore */ ++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE); ++ } ++ } ++ ++ /* These we just log, but either they happen rarely ++ * or we keep them masked out */ ++ if (irqtype & (0 ++ /* | HOST_INT_RX_DATA */ ++ /* | HOST_INT_TX_COMPLETE */ ++ | HOST_INT_TX_XFER ++ | HOST_INT_RX_COMPLETE ++ | HOST_INT_DTIM ++ | HOST_INT_BEACON ++ | HOST_INT_TIMER ++ | HOST_INT_KEY_NOT_FOUND ++ | HOST_INT_IV_ICV_FAILURE ++ /* | HOST_INT_CMD_COMPLETE */ ++ /* | HOST_INT_INFO */ ++ | HOST_INT_OVERFLOW ++ | HOST_INT_PROCESS_ERROR ++ /* | HOST_INT_SCAN_COMPLETE */ ++ | HOST_INT_FCS_THRESHOLD ++ | HOST_INT_UNKNOWN ++ )) { ++ log_unusual_irq(irqtype); ++ } ++ ++#if IRQ_ITERATE ++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR); ++ irqtype = unmasked & ~adev->irq_mask; ++ /* Bail out if no new IRQ bits or if all are masked out */ ++ if (!irqtype) ++ break; ++ ++ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) { ++ printk(KERN_ERR "acx: too many interrupts per jiffy!\n"); ++ /* Looks like card floods us with IRQs! Try to stop that */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ /* This will short-circuit all future attempts to handle IRQ. ++ * We cant do much more... */ ++ adev->irq_mask = 0; ++ break; ++ } ++} ++#endif ++ /* Routine to perform blink with range */ ++ if (unlikely(adev->led_power == 2)) ++ update_link_quality_led(adev); ++ ++/* handled: */ ++ /* write_flush(adev); - not needed, last op was read anyway */ ++ acx_unlock(adev, flags); ++ FN_EXIT0; ++ return IRQ_HANDLED; ++ ++none: ++ acx_unlock(adev, flags); ++ return IRQ_NONE; ++} ++ ++ ++/*********************************************************************** ++** acxmem_l_power_led ++*/ ++void ++acxmem_l_power_led(acx_device_t *adev, int enable) ++{ ++ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800; ++ ++ /* A hack. Not moving message rate limiting to adev->xxx ++ * (it's only a debug message after all) */ ++ static int rate_limit = 0; ++ ++ if (rate_limit++ < 3) ++ log(L_IOCTL, "Please report in case toggling the power " ++ "LED doesn't work for your card!\n"); ++ if (enable) ++ write_reg16(adev, IO_ACX_GPIO_OUT, ++ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled); ++ else ++ write_reg16(adev, IO_ACX_GPIO_OUT, ++ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled); ++} ++ ++ ++/*********************************************************************** ++** Ioctls ++*/ ++ ++/*********************************************************************** ++*/ ++int ++acx111pci_ioctl_info( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++#if ACX_DEBUG > 1 ++ acx_device_t *adev = ndev2adev(ndev); ++ rxdesc_t *rxdesc; ++ txdesc_t *txdesc; ++ rxhostdesc_t *rxhostdesc; ++ txhostdesc_t *txhostdesc; ++ struct acx111_ie_memoryconfig memconf; ++ struct acx111_ie_queueconfig queueconf; ++ unsigned long flags; ++ int i; ++ char memmap[0x34]; ++ char rxconfig[0x8]; ++ char fcserror[0x8]; ++ char ratefallback[0x5]; ++ ++ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) ) ++ return OK; ++ /* using printk() since we checked debug flag already */ ++ ++ acx_sem_lock(adev); ++ ++ if (!IS_ACX111(adev)) { ++ printk("acx111-specific function called " ++ "with non-acx111 chip, aborting\n"); ++ goto end_ok; ++ } ++ ++ /* get Acx111 Memory Configuration */ ++ memset(&memconf, 0, sizeof(memconf)); ++ /* BTW, fails with 12 (Write only) error code. ++ ** Retained for easy testing of issue_cmd error handling :) */ ++ printk ("Interrogating queue config\n"); ++ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG); ++ printk ("done with queue config\n"); ++ ++ /* get Acx111 Queue Configuration */ ++ memset(&queueconf, 0, sizeof(queueconf)); ++ printk ("Interrogating mem config options\n"); ++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS); ++ printk ("done with mem config options\n"); ++ ++ /* get Acx111 Memory Map */ ++ memset(memmap, 0, sizeof(memmap)); ++ printk ("Interrogating mem map\n"); ++ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP); ++ printk ("done with mem map\n"); ++ ++ /* get Acx111 Rx Config */ ++ memset(rxconfig, 0, sizeof(rxconfig)); ++ printk ("Interrogating rxconfig\n"); ++ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG); ++ printk ("done with queue rxconfig\n"); ++ ++ /* get Acx111 fcs error count */ ++ memset(fcserror, 0, sizeof(fcserror)); ++ printk ("Interrogating fcs err count\n"); ++ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT); ++ printk ("done with err count\n"); ++ ++ /* get Acx111 rate fallback */ ++ memset(ratefallback, 0, sizeof(ratefallback)); ++ printk ("Interrogating rate fallback\n"); ++ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK); ++ printk ("done with rate fallback\n"); ++ ++ /* force occurrence of a beacon interrupt */ ++ /* TODO: comment why is this necessary */ ++ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON); ++ ++ /* dump Acx111 Mem Configuration */ ++ printk("dump mem config:\n" ++ "data read: %d, struct size: %d\n" ++ "Number of stations: %1X\n" ++ "Memory block size: %1X\n" ++ "tx/rx memory block allocation: %1X\n" ++ "count rx: %X / tx: %X queues\n" ++ "options %1X\n" ++ "fragmentation %1X\n" ++ "Rx Queue 1 Count Descriptors: %X\n" ++ "Rx Queue 1 Host Memory Start: %X\n" ++ "Tx Queue 1 Count Descriptors: %X\n" ++ "Tx Queue 1 Attributes: %X\n", ++ memconf.len, (int) sizeof(memconf), ++ memconf.no_of_stations, ++ memconf.memory_block_size, ++ memconf.tx_rx_memory_block_allocation, ++ memconf.count_rx_queues, memconf.count_tx_queues, ++ memconf.options, ++ memconf.fragmentation, ++ memconf.rx_queue1_count_descs, ++ acx2cpu(memconf.rx_queue1_host_rx_start), ++ memconf.tx_queue1_count_descs, ++ memconf.tx_queue1_attributes); ++ ++ /* dump Acx111 Queue Configuration */ ++ printk("dump queue head:\n" ++ "data read: %d, struct size: %d\n" ++ "tx_memory_block_address (from card): %X\n" ++ "rx_memory_block_address (from card): %X\n" ++ "rx1_queue address (from card): %X\n" ++ "tx1_queue address (from card): %X\n" ++ "tx1_queue attributes (from card): %X\n", ++ queueconf.len, (int) sizeof(queueconf), ++ queueconf.tx_memory_block_address, ++ queueconf.rx_memory_block_address, ++ queueconf.rx1_queue_address, ++ queueconf.tx1_queue_address, ++ queueconf.tx1_attributes); ++ ++ /* dump Acx111 Mem Map */ ++ printk("dump mem map:\n" ++ "data read: %d, struct size: %d\n" ++ "Code start: %X\n" ++ "Code end: %X\n" ++ "WEP default key start: %X\n" ++ "WEP default key end: %X\n" ++ "STA table start: %X\n" ++ "STA table end: %X\n" ++ "Packet template start: %X\n" ++ "Packet template end: %X\n" ++ "Queue memory start: %X\n" ++ "Queue memory end: %X\n" ++ "Packet memory pool start: %X\n" ++ "Packet memory pool end: %X\n" ++ "iobase: %p\n" ++ "iobase2: %p\n", ++ *((u16 *)&memmap[0x02]), (int) sizeof(memmap), ++ *((u32 *)&memmap[0x04]), ++ *((u32 *)&memmap[0x08]), ++ *((u32 *)&memmap[0x0C]), ++ *((u32 *)&memmap[0x10]), ++ *((u32 *)&memmap[0x14]), ++ *((u32 *)&memmap[0x18]), ++ *((u32 *)&memmap[0x1C]), ++ *((u32 *)&memmap[0x20]), ++ *((u32 *)&memmap[0x24]), ++ *((u32 *)&memmap[0x28]), ++ *((u32 *)&memmap[0x2C]), ++ *((u32 *)&memmap[0x30]), ++ adev->iobase, ++ adev->iobase2); ++ ++ /* dump Acx111 Rx Config */ ++ printk("dump rx config:\n" ++ "data read: %d, struct size: %d\n" ++ "rx config: %X\n" ++ "rx filter config: %X\n", ++ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig), ++ *((u16 *)&rxconfig[0x04]), ++ *((u16 *)&rxconfig[0x06])); ++ ++ /* dump Acx111 fcs error */ ++ printk("dump fcserror:\n" ++ "data read: %d, struct size: %d\n" ++ "fcserrors: %X\n", ++ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror), ++ *((u32 *)&fcserror[0x04])); ++ ++ /* dump Acx111 rate fallback */ ++ printk("dump rate fallback:\n" ++ "data read: %d, struct size: %d\n" ++ "ratefallback: %X\n", ++ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback), ++ *((u8 *)&ratefallback[0x04])); ++ ++ /* protect against IRQ */ ++ acx_lock(adev, flags); ++ ++ /* dump acx111 internal rx descriptor ring buffer */ ++ rxdesc = adev->rxdesc_start; ++ ++ /* loop over complete receive pool */ ++ if (rxdesc) for (i = 0; i < RX_CNT; i++) { ++ printk("\ndump internal rxdesc %d:\n" ++ "mem pos %p\n" ++ "next 0x%X\n" ++ "acx mem pointer (dynamic) 0x%X\n" ++ "CTL (dynamic) 0x%X\n" ++ "Rate (dynamic) 0x%X\n" ++ "RxStatus (dynamic) 0x%X\n" ++ "Mod/Pre (dynamic) 0x%X\n", ++ i, ++ rxdesc, ++ acx2cpu(rxdesc->pNextDesc), ++ acx2cpu(rxdesc->ACXMemPtr), ++ rxdesc->Ctl_8, ++ rxdesc->rate, ++ rxdesc->error, ++ rxdesc->SNR); ++ rxdesc++; ++ } ++ ++ /* dump host rx descriptor ring buffer */ ++ ++ rxhostdesc = adev->rxhostdesc_start; ++ ++ /* loop over complete receive pool */ ++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) { ++ printk("\ndump host rxdesc %d:\n" ++ "mem pos %p\n" ++ "buffer mem pos 0x%X\n" ++ "buffer mem offset 0x%X\n" ++ "CTL 0x%X\n" ++ "Length 0x%X\n" ++ "next 0x%X\n" ++ "Status 0x%X\n", ++ i, ++ rxhostdesc, ++ acx2cpu(rxhostdesc->data_phy), ++ rxhostdesc->data_offset, ++ le16_to_cpu(rxhostdesc->Ctl_16), ++ le16_to_cpu(rxhostdesc->length), ++ acx2cpu(rxhostdesc->desc_phy_next), ++ rxhostdesc->Status); ++ rxhostdesc++; ++ } ++ ++ /* dump acx111 internal tx descriptor ring buffer */ ++ txdesc = adev->txdesc_start; ++ ++ /* loop over complete transmit pool */ ++ if (txdesc) for (i = 0; i < TX_CNT; i++) { ++ printk("\ndump internal txdesc %d:\n" ++ "size 0x%X\n" ++ "mem pos %p\n" ++ "next 0x%X\n" ++ "acx mem pointer (dynamic) 0x%X\n" ++ "host mem pointer (dynamic) 0x%X\n" ++ "length (dynamic) 0x%X\n" ++ "CTL (dynamic) 0x%X\n" ++ "CTL2 (dynamic) 0x%X\n" ++ "Status (dynamic) 0x%X\n" ++ "Rate (dynamic) 0x%X\n", ++ i, ++ (int) sizeof(struct txdesc), ++ txdesc, ++ acx2cpu(txdesc->pNextDesc), ++ acx2cpu(txdesc->AcxMemPtr), ++ acx2cpu(txdesc->HostMemPtr), ++ le16_to_cpu(txdesc->total_length), ++ txdesc->Ctl_8, ++ txdesc->Ctl2_8, txdesc->error, ++ txdesc->u.r1.rate); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ ++ /* dump host tx descriptor ring buffer */ ++ ++ txhostdesc = adev->txhostdesc_start; ++ ++ /* loop over complete host send pool */ ++ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) { ++ printk("\ndump host txdesc %d:\n" ++ "mem pos %p\n" ++ "buffer mem pos 0x%X\n" ++ "buffer mem offset 0x%X\n" ++ "CTL 0x%X\n" ++ "Length 0x%X\n" ++ "next 0x%X\n" ++ "Status 0x%X\n", ++ i, ++ txhostdesc, ++ acx2cpu(txhostdesc->data_phy), ++ txhostdesc->data_offset, ++ le16_to_cpu(txhostdesc->Ctl_16), ++ le16_to_cpu(txhostdesc->length), ++ acx2cpu(txhostdesc->desc_phy_next), ++ le32_to_cpu(txhostdesc->Status)); ++ txhostdesc++; ++ } ++ ++ /* write_reg16(adev, 0xb4, 0x4); */ ++ ++ acx_unlock(adev, flags); ++end_ok: ++ ++ acx_sem_unlock(adev); ++#endif /* ACX_DEBUG */ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx100mem_ioctl_set_phy_amp_bias( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ u16 gpio_old; ++ ++ if (!IS_ACX100(adev)) { ++ /* WARNING!!! ++ * Removing this check *might* damage ++ * hardware, since we're tweaking GPIOs here after all!!! ++ * You've been warned... ++ * WARNING!!! */ ++ printk("acx: sorry, setting bias level for non-acx100 " ++ "is not supported yet\n"); ++ return OK; ++ } ++ ++ if (*extra > 7) { ++ printk("acx: invalid bias parameter, range is 0-7\n"); ++ return -EINVAL; ++ } ++ ++ acx_sem_lock(adev); ++ ++ /* Need to lock accesses to [IO_ACX_GPIO_OUT]: ++ * IRQ handler uses it to update LED */ ++ acx_lock(adev, flags); ++ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT); ++ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8)); ++ acx_unlock(adev, flags); ++ ++ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old); ++ printk("%s: PHY power amplifier bias: old:%d, new:%d\n", ++ ndev->name, ++ (gpio_old & 0x0700) >> 8, (unsigned char)*extra); ++ ++ acx_sem_unlock(adev); ++ ++ return OK; ++} ++ ++/*************************************************************** ++** acxmem_l_alloc_tx ++** Actually returns a txdesc_t* ptr ++** ++** FIXME: in case of fragments, should allocate multiple descrs ++** after figuring out how many we need and whether we still have ++** sufficiently many. ++*/ ++tx_t* ++acxmem_l_alloc_tx(acx_device_t *adev) ++{ ++ struct txdesc *txdesc; ++ unsigned head; ++ u8 ctl8; ++ static int txattempts = 0; ++ ++ FN_ENTER; ++ ++ if (unlikely(!adev->tx_free)) { ++ printk("acx: BUG: no free txdesc left\n"); ++ /* ++ * Probably the ACX ignored a transmit attempt and now there's a packet ++ * sitting in the queue we think should be transmitting but the ACX doesn't ++ * know about. ++ * On the first pass, send the ACX a TxProc interrupt to try moving ++ * things along, and if that doesn't work (ie, we get called again) completely ++ * flush the transmit queue. ++ */ ++ if (txattempts < 10) { ++ txattempts++; ++ printk ("acx: trying to wake up ACX\n"); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC); ++ write_flush(adev); } ++ else { ++ txattempts = 0; ++ printk ("acx: flushing transmit queue.\n"); ++ acxmem_l_clean_txdesc_emergency (adev); ++ } ++ txdesc = NULL; ++ goto end; ++ } ++ ++ /* ++ * Make a quick check to see if there is transmit buffer space on ++ * the ACX. This can't guarantee there is enough space for the packet ++ * since we don't yet know how big it is, but it will prevent at least some ++ * annoyances. ++ */ ++ if (!adev->acx_txbuf_blocks_free) { ++ txdesc = NULL; ++ goto end; ++ } ++ ++ head = adev->tx_head; ++ /* ++ * txdesc points to ACX memory ++ */ ++ txdesc = get_txdesc(adev, head); ++ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ ++ /* ++ * If we don't own the buffer (HOSTOWN) it is certainly not free; however, ++ * we may have previously thought we had enough memory to send ++ * a packet, allocated the buffer then gave up when we found not enough ++ * transmit buffer space on the ACX. In that case, HOSTOWN and ++ * ACXDONE will both be set. ++ */ ++ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) { ++ /* whoops, descr at current index is not free, so probably ++ * ring buffer already full */ ++ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find " ++ "free txdesc\n", head, ctl8); ++ txdesc = NULL; ++ goto end; ++ } ++ ++ /* Needed in case txdesc won't be eventually submitted for tx */ ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN); ++ ++ adev->tx_free--; ++ log(L_BUFT, "tx: got desc %u, %u remain\n", ++ head, adev->tx_free); ++ /* Keep a few free descs between head and tail of tx ring. ++ ** It is not absolutely needed, just feels safer */ ++ if (adev->tx_free < TX_STOP_QUEUE) { ++ log(L_BUF, "stop queue (%u tx desc left)\n", ++ adev->tx_free); ++ acx_stop_queue(adev->ndev, NULL); ++ } ++ ++ /* returning current descriptor, so advance to next free one */ ++ adev->tx_head = (head + 1) % TX_CNT; ++end: ++ FN_EXIT0; ++ ++ return (tx_t*)txdesc; ++} ++ ++ ++/*************************************************************** ++** acxmem_l_dealloc_tx ++** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque); ++ transmit descriptor. The ACX ++** can get confused if we skip transmit descriptors in the queue, ++** so when we don't need a descriptor return it to its original ++** state and move the queue head pointer back. ++** ++*/ ++void ++acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque) ++{ ++ /* ++ * txdesc is the address of the descriptor on the ACX. ++ */ ++ txdesc_t *txdesc = (txdesc_t*)tx_opaque; ++ txdesc_t tmptxdesc; ++ int index; ++ ++ memset (&tmptxdesc, 0, sizeof(tmptxdesc)); ++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG; ++ tmptxdesc.u.r1.rate = 0x0a; ++ ++ /* ++ * Clear out all of the transmit descriptor except for the next pointer ++ */ ++ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr), ++ (u8 *) &(tmptxdesc.HostMemPtr), ++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)); ++ ++ /* ++ * This is only called immediately after we've allocated, so we should ++ * be able to set the head back to this descriptor. ++ */ ++ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size; ++ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index); ++ adev->tx_head = index; ++} ++ ++ ++/*********************************************************************** ++*/ ++void* ++acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque) ++{ ++ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data; ++} ++ ++ ++/*********************************************************************** ++** acxmem_l_tx_data ++** ++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx). ++** Can be called from acx_i_start_xmit (data frames from net core). ++** ++** FIXME: in case of fragments, should loop over the number of ++** pre-allocated tx descrs, properly setting up transfer data and ++** CTL_xxx flags according to fragment number. ++*/ ++void ++acxmem_update_queue_indicator (acx_device_t *adev, int txqueue) ++{ ++#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE ++ u32 indicator; ++ unsigned long flags; ++ int count; ++ ++ /* ++ * Can't handle an interrupt while we're fiddling with the ACX's lock, ++ * according to TI. The ACX is supposed to hold fw_lock for at most ++ * 500ns. ++ */ ++ local_irq_save (flags); ++ ++ /* ++ * Wait for ACX to release the lock (at most 500ns). ++ */ ++ count = 0; ++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock)) ++ && (count++ < 50)) { ++ ndelay (10); ++ } ++ if (count < 50) { ++ ++ /* ++ * Take out the host lock - anything non-zero will work, so don't worry about ++ * be/le ++ */ ++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1); ++ ++ /* ++ * Avoid a race condition ++ */ ++ count = 0; ++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock)) ++ && (count++ < 50)) { ++ ndelay (10); ++ } ++ ++ if (count < 50) { ++ /* ++ * Mark the queue active ++ */ ++ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator)); ++ indicator |= cpu_to_le32 (1 << txqueue); ++ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator); ++ } ++ ++ /* ++ * Release the host lock ++ */ ++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0); ++ ++ } ++ ++ /* ++ * Restore interrupts ++ */ ++ local_irq_restore (flags); ++#endif ++} ++ ++void ++acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len) ++{ ++ /* ++ * txdesc is the address on the ACX ++ */ ++ txdesc_t *txdesc = (txdesc_t*)tx_opaque; ++ txhostdesc_t *hostdesc1, *hostdesc2; ++ client_t *clt; ++ u16 rate_cur; ++ u8 Ctl_8, Ctl2_8; ++ u32 addr; ++ ++ FN_ENTER; ++ /* fw doesn't tx such packets anyhow */ ++ if (unlikely(len < WLAN_HDR_A3_LEN)) ++ goto end; ++ ++ hostdesc1 = get_txhostdesc(adev, txdesc); ++ /* modify flag status in separate variable to be able to write it back ++ * in one big swoop later (also in order to have less device memory ++ * accesses) */ ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */ ++ ++ hostdesc2 = hostdesc1 + 1; ++ ++ /* DON'T simply set Ctl field to 0 here globally, ++ * it needs to maintain a consistent flag status (those are state flags!!), ++ * otherwise it may lead to severe disruption. Only set or reset particular ++ * flags at the exact moment this is needed... */ ++ ++ /* let chip do RTS/CTS handshaking before sending ++ * in case packet size exceeds threshold */ ++ if (len > adev->rts_threshold) ++ SET_BIT(Ctl2_8, DESC_CTL2_RTS); ++ else ++ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS); ++ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_3_AP: ++ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1); ++ break; ++ case ACX_MODE_2_STA: ++ clt = adev->ap_client; ++ break; ++#if 0 ++/* testing was done on acx111: */ ++ case ACX_MODE_MONITOR: ++ SET_BIT(Ctl2_8, 0 ++/* sends CTS to self before packet */ ++ + DESC_CTL2_SEQ /* don't increase sequence field */ ++/* not working (looks like good fcs is still added) */ ++ + DESC_CTL2_FCS /* don't add the FCS */ ++/* not tested */ ++ + DESC_CTL2_MORE_FRAG ++/* not tested */ ++ + DESC_CTL2_RETRY /* don't increase retry field */ ++/* not tested */ ++ + DESC_CTL2_POWER /* don't increase power mgmt. field */ ++/* no effect */ ++ + DESC_CTL2_WEP /* encrypt this frame */ ++/* not tested */ ++ + DESC_CTL2_DUR /* don't increase duration field */ ++ ); ++ /* fallthrough */ ++#endif ++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */ ++ clt = NULL; ++ break; ++ } ++ ++ rate_cur = clt ? clt->rate_cur : adev->rate_bcast; ++ if (unlikely(!rate_cur)) { ++ printk("acx: driver bug! bad ratemask\n"); ++ goto end; ++ } ++ ++ /* used in tx cleanup routine for auto rate and accounting: */ ++ put_txcr(adev, txdesc, clt, rate_cur); ++ ++ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len)); ++ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN); ++ if (IS_ACX111(adev)) { ++ /* note that if !txdesc->do_auto, txrate->cur ++ ** has only one nonzero bit */ ++ txdesc->u.r2.rate111 = cpu_to_le16( ++ rate_cur ++ /* WARNING: I was never able to make it work with prism54 AP. ++ ** It was falling down to 1Mbit where shortpre is not applicable, ++ ** and not working at all at "5,11 basic rates only" setting. ++ ** I even didn't see tx packets in radio packet capture. ++ ** Disabled for now --vda */ ++ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */ ++ ); ++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS ++ /* should add this to rate111 above as necessary */ ++ | (clt->pbcc511 ? RATE111_PBCC511 : 0) ++#endif ++ hostdesc1->length = cpu_to_le16(len); ++ } else { /* ACX100 */ ++ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100; ++ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100); ++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS ++ if (clt->pbcc511) { ++ if (n == RATE100_5 || n == RATE100_11) ++ n |= RATE100_PBCC511; ++ } ++ ++ if (clt->shortpre && (clt->cur != RATE111_1)) ++ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */ ++#endif ++ /* set autodma and reclaim and 1st mpdu */ ++ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG); ++ ++#if ACX_FRAGMENTATION ++ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */ ++#endif ++ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN); ++ ++ /* ++ * Since we're not using autodma copy the packet data to the acx now. ++ * Even host descriptors point to the packet header, and the odd indexed ++ * descriptor following points to the packet data. ++ * ++ * The first step is to find free memory in the ACX transmit buffers. ++ * They don't necessarily map one to one with the transmit queue entries, ++ * so search through them starting just after the last one used. ++ */ ++ addr = allocate_acx_txbuf_space (adev, len); ++ if (addr) { ++ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len); ++ } ++ else { ++ /* ++ * Bummer. We thought we might have enough room in the transmit ++ * buffers to send this packet, but it turns out we don't. alloc_tx ++ * has already marked this transmit descriptor as HOSTOWN and ACXDONE, ++ * which means the ACX will hang when it gets to this descriptor unless ++ * we do something about it. Having a bubble in the transmit queue just ++ * doesn't seem to work, so we have to reset this transmit queue entry's ++ * state to its original value and back up our head pointer to point ++ * back to this entry. ++ */ ++ hostdesc1->length = 0; ++ hostdesc2->length = 0; ++ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG); ++ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size; ++ goto end; ++ } ++ /* ++ * Tell the ACX where the packet is. ++ */ ++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr); ++ ++ } ++ /* don't need to clean ack/rts statistics here, already ++ * done on descr cleanup */ ++ ++ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors ++ * are now owned by the acx100; do this as LAST operation */ ++ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN); ++ /* flush writes before we release hostdesc to the adapter here */ ++ //wmb(); ++ ++ /* write back modified flags */ ++ /* ++ * At this point Ctl_8 should just be FIRSTFRAG ++ */ ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8); ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8); ++ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */ ++ ++ /* ++ * Update the queue indicator to say there's data on the first queue. ++ */ ++ acxmem_update_queue_indicator (adev, 0); ++ ++ /* flush writes before we tell the adapter that it's its turn now */ ++ mmiowb(); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC); ++ write_flush(adev); ++ ++ /* log the packet content AFTER sending it, ++ * in order to not delay sending any further than absolutely needed ++ * Do separate logs for acx100/111 to have human-readable rates */ ++ if (unlikely(acx_debug & (L_XFER|L_DATA))) { ++ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc; ++ if (IS_ACX111(adev)) ++ printk("tx: pkt (%s): len %d " ++ "rate %04X%s status %u\n", ++ acx_get_packet_type_string(le16_to_cpu(fc)), len, ++ le16_to_cpu(txdesc->u.r2.rate111), ++ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "", ++ adev->status); ++ else ++ printk("tx: pkt (%s): len %d rate %03u%s status %u\n", ++ acx_get_packet_type_string(fc), len, ++ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)), ++ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "", ++ adev->status); ++ ++ if (acx_debug & L_DATA) { ++ printk("tx: 802.11 [%d]: ", len); ++ acx_dump_bytes(hostdesc1->data, len); ++ } ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_l_clean_txdesc ++** ++** This function resets the txdescs' status when the ACX100 ++** signals the TX done IRQ (txdescs have been processed), starting with ++** the pool index of the descriptor which we would use next, ++** in order to make sure that we can be as fast as possible ++** in filling new txdescs. ++** Everytime we get called we know where the next packet to be cleaned is. ++*/ ++ ++#if !ACX_DEBUG ++static inline void log_txbuffer(const acx_device_t *adev) {} ++#else ++static void ++log_txbuffer(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ int i; ++ u8 Ctl_8; ++ ++ /* no FN_ENTER here, we don't want that */ ++ /* no locks here, since it's entirely non-critical code */ ++ txdesc = adev->txdesc_start; ++ if (unlikely(!txdesc)) return; ++ printk("tx: desc->Ctl8's:"); ++ for (i = 0; i < TX_CNT; i++) { ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ printk(" %02X", Ctl_8); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ printk("\n"); ++} ++#endif ++ ++ ++static void ++handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger) ++{ ++ const char *err = "unknown error"; ++ ++ /* hmm, should we handle this as a mask ++ * of *several* bits? ++ * For now I think only caring about ++ * individual bits is ok... */ ++ switch (error) { ++ case 0x01: ++ err = "no Tx due to error in other fragment"; ++ adev->wstats.discard.fragment++; ++ break; ++ case 0x02: ++ err = "Tx aborted"; ++ adev->stats.tx_aborted_errors++; ++ break; ++ case 0x04: ++ err = "Tx desc wrong parameters"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x08: ++ err = "WEP key not found"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x10: ++ err = "MSDU lifetime timeout? - try changing " ++ "'iwconfig retry lifetime XXX'"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x20: ++ err = "excessive Tx retries due to either distance " ++ "too high or unable to Tx or Tx frame error - " ++ "try changing 'iwconfig txpower XXX' or " ++ "'sens'itivity or 'retry'"; ++ adev->wstats.discard.retries++; ++ /* Tx error 0x20 also seems to occur on ++ * overheating, so I'm not sure whether we ++ * actually want to do aggressive radio recalibration, ++ * since people maybe won't notice then that their hardware ++ * is slowly getting cooked... ++ * Or is it still a safe long distance from utter ++ * radio non-functionality despite many radio recalibs ++ * to final destructive overheating of the hardware? ++ * In this case we really should do recalib here... ++ * I guess the only way to find out is to do a ++ * potentially fatal self-experiment :-\ ++ * Or maybe only recalib in case we're using Tx ++ * rate auto (on errors switching to lower speed ++ * --> less heat?) or 802.11 power save mode? ++ * ++ * ok, just do it. */ ++ if (++adev->retry_errors_msg_ratelimit % 4 == 0) { ++ if (adev->retry_errors_msg_ratelimit <= 20) { ++ printk("%s: several excessive Tx " ++ "retry errors occurred, attempting " ++ "to recalibrate radio. Radio " ++ "drift might be caused by increasing " ++ "card temperature, please check the card " ++ "before it's too late!\n", ++ adev->ndev->name); ++ if (adev->retry_errors_msg_ratelimit == 20) ++ printk("disabling above message\n"); ++ } ++ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ } ++ break; ++ case 0x40: ++ err = "Tx buffer overflow"; ++ adev->stats.tx_fifo_errors++; ++ break; ++ case 0x80: ++ err = "DMA error"; ++ adev->wstats.discard.misc++; ++ break; ++ } ++ adev->stats.tx_errors++; ++ if (adev->stats.tx_errors <= 20) ++ printk("%s: tx error 0x%02X, buf %02u! (%s)\n", ++ adev->ndev->name, error, finger, err); ++ else ++ printk("%s: tx error 0x%02X, buf %02u!\n", ++ adev->ndev->name, error, finger); ++} ++ ++ ++unsigned int ++acxmem_l_clean_txdesc(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ unsigned finger; ++ int num_cleaned; ++ u16 r111; ++ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8; ++ u32 acxmem; ++ txdesc_t tmptxdesc; ++ ++ FN_ENTER; ++ ++ /* ++ * Set up a template descriptor for re-initialization. The only ++ * things that get set are Ctl_8 and the rate, and the rate defaults ++ * to 1Mbps. ++ */ ++ memset (&tmptxdesc, 0, sizeof (tmptxdesc)); ++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG; ++ tmptxdesc.u.r1.rate = 0x0a; ++ ++ if (unlikely(acx_debug & L_DEBUG)) ++ log_txbuffer(adev); ++ ++ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail); ++ ++ /* We know first descr which is not free yet. We advance it as far ++ ** as we see correct bits set in following descs (if next desc ++ ** is NOT free, we shouldn't advance at all). We know that in ++ ** front of tx_tail may be "holes" with isolated free descs. ++ ** We will catch up when all intermediate descs will be freed also */ ++ ++ finger = adev->tx_tail; ++ num_cleaned = 0; ++ while (likely(finger != adev->tx_head)) { ++ txdesc = get_txdesc(adev, finger); ++ ++ /* If we allocated txdesc on tx path but then decided ++ ** to NOT use it, then it will be left as a free "bubble" ++ ** in the "allocated for tx" part of the ring. ++ ** We may meet it on the next ring pass here. */ ++ ++ /* stop if not marked as "tx finished" and "host owned" */ ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN) ++ != DESC_CTL_ACXDONE_HOSTOWN) { ++ if (unlikely(!num_cleaned)) { /* maybe remove completely */ ++ log(L_BUFT, "clean_txdesc: tail isn't free. " ++ "tail:%d head:%d\n", ++ adev->tx_tail, adev->tx_head); ++ } ++ break; ++ } ++ ++ /* remember desc values... */ ++ error = read_slavemem8 (adev, (u32) &(txdesc->error)); ++ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures)); ++ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures)); ++ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok)); ++ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)); ++ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111))); ++ ++ /* need to check for certain error conditions before we ++ * clean the descriptor: we still need valid descr data here */ ++ if (unlikely(0x30 & error)) { ++ /* only send IWEVTXDROP in case of retry or lifetime exceeded; ++ * all other errors mean we screwed up locally */ ++ union iwreq_data wrqu; ++ wlan_hdr_t *hdr; ++ txhostdesc_t *hostdesc; ++ ++ hostdesc = get_txhostdesc(adev, txdesc); ++ hdr = (wlan_hdr_t *)hostdesc->data; ++ MAC_COPY(wrqu.addr.sa_data, hdr->a1); ++ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL); ++ } ++ ++ /* ++ * Free up the transmit data buffers ++ */ ++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr)); ++ if (acxmem) { ++ reclaim_acx_txbuf_space (adev, acxmem); ++ } ++ ++ /* ...and free the desc by clearing all the fields ++ except the next pointer */ ++ copy_to_slavemem (adev, ++ (u32) &(txdesc->HostMemPtr), ++ (u8 *) &(tmptxdesc.HostMemPtr), ++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc) ++ ); ++ ++ adev->tx_free++; ++ num_cleaned++; ++ ++ if ((adev->tx_free >= TX_START_QUEUE) ++ && (adev->status == ACX_STATUS_4_ASSOCIATED) ++ && (acx_queue_stopped(adev->ndev)) ++ ) { ++ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n", ++ adev->tx_free); ++ acx_wake_queue(adev->ndev, NULL); ++ } ++ ++ /* do error checking, rate handling and logging ++ * AFTER having done the work, it's faster */ ++ ++ /* do rate handling */ ++ if (adev->rate_auto) { ++ struct client *clt = get_txc(adev, txdesc); ++ if (clt) { ++ u16 cur = get_txr(adev, txdesc); ++ if (clt->rate_cur == cur) { ++ acx_l_handle_txrate_auto(adev, clt, ++ cur, /* intended rate */ ++ r100, r111, /* actually used rate */ ++ (error & 0x30), /* was there an error? */ ++ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free); ++ } ++ } ++ } ++ ++ if (unlikely(error)) ++ handle_tx_error(adev, error, finger); ++ ++ if (IS_ACX111(adev)) ++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n", ++ finger, ack_failures, rts_failures, rts_ok, r111); ++ else ++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n", ++ finger, ack_failures, rts_failures, rts_ok, r100); ++ ++ /* update pointer for descr to be cleaned next */ ++ finger = (finger + 1) % TX_CNT; ++ } ++ ++ /* remember last position */ ++ adev->tx_tail = finger; ++/* end: */ ++ FN_EXIT1(num_cleaned); ++ return num_cleaned; ++} ++ ++/* clean *all* Tx descriptors, and regardless of their previous state. ++ * Used for brute-force reset handling. */ ++void ++acxmem_l_clean_txdesc_emergency(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ int i; ++ u32 acxmem; ++ ++ FN_ENTER; ++ ++ for (i = 0; i < TX_CNT; i++) { ++ txdesc = get_txdesc(adev, i); ++ ++ /* free it */ ++ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->error), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN); ++ ++ /* ++ * Clean up the memory allocated on the ACX for this transmit descriptor. ++ */ ++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr)); ++ if (acxmem) { ++ reclaim_acx_txbuf_space (adev, acxmem); ++ } ++ ++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0); ++ } ++ ++ adev->tx_free = TX_CNT; ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_create_tx_host_desc_queue ++*/ ++ ++static void* ++allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg) ++{ ++ void *ptr; ++ ptr = kmalloc (size, GFP_KERNEL); ++ /* ++ * The ACX can't use the physical address, so we'll have to fake it ++ * later and it might be handy to have the virtual address. ++ */ ++ *phy = (dma_addr_t) NULL; ++ ++ if (ptr) { ++ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n", ++ msg, (int)size, ptr, (unsigned long long)*phy); ++ memset(ptr, 0, size); ++ return ptr; ++ } ++ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n", ++ msg, (int)size); ++ return NULL; ++} ++ ++ ++/* ++ * In the generic slave memory access mode, most of the stuff in ++ * the txhostdesc_t is unused. It's only here because the rest of ++ * the ACX driver expects it to be since the PCI version uses indirect ++ * host memory organization with DMA. Since we're not using DMA the ++ * only use we have for the host descriptors is to store the packets ++ * on the way out. ++ */ ++static int ++acxmem_s_create_tx_host_desc_queue(acx_device_t *adev) ++{ ++ txhostdesc_t *hostdesc; ++ u8 *txbuf; ++ int i; ++ ++ FN_ENTER; ++ ++ /* allocate TX buffer */ ++ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS; ++ ++ adev->txbuf_start = allocate(adev, adev->txbuf_area_size, ++ &adev->txbuf_startphy, "txbuf_start"); ++ if (!adev->txbuf_start) ++ goto fail; ++ ++ /* allocate the TX host descriptor queue pool */ ++ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc); ++ ++ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size, ++ &adev->txhostdesc_startphy, "txhostdesc_start"); ++ if (!adev->txhostdesc_start) ++ goto fail; ++ ++ /* check for proper alignment of TX host descriptor pool */ ++ if ((long) adev->txhostdesc_start & 3) { ++ printk("acx: driver bug: dma alloc returns unaligned address\n"); ++ goto fail; ++ } ++ ++ hostdesc = adev->txhostdesc_start; ++ txbuf = adev->txbuf_start; ++ ++#if 0 ++/* Each tx buffer is accessed by hardware via ++** txdesc -> txhostdesc(s) -> txbuffer(s). ++** We use only one txhostdesc per txdesc, but it looks like ++** acx111 is buggy: it accesses second txhostdesc ++** (via hostdesc.desc_phy_next field) even if ++** txdesc->length == hostdesc->length and thus ++** entire packet was placed into first txhostdesc. ++** Due to this bug acx111 hangs unless second txhostdesc ++** has le16_to_cpu(hostdesc.length) = 3 (or larger) ++** Storing NULL into hostdesc.desc_phy_next ++** doesn't seem to help. ++** ++** Update: although it worked on Xterasys XN-2522g ++** with len=3 trick, WG311v2 is even more bogus, doesn't work. ++** Keeping this code (#ifdef'ed out) for documentational purposes. ++*/ ++ for (i = 0; i < TX_CNT*2; i++) { ++ hostdesc_phy += sizeof(*hostdesc); ++ if (!(i & 1)) { ++ hostdesc->data_phy = cpu2acx(txbuf_phy); ++ /* hostdesc->data_offset = ... */ ++ /* hostdesc->reserved = ... */ ++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN); ++ /* hostdesc->length = ... */ ++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy); ++ hostdesc->pNext = ptr2acx(NULL); ++ /* hostdesc->Status = ... */ ++ /* below: non-hardware fields */ ++ hostdesc->data = txbuf; ++ ++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS; ++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS; ++ } else { ++ /* hostdesc->data_phy = ... */ ++ /* hostdesc->data_offset = ... */ ++ /* hostdesc->reserved = ... */ ++ /* hostdesc->Ctl_16 = ... */ ++ hostdesc->length = cpu_to_le16(3); /* bug workaround */ ++ /* hostdesc->desc_phy_next = ... */ ++ /* hostdesc->pNext = ... */ ++ /* hostdesc->Status = ... */ ++ /* below: non-hardware fields */ ++ /* hostdesc->data = ... */ ++ } ++ hostdesc++; ++ } ++#endif ++/* We initialize two hostdescs so that they point to adjacent ++** memory areas. Thus txbuf is really just a contiguous memory area */ ++ for (i = 0; i < TX_CNT*2; i++) { ++ /* ->data is a non-hardware field: */ ++ hostdesc->data = txbuf; ++ ++ if (!(i & 1)) { ++ txbuf += WLAN_HDR_A3_LEN; ++ } else { ++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN; ++ } ++ hostdesc++; ++ } ++ hostdesc--; ++ ++ FN_EXIT1(OK); ++ return OK; ++fail: ++ printk("acx: create_tx_host_desc_queue FAILED\n"); ++ /* dealloc will be done by free function on error case */ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*************************************************************** ++** acxmem_s_create_rx_host_desc_queue ++*/ ++/* the whole size of a data buffer (header plus data body) ++ * plus 32 bytes safety offset at the end */ ++#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32) ++ ++static int ++acxmem_s_create_rx_host_desc_queue(acx_device_t *adev) ++{ ++ rxhostdesc_t *hostdesc; ++ rxbuffer_t *rxbuf; ++ int i; ++ ++ FN_ENTER; ++ ++ /* allocate the RX host descriptor queue pool */ ++ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc); ++ ++ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size, ++ &adev->rxhostdesc_startphy, "rxhostdesc_start"); ++ if (!adev->rxhostdesc_start) ++ goto fail; ++ ++ /* check for proper alignment of RX host descriptor pool */ ++ if ((long) adev->rxhostdesc_start & 3) { ++ printk("acx: driver bug: dma alloc returns unaligned address\n"); ++ goto fail; ++ } ++ ++ /* allocate Rx buffer pool which will be used by the acx ++ * to store the whole content of the received frames in it */ ++ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE; ++ ++ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size, ++ &adev->rxbuf_startphy, "rxbuf_start"); ++ if (!adev->rxbuf_start) ++ goto fail; ++ ++ rxbuf = adev->rxbuf_start; ++ hostdesc = adev->rxhostdesc_start; ++ ++ /* don't make any popular C programming pointer arithmetic mistakes ++ * here, otherwise I'll kill you... ++ * (and don't dare asking me why I'm warning you about that...) */ ++ for (i = 0; i < RX_CNT; i++) { ++ hostdesc->data = rxbuf; ++ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE); ++ rxbuf++; ++ hostdesc++; ++ } ++ hostdesc--; ++ FN_EXIT1(OK); ++ return OK; ++fail: ++ printk("acx: create_rx_host_desc_queue FAILED\n"); ++ /* dealloc will be done by free function on error case */ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*************************************************************** ++** acxmem_s_create_hostdesc_queues ++*/ ++int ++acxmem_s_create_hostdesc_queues(acx_device_t *adev) ++{ ++ int result; ++ result = acxmem_s_create_tx_host_desc_queue(adev); ++ if (OK != result) return result; ++ result = acxmem_s_create_rx_host_desc_queue(adev); ++ return result; ++} ++ ++ ++/*************************************************************** ++** acxmem_create_tx_desc_queue ++*/ ++static void ++acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start) ++{ ++ txdesc_t *txdesc; ++ u32 clr; ++ int i; ++ ++ FN_ENTER; ++ ++ if (IS_ACX100(adev)) ++ adev->txdesc_size = sizeof(*txdesc); ++ else ++ /* the acx111 txdesc is 4 bytes larger */ ++ adev->txdesc_size = sizeof(*txdesc) + 4; ++ ++ /* ++ * This refers to an ACX address, not one of ours ++ */ ++ adev->txdesc_start = (txdesc_t *) tx_queue_start; ++ ++ log(L_DEBUG, "adev->txdesc_start=%p\n", ++ adev->txdesc_start); ++ ++ adev->tx_free = TX_CNT; ++ /* done by memset: adev->tx_head = 0; */ ++ /* done by memset: adev->tx_tail = 0; */ ++ txdesc = adev->txdesc_start; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111 has a preinitialized Tx buffer! */ ++ /* loop over whole send pool */ ++ /* FIXME: do we have to do the hostmemptr stuff here?? */ ++ for (i = 0; i < TX_CNT; i++) { ++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN; ++ /* reserve two (hdr desc and payload desc) */ ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ } else { ++ /* ACX100 Tx buffer needs to be initialized by us */ ++ /* clear whole send pool. sizeof is safe here (we are acx100) */ ++ ++ /* ++ * adev->txdesc_start refers to device memory, so we can't write ++ * directly to it. ++ */ ++ clr = (u32) adev->txdesc_start; ++ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) { ++ write_slavemem32 (adev, clr, 0); ++ clr += 4; ++ } ++ ++ /* loop over whole send pool */ ++ for (i = 0; i < TX_CNT; i++) { ++ log(L_DEBUG, "configure card tx descriptor: 0x%p, " ++ "size: 0x%X\n", txdesc, adev->txdesc_size); ++ ++ /* initialise ctl */ ++ /* ++ * No auto DMA here ++ */ ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), ++ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG)); ++ /* done by memset(0): txdesc->Ctl2_8 = 0; */ ++ ++ /* point to next txdesc */ ++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc), ++ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size)); ++ ++ /* go to the next one */ ++ /* ++ is safe here (we are acx100) */ ++ txdesc++; ++ } ++ /* go back to the last one */ ++ txdesc--; ++ /* and point to the first making it a ring buffer */ ++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc), ++ (u32) cpu_to_le32 (tx_queue_start)); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxmem_create_rx_desc_queue ++*/ ++static void ++acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start) ++{ ++ rxdesc_t *rxdesc; ++ u32 mem_offs; ++ int i; ++ ++ FN_ENTER; ++ ++ /* done by memset: adev->rx_tail = 0; */ ++ ++ /* ACX111 doesn't need any further config: preconfigures itself. ++ * Simply print ring buffer for debugging */ ++ if (IS_ACX111(adev)) { ++ /* rxdesc_start already set here */ ++ ++ adev->rxdesc_start = (rxdesc_t *) rx_queue_start; ++ ++ rxdesc = adev->rxdesc_start; ++ for (i = 0; i < RX_CNT; i++) { ++ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc); ++ rxdesc = adev->rxdesc_start = (rxdesc_t *) ++ acx2cpu(rxdesc->pNextDesc); ++ } ++ } else { ++ /* we didn't pre-calculate rxdesc_start in case of ACX100 */ ++ /* rxdesc_start should be right AFTER Tx pool */ ++ adev->rxdesc_start = (rxdesc_t *) ++ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t))); ++ /* NB: sizeof(txdesc_t) above is valid because we know ++ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere! ++ ** acx111's txdesc is larger! */ ++ ++ mem_offs = (u32) adev->rxdesc_start; ++ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) { ++ write_slavemem32 (adev, mem_offs, 0); ++ mem_offs += 4; ++ } ++ ++ /* loop over whole receive pool */ ++ rxdesc = adev->rxdesc_start; ++ for (i = 0; i < RX_CNT; i++) { ++ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc); ++ /* point to next rxdesc */ ++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc), ++ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc))); ++ /* go to the next one */ ++ rxdesc++; ++ } ++ /* go to the last one */ ++ rxdesc--; ++ ++ /* and point to the first making it a ring buffer */ ++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc), ++ (u32) cpu_to_le32 (rx_queue_start)); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxmem_create_desc_queues ++*/ ++void ++acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start) ++{ ++ u32 *p; ++ int i; ++ ++ acxmem_create_tx_desc_queue(adev, tx_queue_start); ++ acxmem_create_rx_desc_queue(adev, rx_queue_start); ++ p = (u32 *) adev->acx_queue_indicator; ++ for (i = 0; i < 4; i++) { ++ write_slavemem32 (adev, (u32) p, 0); ++ p++; ++ } ++} ++ ++ ++/*************************************************************** ++** acxmem_s_proc_diag_output ++*/ ++char* ++acxmem_s_proc_diag_output(char *p, acx_device_t *adev) ++{ ++ const char *rtl, *thd, *ttl; ++ txdesc_t *txdesc; ++ u8 Ctl_8; ++ rxdesc_t *rxdesc; ++ int i; ++ u32 tmp; ++ txdesc_t txd; ++ u8 buf[0x200]; ++ int j, k; ++ ++ FN_ENTER; ++ ++#if DUMP_MEM_DURING_DIAG > 0 ++ dump_acxmem (adev, 0, 0x10000); ++ panic ("dump finished"); ++#endif ++ ++ p += sprintf(p, "** Rx buf **\n"); ++ rxdesc = adev->rxdesc_start; ++ if (rxdesc) for (i = 0; i < RX_CNT; i++) { ++ rtl = (i == adev->rx_tail) ? " [tail]" : ""; ++ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8)); ++ if (Ctl_8 & DESC_CTL_HOSTOWN) ++ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl); ++ else ++ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl); ++ rxdesc++; ++ } ++ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free, ++ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running"); ++ ++ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n", ++ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free); ++ txdesc = adev->txdesc_start; ++ if (txdesc) { ++ for (i = 0; i < TX_CNT; i++) { ++ thd = (i == adev->tx_head) ? " [head]" : ""; ++ ttl = (i == adev->tx_tail) ? " [tail]" : ""; ++ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd)); ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ if (Ctl_8 & DESC_CTL_ACXDONE) ++ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl); ++ else if (Ctl_8 & DESC_CTL_HOSTOWN) ++ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl); ++ else ++ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl); ++ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr)); ++ if (tmp) { ++ p += sprintf (p, " %04x", tmp); ++ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) { ++ tmp <<= 5; ++ p += sprintf (p, " %04x", tmp); ++ } ++ } ++ p += sprintf (p, "\n"); ++ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n" ++ "%02x %02x %02x %02x %04x\n", ++ (u32) txdesc, ++ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time, ++ txd.total_length, txd.Reserved, ++ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3], ++ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures, ++ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl, ++ txd.queue_info ++ ); ++ if (txd.AcxMemPtr.v) { ++ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf)); ++ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) { ++ p += sprintf (p, " "); ++ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) { ++ p += sprintf (p, " %02x", buf[j+k+4]); ++ } ++ p += sprintf (p, "\n"); ++ } ++ } ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ } ++ ++ p += sprintf(p, ++ "\n" ++ "** Generic slave data **\n" ++ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n" ++ "txbuf_start 0x%p, txbuf_area_size %u\n" ++ "txdesc_size %u, txdesc_start 0x%p\n" ++ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n" ++ "txbuf start 0x%04x, txbuf size %d\n" ++ "rxdesc_start 0x%p\n" ++ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n" ++ "rxbuf_start 0x%p, rxbuf_area_size %u\n", ++ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES), ++ adev->txbuf_start, adev->txbuf_area_size, ++ adev->txdesc_size, adev->txdesc_start, ++ adev->txhostdesc_start, adev->txhostdesc_area_size, ++ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize, ++ adev->rxdesc_start, ++ adev->rxhostdesc_start, adev->rxhostdesc_area_size, ++ adev->rxbuf_start, adev->rxbuf_area_size); ++ FN_EXIT0; ++ return p; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxmem_proc_eeprom_output(char *buf, acx_device_t *adev) ++{ ++ char *p = buf; ++ int i; ++ ++ FN_ENTER; ++ ++ for (i = 0; i < 0x400; i++) { ++ acxmem_read_eeprom_byte(adev, i, p++); ++ } ++ ++ FN_EXIT1(p - buf); ++ return p - buf; ++} ++ ++ ++/*********************************************************************** ++*/ ++void ++acxmem_set_interrupt_mask(acx_device_t *adev) ++{ ++ if (IS_ACX111(adev)) { ++ adev->irq_mask = (u16) ~(0 ++ | HOST_INT_RX_DATA ++ | HOST_INT_TX_COMPLETE ++ /* | HOST_INT_TX_XFER */ ++ /* | HOST_INT_RX_COMPLETE */ ++ /* | HOST_INT_DTIM */ ++ /* | HOST_INT_BEACON */ ++ /* | HOST_INT_TIMER */ ++ /* | HOST_INT_KEY_NOT_FOUND */ ++ | HOST_INT_IV_ICV_FAILURE ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ | HOST_INT_OVERFLOW ++ /* | HOST_INT_PROCESS_ERROR */ ++ | HOST_INT_SCAN_COMPLETE ++ | HOST_INT_FCS_THRESHOLD ++ | HOST_INT_UNKNOWN ++ ); ++ /* Or else acx100 won't signal cmd completion, right? */ ++ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */ ++ } else { ++ adev->irq_mask = (u16) ~(0 ++ | HOST_INT_RX_DATA ++ | HOST_INT_TX_COMPLETE ++ /* | HOST_INT_TX_XFER */ ++ /* | HOST_INT_RX_COMPLETE */ ++ /* | HOST_INT_DTIM */ ++ /* | HOST_INT_BEACON */ ++ /* | HOST_INT_TIMER */ ++ /* | HOST_INT_KEY_NOT_FOUND */ ++ /* | HOST_INT_IV_ICV_FAILURE */ ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ /* | HOST_INT_OVERFLOW */ ++ /* | HOST_INT_PROCESS_ERROR */ ++ | HOST_INT_SCAN_COMPLETE ++ /* | HOST_INT_FCS_THRESHOLD */ ++ /* | HOST_INT_BEACON_MISSED */ ++ ); ++ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */ ++ } ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm) ++{ ++ struct acx111_ie_tx_level tx_level; ++ ++ /* since it can be assumed that at least the Maxim radio has a ++ * maximum power output of 20dBm and since it also can be ++ * assumed that these values drive the DAC responsible for ++ * setting the linear Tx level, I'd guess that these values ++ * should be the corresponding linear values for a dBm value, ++ * in other words: calculate the values from that formula: ++ * Y [dBm] = 10 * log (X [mW]) ++ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm) ++ * and you're done... ++ * Hopefully that's ok, but you never know if we're actually ++ * right... (especially since Windows XP doesn't seem to show ++ * actual Tx dBm values :-P) */ ++ ++ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the ++ * values are EXACTLY mW!!! Not sure about RFMD and others, ++ * though... */ ++ static const u8 dbm2val_maxim[21] = { ++ 63, 63, 63, 62, ++ 61, 61, 60, 60, ++ 59, 58, 57, 55, ++ 53, 50, 47, 43, ++ 38, 31, 23, 13, ++ 0 ++ }; ++ static const u8 dbm2val_rfmd[21] = { ++ 0, 0, 0, 1, ++ 2, 2, 3, 3, ++ 4, 5, 6, 8, ++ 10, 13, 16, 20, ++ 25, 32, 41, 50, ++ 63 ++ }; ++ const u8 *table; ++ ++ switch (adev->radio_type) { ++ case RADIO_MAXIM_0D: ++ table = &dbm2val_maxim[0]; ++ break; ++ case RADIO_RFMD_11: ++ case RADIO_RALINK_15: ++ table = &dbm2val_rfmd[0]; ++ break; ++ default: ++ printk("%s: unknown/unsupported radio type, " ++ "cannot modify tx power level yet!\n", ++ adev->ndev->name); ++ return NOT_OK; ++ } ++ /* ++ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure ++ * routine matches the PA bias with the gain, so just use its default value. ++ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware ++ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim ++ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the ++ * gain control DAC. ++ * ++ * Physically between the ACX and the radio, higher Tx gain control DAC values result ++ * in less power output; 0 volts to the Maxim radio results in the highest output power ++ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register. ++ * ++ * Although there is only the 1 power setting, one of the radio firmware functions adjusts ++ * the transmit power level up and down. That function is called by the ACX FIQ handler ++ * under certain conditions. ++ */ ++ tx_level.level = 1; ++ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL); ++ ++ printk("%s: changing radio power level to %u dBm (%u)\n", ++ adev->ndev->name, level_dbm, table[level_dbm]); ++ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]); ++ ++ return 0; ++} ++ ++void acxmem_e_release(struct device *dev) { ++} ++ ++/*********************************************************************** ++** acx_cs part ++** ++** called by pcmcia card service ++*/ ++ ++/* ++ The event() function is this driver's Card Services event handler. ++ It will be called by Card Services when an appropriate card status ++ event is received. The config() and release() entry points are ++ used to configure or release a socket, in response to card ++ insertion and ejection events. They are invoked from the acx_cs ++ event handler. ++*/ ++ ++static int acx_cs_config(struct pcmcia_device *link); ++static void acx_cs_release(struct pcmcia_device *link); ++ ++/* ++ The attach() and detach() entry points are used to create and destroy ++ "instances" of the driver, where each instance represents everything ++ needed to manage one actual PCMCIA card. ++*/ ++ ++static void acx_cs_detach(struct pcmcia_device *p_dev); ++ ++/* ++ You'll also need to prototype all the functions that will actually ++ be used to talk to your device. See 'pcmem_cs' for a good example ++ of a fully self-sufficient driver; the other drivers rely more or ++ less on other parts of the kernel. ++*/ ++ ++/* ++ A linked list of "instances" of the acxnet device. Each actual ++ PCMCIA card corresponds to one device instance, and is described ++ by one struct pcmcia_device structure (defined in ds.h). ++ ++ You may not want to use a linked list for this -- for example, the ++ memory card driver uses an array of struct pcmcia_device pointers, where minor ++ device numbers are used to derive the corresponding array index. ++*/ ++ ++/* ++ A driver needs to provide a dev_node_t structure for each device ++ on a card. In some cases, there is only one device per card (for ++ example, ethernet cards, modems). In other cases, there may be ++ many actual or logical devices (SCSI adapters, memory cards with ++ multiple partitions). The dev_node_t structures need to be kept ++ in a linked list starting at the 'dev' field of a struct pcmcia_device ++ structure. We allocate them in the card's private data structure, ++ because they generally shouldn't be allocated dynamically. ++ ++ In this case, we also provide a flag to indicate if a device is ++ "stopped" due to a power management event, or card ejection. The ++ device IO routines can use a flag like this to throttle IO to a ++ card that is not ready to accept it. ++*/ ++ ++ ++/*====================================================================== ++ ++ acx_attach() creates an "instance" of the driver, allocating ++ local data structures for one device. The device is registered ++ with Card Services. ++ ++ The dev_link structure is initialized, but we don't actually ++ configure the card at this point -- we wait until we receive a ++ card insertion event. ++ ++ ======================================================================*/ ++ ++static int acx_cs_probe(struct pcmcia_device *link) ++{ ++ local_info_t *local; ++ struct net_device *ndev; ++ ++ DEBUG(0, "acx_attach()\n"); ++ ++ ndev = alloc_netdev(sizeof(acx_device_t), "wlan%d", dummy_netdev_init); ++ if (!ndev) { ++ printk("acx: no memory for netdevice struct\n"); ++ return -ENOMEM; ++ } ++ ++ /* Interrupt setup */ ++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; ++ link->irq.IRQInfo1 = IRQ_LEVEL_ID; ++ link->irq.Handler = acxmem_i_interrupt; ++ link->irq.Instance = ndev; ++ ++ /* ++ General socket configuration defaults can go here. In this ++ client, we assume very little, and rely on the CIS for almost ++ everything. In most clients, many details (i.e., number, sizes, ++ and attributes of IO windows) are fixed by the nature of the ++ device, and can be hard-wired here. ++ */ ++ link->conf.Attributes = CONF_ENABLE_IRQ; ++ link->conf.IntType = INT_MEMORY_AND_IO; ++ link->conf.Present = PRESENT_OPTION | PRESENT_COPY; ++ ++ /* Allocate space for private device-specific data */ ++ local = kzalloc(sizeof(local_info_t), GFP_KERNEL); ++ if (!local) { ++ printk(KERN_ERR "acx_cs: no memory for new device\n"); ++ return -ENOMEM; ++ } ++ local->ndev = ndev; ++ ++ link->priv = local; ++ ++ return acx_cs_config(link); ++} /* acx_attach */ ++ ++/*====================================================================== ++ ++ This deletes a driver "instance". The device is de-registered ++ with Card Services. If it has been released, all local data ++ structures are freed. Otherwise, the structures will be freed ++ when the device is released. ++ ++ ======================================================================*/ ++ ++static void acx_cs_detach(struct pcmcia_device *link) ++{ ++ DEBUG(0, "acx_detach(0x%p)\n", link); ++ ++ ++ if ( ((local_info_t*)link->priv)->ndev ) { ++ acxmem_e_close( ((local_info_t*)link->priv)->ndev ); ++ } ++ ++ acx_cs_release(link); ++ ++ ((local_info_t*)link->priv)->ndev = NULL; ++ ++ kfree(link->priv); ++} /* acx_detach */ ++ ++/*====================================================================== ++ ++ acx_config() is scheduled to run after a CARD_INSERTION event ++ is received, to configure the PCMCIA socket, and to make the ++ device available to the system. ++ ++ ======================================================================*/ ++ ++#define CS_CHECK(fn, ret) \ ++do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) ++ ++static int acx_cs_config(struct pcmcia_device *link) ++{ ++ tuple_t tuple; ++ cisparse_t parse; ++ local_info_t *local = link->priv; ++ int last_fn, last_ret; ++ u_char buf[64]; ++ win_req_t req; ++ memreq_t map; ++// int i; ++// acx_device_t *adev; ++ ++// adev = (acx_device_t *)link->priv; ++ ++ DEBUG(0, "acx_cs_config(0x%p)\n", link); ++ ++ /* ++ In this loop, we scan the CIS for configuration table entries, ++ each of which describes a valid card configuration, including ++ voltage, IO window, memory window, and interrupt settings. ++ ++ We make no assumptions about the card to be configured: we use ++ just the information available in the CIS. In an ideal world, ++ this would work for any PCMCIA card, but it requires a complete ++ and accurate CIS. In practice, a driver usually "knows" most of ++ these things without consulting the CIS, and most client drivers ++ will only use the CIS to fill in implementation-defined details. ++ */ ++ tuple.Attributes = 0; ++ tuple.TupleData = (cisdata_t *)buf; ++ tuple.TupleDataMax = sizeof(buf); ++ tuple.TupleOffset = 0; ++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; ++ ++ /* don't trust the CIS on this; Linksys got it wrong */ ++ //link->conf.Present = 0x63; ++ ++ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); ++ while (1) { ++ cistpl_cftable_entry_t dflt = { 0 }; ++ cistpl_cftable_entry_t *cfg = &(parse.cftable_entry); ++ if (pcmcia_get_tuple_data(link, &tuple) != 0 || ++ pcmcia_parse_tuple(link, &tuple, &parse) != 0) ++ goto next_entry; ++ ++ if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg; ++ if (cfg->index == 0) goto next_entry; ++ link->conf.ConfigIndex = cfg->index; ++ ++ /* Does this card need audio output? */ ++ if (cfg->flags & CISTPL_CFTABLE_AUDIO) { ++ link->conf.Attributes |= CONF_ENABLE_SPKR; ++ link->conf.Status = CCSR_AUDIO_ENA; ++ } ++ ++ /* Use power settings for Vcc and Vpp if present */ ++ /* Note that the CIS values need to be rescaled */ ++ if (cfg->vpp1.present & (1<conf.Vpp = ++ cfg->vpp1.param[CISTPL_POWER_VNOM]/10000; ++ else if (dflt.vpp1.present & (1<conf.Vpp = ++ dflt.vpp1.param[CISTPL_POWER_VNOM]/10000; ++ ++ /* Do we need to allocate an interrupt? */ ++ if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1) ++ link->conf.Attributes |= CONF_ENABLE_IRQ; ++ if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) { ++ cistpl_mem_t *mem = ++ (cfg->mem.nwin) ? &cfg->mem : &dflt.mem; ++// req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_AM|WIN_ENABLE|WIN_USE_WAIT; ++ req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE|WIN_USE_WAIT; ++ req.Base = mem->win[0].host_addr; ++ req.Size = mem->win[0].len; ++ req.Size=0x1000; ++ req.AccessSpeed = 0; ++ if (pcmcia_request_window(&link, &req, &link->win) != 0) ++ goto next_entry; ++ map.Page = 0; map.CardOffset = mem->win[0].card_addr; ++ if (pcmcia_map_mem_page(link->win, &map) != 0) ++ goto next_entry; ++ else ++ printk(KERN_INFO "MEMORY WINDOW FOUND!!!\n"); ++ } ++ /* If we got this far, we're cool! */ ++ break; ++ ++ next_entry: ++ CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple)); ++ } ++ ++ if (link->conf.Attributes & CONF_ENABLE_IRQ) { ++ printk(KERN_INFO "requesting Irq...\n"); ++ CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); ++ } ++ ++ /* ++ This actually configures the PCMCIA socket -- setting up ++ the I/O windows and the interrupt mapping, and putting the ++ card and host interface into "Memory and IO" mode. ++ */ ++ CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); ++ DEBUG(0,"RequestConfiguration OK\n"); ++ ++ ++ memwin.Base=req.Base; ++ memwin.Size=req.Size; ++ ++ acx_init_netdev(local->ndev, &link->dev, memwin.Base, memwin.Size, link->irq.AssignedIRQ); ++ ++#if 1 ++ /* ++ At this point, the dev_node_t structure(s) need to be ++ initialized and arranged in a linked list at link->dev_node. ++ */ ++ strcpy(local->node.dev_name, local->ndev->name ); ++ local->node.major = local->node.minor = 0; ++ link->dev_node = &local->node; ++ ++ /* Finally, report what we've done */ ++ printk(KERN_INFO "%s: index 0x%02x: ", ++ local->ndev->name, link->conf.ConfigIndex); ++#endif ++ if (link->conf.Attributes & CONF_ENABLE_IRQ) ++ printk("irq %d", link->irq.AssignedIRQ); ++ if (link->io.NumPorts1) ++ printk(", io 0x%04x-0x%04x", link->io.BasePort1, ++ link->io.BasePort1+link->io.NumPorts1-1); ++ if (link->io.NumPorts2) ++ printk(" & 0x%04x-0x%04x", link->io.BasePort2, ++ link->io.BasePort2+link->io.NumPorts2-1); ++ if (link->win) ++ printk(", mem 0x%06lx-0x%06lx\n", req.Base, ++ req.Base+req.Size-1); ++ return 0; ++ ++ cs_failed: ++ cs_error(link, last_fn, last_ret); ++ acx_cs_release(link); ++ return -ENODEV; ++} /* acx_config */ ++ ++/*====================================================================== ++ ++ After a card is removed, acx_release() will unregister the ++ device, and release the PCMCIA configuration. If the device is ++ still open, this will be postponed until it is closed. ++ ++ ======================================================================*/ ++ ++static void acx_cs_release(struct pcmcia_device *link) ++{ ++ DEBUG(0, "acx_release(0x%p)\n", link); ++ acxmem_e_remove(link); ++ pcmcia_disable_device(link); ++} ++ ++static int acx_cs_suspend(struct pcmcia_device *link) ++{ ++ local_info_t *local = link->priv; ++ ++ pm_message_t state; ++ acxmem_e_suspend ( local->ndev, state); ++ /* Already done in suspend ++ * netif_device_detach(local->ndev); */ ++ ++ return 0; ++} ++ ++static int acx_cs_resume(struct pcmcia_device *link) ++{ ++ local_info_t *local = link->priv; ++ ++ FN_ENTER; ++ resume_ndev = local->ndev; ++ ++ schedule_work( &fw_resume_work ); ++ ++ /* Already done in suspend ++ if (link->open) { ++ // do we need reset for ACX, if so what function nane is ? ++ //reset_acx_card(local->eth_dev); ++ netif_device_attach(local->ndev); ++ } */ ++ ++ FN_EXIT0; ++ return 0; ++} ++ ++static struct pcmcia_device_id acx_ids[] = { ++ PCMCIA_DEVICE_MANF_CARD(0x0097, 0x8402), ++ PCMCIA_DEVICE_MANF_CARD(0x0250, 0xb001), ++ PCMCIA_DEVICE_NULL, ++}; ++MODULE_DEVICE_TABLE(pcmcia, acx_ids); ++ ++static struct pcmcia_driver acx_driver = { ++ .owner = THIS_MODULE, ++ .drv = { ++ .name = "acx_cs", ++ }, ++ .probe = acx_cs_probe, ++ .remove = acx_cs_detach, ++ .id_table = acx_ids, ++ .suspend = acx_cs_suspend, ++ .resume = acx_cs_resume, ++}; ++ ++int acx_cs_init(void) ++{ ++ /* return success if at least one succeeded */ ++ DEBUG(0, "acxcs_init()\n"); ++ return pcmcia_register_driver(&acx_driver); ++} ++ ++void acx_cs_cleanup(void) ++{ ++ pcmcia_unregister_driver(&acx_driver); ++} ++ ++/* ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License ++ as published by the Free Software Foundation; either version 2 ++ of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ In addition: ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ 1. Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ 2. Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ 3. The name of the author may not be used to endorse or promote ++ products derived from this software without specific prior written ++ permission. ++ ++ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, ++ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ++ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING ++ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ++ POSSIBILITY OF SUCH DAMAGE. ++*/ ++ ++MODULE_DESCRIPTION( "ACX Cardbus Driver" ); ++MODULE_LICENSE( "GPL" ); ++ +Index: linux-2.6.23/drivers/net/wireless/acx/htcsable_acx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/htcsable_acx.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,118 @@ ++/* ++ * WLAN (TI TNETW1100B) support in the HTC Sable ++ * ++ * Copyright (c) 2006 SDG Systems, LLC ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 28-March-2006 Todd Blumer ++ */ ++ ++ ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx_hw.h" ++ ++#define WLAN_BASE PXA_CS2_PHYS ++ ++/* ++off: b15 c8 d3 ++on: d3 c8 b5 b5- ++*/ ++ ++#define GPIO_NR_HTCSABLE_ACX111 111 ++ ++static int ++htcsable_wlan_stop( void ); ++ ++static int ++htcsable_wlan_start( void ) ++{ ++ printk( "htcsable_wlan_start\n" ); ++ ++ /*asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<" ); ++MODULE_DESCRIPTION( "WLAN driver for HTC Sable" ); ++MODULE_LICENSE( "GPL" ); ++ +Index: linux-2.6.23/drivers/net/wireless/acx/htcuniversal_acx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/htcuniversal_acx.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,108 @@ ++/* ++ * WLAN (TI TNETW1100B) support in the HTC Universal ++ * ++ * Copyright (c) 2006 SDG Systems, LLC ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 28-March-2006 Todd Blumer ++ */ ++ ++ ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx_hw.h" ++ ++#define WLAN_BASE PXA_CS2_PHYS ++ ++ ++static int ++htcuniversal_wlan_start( void ) ++{ ++ htcuniversal_egpio_enable(1<" ); ++MODULE_DESCRIPTION( "WLAN driver for HTC Universal" ); ++MODULE_LICENSE( "GPL" ); ++ +Index: linux-2.6.23/drivers/net/wireless/acx/hx4700_acx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/hx4700_acx.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,108 @@ ++/* ++ * WLAN (TI TNETW1100B) support in the hx470x. ++ * ++ * Copyright (c) 2006 SDG Systems, LLC ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 28-March-2006 Todd Blumer ++ */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "acx_hw.h" ++ ++#define WLAN_OFFSET 0x1000000 ++#define WLAN_BASE (PXA_CS5_PHYS+WLAN_OFFSET) ++ ++ ++static int ++hx4700_wlan_start( void ) ++{ ++ SET_HX4700_GPIO( WLAN_RESET_N, 0 ); ++ mdelay(5); ++ hx4700_egpio_enable( EGPIO0_VCC_3V3_EN ); ++ mdelay(100); ++ hx4700_egpio_enable( EGPIO7_VCC_3V3_WL_EN ); ++ mdelay(150); ++ hx4700_egpio_enable( EGPIO1_WL_VREG_EN | EGPIO2_VCC_2V1_WL_EN | ++ EGPIO6_WL1V8_EN ); ++ mdelay(10); ++ SET_HX4700_GPIO( WLAN_RESET_N, 1 ); ++ mdelay(50); ++ led_trigger_event_shared(hx4700_radio_trig, LED_FULL); ++ return 0; ++} ++ ++static int ++hx4700_wlan_stop( void ) ++{ ++ hx4700_egpio_disable( EGPIO0_VCC_3V3_EN | EGPIO1_WL_VREG_EN | ++ EGPIO7_VCC_3V3_WL_EN | EGPIO2_VCC_2V1_WL_EN | ++ EGPIO6_WL1V8_EN ); ++ SET_HX4700_GPIO( WLAN_RESET_N, 0 ); ++ led_trigger_event_shared(hx4700_radio_trig, LED_OFF); ++ return 0; ++} ++ ++static struct resource acx_resources[] = { ++ [0] = { ++ .start = WLAN_BASE, ++ .end = WLAN_BASE + 0x20, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = HX4700_IRQ(WLAN_IRQ_N), ++ .end = HX4700_IRQ(WLAN_IRQ_N), ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct acx_hardware_data acx_data = { ++ .start_hw = hx4700_wlan_start, ++ .stop_hw = hx4700_wlan_stop, ++}; ++ ++static struct platform_device acx_device = { ++ .name = "acx-mem", ++ .dev = { ++ .platform_data = &acx_data, ++ }, ++ .num_resources = ARRAY_SIZE( acx_resources ), ++ .resource = acx_resources, ++}; ++ ++static int __init ++hx4700_wlan_init( void ) ++{ ++ printk( "hx4700_wlan_init: acx-mem platform_device_register\n" ); ++ return platform_device_register( &acx_device ); ++} ++ ++ ++static void __exit ++hx4700_wlan_exit( void ) ++{ ++ platform_device_unregister( &acx_device ); ++} ++ ++module_init( hx4700_wlan_init ); ++module_exit( hx4700_wlan_exit ); ++ ++MODULE_AUTHOR( "Todd Blumer " ); ++MODULE_DESCRIPTION( "WLAN driver for iPAQ hx4700" ); ++MODULE_LICENSE( "GPL" ); ++ +Index: linux-2.6.23/drivers/net/wireless/acx/ioctl.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/ioctl.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,2748 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++#include ++#include ++#include ++/* #include */ /* required for 2.4.x kernels; verify_write() */ ++#include ++#include ++#include ++ ++#include "acx.h" ++ ++ ++/*********************************************************************** ++*/ ++ ++/* channel frequencies ++ * TODO: Currently, every other 802.11 driver keeps its own copy of this. In ++ * the long run this should be integrated into ieee802_11.h or wireless.h or ++ * whatever IEEE802.11x framework evolves */ ++static const u16 acx_channel_freq[] = { ++ 2412, 2417, 2422, 2427, 2432, 2437, 2442, ++ 2447, 2452, 2457, 2462, 2467, 2472, 2484, ++}; ++ ++ ++/*********************************************************************** ++** acx_ioctl_commit ++*/ ++static int ++acx_ioctl_commit(struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) ++ acx_s_update_card_settings(adev); ++ acx_sem_unlock(adev); ++ ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_get_name( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ static const char * const names[] = { "IEEE 802.11b+/g+", "IEEE 802.11b+" }; ++ ++ strcpy(wrqu->name, names[IS_ACX111(adev) ? 0 : 1]); ++ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_freq ++*/ ++static int ++acx_ioctl_set_freq( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int channel = -1; ++ unsigned int mult = 1; ++ int result; ++ ++ FN_ENTER; ++ ++ if (wrqu->freq.e == 0 && wrqu->freq.m <= 1000) { ++ /* Setting by channel number */ ++ channel = wrqu->freq.m; ++ } else { ++ /* If setting by frequency, convert to a channel */ ++ int i; ++ ++ for (i = 0; i < (6 - wrqu->freq.e); i++) ++ mult *= 10; ++ ++ for (i = 1; i <= 14; i++) ++ if (wrqu->freq.m == acx_channel_freq[i - 1] * mult) ++ channel = i; ++ } ++ ++ if (channel > 14) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ acx_sem_lock(adev); ++ ++ adev->channel = channel; ++ /* hmm, the following code part is strange, but this is how ++ * it was being done before... */ ++ log(L_IOCTL, "Changing to channel %d\n", channel); ++ SET_BIT(adev->set_mask, GETSET_CHANNEL); ++ ++ result = -EINPROGRESS; /* need to call commit handler */ ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static inline int ++acx_ioctl_get_freq( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ wrqu->freq.e = 0; ++ wrqu->freq.m = adev->channel; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_mode ++*/ ++static int ++acx_ioctl_set_mode( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ switch (wrqu->mode) { ++ case IW_MODE_AUTO: ++ adev->mode = ACX_MODE_OFF; ++ break; ++ case IW_MODE_MONITOR: ++ adev->mode = ACX_MODE_MONITOR; ++ break; ++ case IW_MODE_ADHOC: ++ adev->mode = ACX_MODE_0_ADHOC; ++ break; ++ case IW_MODE_INFRA: ++ adev->mode = ACX_MODE_2_STA; ++ break; ++ case IW_MODE_MASTER: ++ printk("acx: master mode (HostAP) is very, very " ++ "experimental! It might work partially, but " ++ "better get prepared for nasty surprises " ++ "at any time\n"); ++ adev->mode = ACX_MODE_3_AP; ++ break; ++ case IW_MODE_REPEAT: ++ case IW_MODE_SECOND: ++ default: ++ result = -EOPNOTSUPP; ++ goto end_unlock; ++ } ++ ++ log(L_ASSOC, "new adev->mode=%d\n", adev->mode); ++ SET_BIT(adev->set_mask, GETSET_MODE); ++ result = -EINPROGRESS; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_get_mode( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result = 0; ++ ++ switch (adev->mode) { ++ case ACX_MODE_OFF: ++ wrqu->mode = IW_MODE_AUTO; break; ++ case ACX_MODE_MONITOR: ++ wrqu->mode = IW_MODE_MONITOR; break; ++ case ACX_MODE_0_ADHOC: ++ wrqu->mode = IW_MODE_ADHOC; break; ++ case ACX_MODE_2_STA: ++ wrqu->mode = IW_MODE_INFRA; break; ++ case ACX_MODE_3_AP: ++ wrqu->mode = IW_MODE_MASTER; break; ++ default: ++ result = -EOPNOTSUPP; ++ } ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_set_sens( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->sens; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ acx_sem_lock(adev); ++ ++ adev->sensitivity = (1 == vwrq->disabled) ? 0 : vwrq->value; ++ SET_BIT(adev->set_mask, GETSET_SENSITIVITY); ++ ++ acx_sem_unlock(adev); ++ ++ return -EINPROGRESS; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_get_sens( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->sens; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ if (IS_USB(adev)) ++ /* setting the PHY reg via fw cmd doesn't work yet */ ++ return -EOPNOTSUPP; ++ ++ /* acx_sem_lock(adev); */ ++ ++ vwrq->value = adev->sensitivity; ++ vwrq->disabled = (vwrq->value == 0); ++ vwrq->fixed = 1; ++ ++ /* acx_sem_unlock(adev); */ ++ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_ap ++** ++** Sets the MAC address of the AP to associate with ++*/ ++static int ++acx_ioctl_set_ap( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct sockaddr *awrq = &wrqu->ap_addr; ++ acx_device_t *adev = ndev2adev(ndev); ++ int result = 0; ++ const u8 *ap; ++ ++ FN_ENTER; ++ if (NULL == awrq) { ++ result = -EFAULT; ++ goto end; ++ } ++ if (ARPHRD_ETHER != awrq->sa_family) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ ap = awrq->sa_data; ++ acxlog_mac(L_IOCTL, "set AP=", ap, "\n"); ++ ++ MAC_COPY(adev->ap, ap); ++ ++ /* We want to start rescan in managed or ad-hoc mode, ++ ** otherwise just set adev->ap. ++ ** "iwconfig ap mode managed": we must be able ++ ** to set ap _first_ and _then_ set mode */ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ /* FIXME: if there is a convention on what zero AP means, ++ ** please add a comment about that. I don't know of any --vda */ ++ if (mac_is_zero(ap)) { ++ /* "off" == 00:00:00:00:00:00 */ ++ MAC_BCAST(adev->ap); ++ log(L_IOCTL, "Not reassociating\n"); ++ } else { ++ log(L_IOCTL, "Forcing reassociation\n"); ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ } ++ break; ++ } ++ result = -EINPROGRESS; ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_get_ap( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct sockaddr *awrq = &wrqu->ap_addr; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ if (ACX_STATUS_4_ASSOCIATED == adev->status) { ++ /* as seen in Aironet driver, airo.c */ ++ MAC_COPY(awrq->sa_data, adev->bssid); ++ } else { ++ MAC_ZERO(awrq->sa_data); ++ } ++ awrq->sa_family = ARPHRD_ETHER; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_aplist ++** ++** Deprecated in favor of iwscan. ++** We simply return the list of currently available stations in range, ++** don't do a new scan. ++*/ ++static int ++acx_ioctl_get_aplist( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->data; ++ acx_device_t *adev = ndev2adev(ndev); ++ struct sockaddr *address = (struct sockaddr *) extra; ++ struct iw_quality qual[IW_MAX_AP]; ++ int i, cur; ++ int result = OK; ++ ++ FN_ENTER; ++ ++ /* we have AP list only in STA mode */ ++ if (ACX_MODE_2_STA != adev->mode) { ++ result = -EOPNOTSUPP; ++ goto end; ++ } ++ ++ cur = 0; ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ struct client *bss = &adev->sta_list[i]; ++ if (!bss->used) continue; ++ MAC_COPY(address[cur].sa_data, bss->bssid); ++ address[cur].sa_family = ARPHRD_ETHER; ++ qual[cur].level = bss->sir; ++ qual[cur].noise = bss->snr; ++#ifndef OLD_QUALITY ++ qual[cur].qual = acx_signal_determine_quality(qual[cur].level, ++ qual[cur].noise); ++#else ++ qual[cur].qual = (qual[cur].noise <= 100) ? ++ 100 - qual[cur].noise : 0; ++#endif ++ /* no scan: level/noise/qual not updated: */ ++ qual[cur].updated = 0; ++ cur++; ++ } ++ if (cur) { ++ dwrq->flags = 1; ++ memcpy(extra + sizeof(struct sockaddr)*cur, &qual, ++ sizeof(struct iw_quality)*cur); ++ } ++ dwrq->length = cur; ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_set_scan( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* don't start scan if device is not up yet */ ++ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) { ++ result = -EAGAIN; ++ goto end_unlock; ++ } ++ ++ /* This is NOT a rescan for new AP! ++ ** Do not use SET_BIT(GETSET_RESCAN); */ ++ acx_s_cmd_start_scan(adev); ++ result = OK; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++/* end: */ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_s_scan_add_station ++*/ ++/* helper. not sure whether it's really a _s_leeping fn */ ++static char* ++acx_s_scan_add_station( ++ acx_device_t *adev, ++ char *ptr, ++ char *end_buf, ++ struct client *bss) ++{ ++ struct iw_event iwe; ++ char *ptr_rate; ++ ++ FN_ENTER; ++ ++ /* MAC address has to be added first */ ++ iwe.cmd = SIOCGIWAP; ++ iwe.u.ap_addr.sa_family = ARPHRD_ETHER; ++ MAC_COPY(iwe.u.ap_addr.sa_data, bss->bssid); ++ acxlog_mac(L_IOCTL, "scan, station address: ", bss->bssid, "\n"); ++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_ADDR_LEN); ++ ++ /* Add ESSID */ ++ iwe.cmd = SIOCGIWESSID; ++ iwe.u.data.length = bss->essid_len; ++ iwe.u.data.flags = 1; ++ log(L_IOCTL, "scan, essid: %s\n", bss->essid); ++ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid); ++ ++ /* Add mode */ ++ iwe.cmd = SIOCGIWMODE; ++ if (bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)) { ++ if (bss->cap_info & WF_MGMT_CAP_ESS) ++ iwe.u.mode = IW_MODE_MASTER; ++ else ++ iwe.u.mode = IW_MODE_ADHOC; ++ log(L_IOCTL, "scan, mode: %d\n", iwe.u.mode); ++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_UINT_LEN); ++ } ++ ++ /* Add frequency */ ++ iwe.cmd = SIOCGIWFREQ; ++ iwe.u.freq.m = acx_channel_freq[bss->channel - 1] * 100000; ++ iwe.u.freq.e = 1; ++ log(L_IOCTL, "scan, frequency: %d\n", iwe.u.freq.m); ++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_FREQ_LEN); ++ ++ /* Add link quality */ ++ iwe.cmd = IWEVQUAL; ++ /* FIXME: these values should be expressed in dBm, but we don't know ++ * how to calibrate it yet */ ++ iwe.u.qual.level = bss->sir; ++ iwe.u.qual.noise = bss->snr; ++#ifndef OLD_QUALITY ++ iwe.u.qual.qual = acx_signal_determine_quality(iwe.u.qual.level, ++ iwe.u.qual.noise); ++#else ++ iwe.u.qual.qual = (iwe.u.qual.noise <= 100) ? ++ 100 - iwe.u.qual.noise : 0; ++#endif ++ iwe.u.qual.updated = 7; ++ log(L_IOCTL, "scan, link quality: %d/%d/%d\n", ++ iwe.u.qual.level, iwe.u.qual.noise, iwe.u.qual.qual); ++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_QUAL_LEN); ++ ++ /* Add encryption */ ++ iwe.cmd = SIOCGIWENCODE; ++ if (bss->cap_info & WF_MGMT_CAP_PRIVACY) ++ iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; ++ else ++ iwe.u.data.flags = IW_ENCODE_DISABLED; ++ iwe.u.data.length = 0; ++ log(L_IOCTL, "scan, encryption flags: %X\n", iwe.u.data.flags); ++ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid); ++ ++ /* add rates */ ++ iwe.cmd = SIOCGIWRATE; ++ iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0; ++ ptr_rate = ptr + IW_EV_LCP_LEN; ++ ++ { ++ u16 rate = bss->rate_cap; ++ const u8* p = acx_bitpos2ratebyte; ++ while (rate) { ++ if (rate & 1) { ++ iwe.u.bitrate.value = *p * 500000; /* units of 500kb/s */ ++ log(L_IOCTL, "scan, rate: %d\n", iwe.u.bitrate.value); ++ ptr_rate = iwe_stream_add_value(ptr, ptr_rate, end_buf, ++ &iwe, IW_EV_PARAM_LEN); ++ } ++ rate >>= 1; ++ p++; ++ }} ++ ++ if ((ptr_rate - ptr) > (ptrdiff_t)IW_EV_LCP_LEN) ++ ptr = ptr_rate; ++ ++ /* drop remaining station data items for now */ ++ ++ FN_EXIT0; ++ return ptr; ++} ++ ++ ++/*********************************************************************** ++ * acx_ioctl_get_scan ++ */ ++static int ++acx_ioctl_get_scan( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->data; ++ acx_device_t *adev = ndev2adev(ndev); ++ char *ptr = extra; ++ int i; ++ int result = OK; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* no scan available if device is not up yet */ ++ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) { ++ log(L_IOCTL, "iface not up yet\n"); ++ result = -EAGAIN; ++ goto end_unlock; ++ } ++ ++#ifdef ENODATA_TO_BE_USED_AFTER_SCAN_ERROR_ONLY ++ if (adev->bss_table_count == 0) { ++ /* no stations found */ ++ result = -ENODATA; ++ goto end_unlock; ++ } ++#endif ++ ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ struct client *bss = &adev->sta_list[i]; ++ if (!bss->used) continue; ++ ptr = acx_s_scan_add_station(adev, ptr, ++ extra + IW_SCAN_MAX_DATA, bss); ++ } ++ dwrq->length = ptr - extra; ++ dwrq->flags = 0; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++/* end: */ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_essid ++*/ ++static int ++acx_ioctl_set_essid( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->essid; ++ acx_device_t *adev = ndev2adev(ndev); ++ int len = dwrq->length; ++ int result; ++ ++ FN_ENTER; ++ ++ if (len < 0) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ log(L_IOCTL, "set ESSID '%*s', length %d, flags 0x%04X\n", ++ len, extra, len, dwrq->flags); ++ ++#if WIRELESS_EXT >= 21 ++ /* WE 21 gives real ESSID strlen, not +1 (trailing zero): ++ * see LKML "[patch] drivers/net/wireless: correct reported ssid lengths" */ ++ len += 1; ++#endif ++ ++ acx_sem_lock(adev); ++ ++ /* ESSID disabled? */ ++ if (0 == dwrq->flags) { ++ adev->essid_active = 0; ++ ++ } else { ++ if (len > IW_ESSID_MAX_SIZE) { ++ result = -E2BIG; ++ goto end_unlock; ++ } ++ ++ if (len >= sizeof(adev->essid)) ++ len = sizeof(adev->essid) - 1; ++ memcpy(adev->essid, extra, len); ++ adev->essid[len] = '\0'; ++ /* Paranoia: just in case there is a '\0'... */ ++ adev->essid_len = strlen(adev->essid); ++ adev->essid_active = 1; ++ } ++ ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ ++ result = -EINPROGRESS; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_get_essid( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->essid; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ dwrq->flags = adev->essid_active; ++ if (adev->essid_active) { ++ memcpy(extra, adev->essid, adev->essid_len); ++ extra[adev->essid_len] = '\0'; ++ dwrq->length = adev->essid_len + 1; ++ dwrq->flags = 1; ++ } ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_l_update_client_rates ++*/ ++static void ++acx_l_update_client_rates(acx_device_t *adev, u16 rate) ++{ ++ int i; ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ client_t *clt = &adev->sta_list[i]; ++ if (!clt->used) continue; ++ clt->rate_cfg = (clt->rate_cap & rate); ++ if (!clt->rate_cfg) { ++ /* no compatible rates left: kick client */ ++ acxlog_mac(L_ASSOC, "client ",clt->address," kicked: " ++ "rates are not compatible anymore\n"); ++ acx_l_sta_list_del(adev, clt); ++ continue; ++ } ++ clt->rate_cur &= clt->rate_cfg; ++ if (!clt->rate_cur) { ++ /* current rate become invalid, choose a valid one */ ++ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg); ++ } ++ if (IS_ACX100(adev)) ++ clt->rate_100 = acx_bitpos2rate100[highest_bit(clt->rate_cur)]; ++ clt->fallback_count = clt->stepup_count = 0; ++ clt->ignore_count = 16; ++ } ++ switch (adev->mode) { ++ case ACX_MODE_2_STA: ++ if (adev->ap_client && !adev->ap_client->used) { ++ /* Owwww... we kicked our AP!! :) */ ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ } ++ } ++} ++ ++ ++/*********************************************************************** ++*/ ++/* maps bits from acx111 rate to rate in Mbits */ ++static const unsigned int ++acx111_rate_tbl[] = { ++ 1000000, /* 0 */ ++ 2000000, /* 1 */ ++ 5500000, /* 2 */ ++ 6000000, /* 3 */ ++ 9000000, /* 4 */ ++ 11000000, /* 5 */ ++ 12000000, /* 6 */ ++ 18000000, /* 7 */ ++ 22000000, /* 8 */ ++ 24000000, /* 9 */ ++ 36000000, /* 10 */ ++ 48000000, /* 11 */ ++ 54000000, /* 12 */ ++ 500000, /* 13, should not happen */ ++ 500000, /* 14, should not happen */ ++ 500000, /* 15, should not happen */ ++}; ++ ++/*********************************************************************** ++ * acx_ioctl_set_rate ++ */ ++static int ++acx_ioctl_set_rate( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->param; ++ acx_device_t *adev = ndev2adev(ndev); ++ u16 txrate_cfg = 1; ++ unsigned long flags; ++ int autorate; ++ int result = -EINVAL; ++ ++ FN_ENTER; ++ log(L_IOCTL, "rate %d fixed 0x%X disabled 0x%X flags 0x%X\n", ++ vwrq->value, vwrq->fixed, vwrq->disabled, vwrq->flags); ++ ++ if ((0 == vwrq->fixed) || (1 == vwrq->fixed)) { ++ int i = VEC_SIZE(acx111_rate_tbl)-1; ++ if (vwrq->value == -1) ++ /* "iwconfig rate auto" --> choose highest */ ++ vwrq->value = IS_ACX100(adev) ? 22000000 : 54000000; ++ while (i >= 0) { ++ if (vwrq->value == acx111_rate_tbl[i]) { ++ txrate_cfg <<= i; ++ i = 0; ++ break; ++ } ++ i--; ++ } ++ if (i == -1) { /* no matching rate */ ++ result = -EINVAL; ++ goto end; ++ } ++ } else { /* rate N, N<1000 (driver specific): we don't use this */ ++ result = -EOPNOTSUPP; ++ goto end; ++ } ++ /* now: only one bit is set in txrate_cfg, corresponding to ++ ** indicated rate */ ++ ++ autorate = (vwrq->fixed == 0) && (RATE111_1 != txrate_cfg); ++ if (autorate) { ++ /* convert 00100000 -> 00111111 */ ++ txrate_cfg = (txrate_cfg<<1)-1; ++ } ++ ++ if (IS_ACX100(adev)) { ++ txrate_cfg &= RATE111_ACX100_COMPAT; ++ if (!txrate_cfg) { ++ result = -ENOTSUPP; /* rate is not supported by acx100 */ ++ goto end; ++ } ++ } ++ ++ acx_sem_lock(adev); ++ acx_lock(adev, flags); ++ ++ adev->rate_auto = autorate; ++ adev->rate_oper = txrate_cfg; ++ adev->rate_basic = txrate_cfg; ++ /* only do that in auto mode, non-auto will be able to use ++ * one specific Tx rate only anyway */ ++ if (autorate) { ++ /* only use 802.11b base rates, for standard 802.11b H/W ++ * compatibility */ ++ adev->rate_basic &= RATE111_80211B_COMPAT; ++ } ++ adev->rate_bcast = 1 << lowest_bit(txrate_cfg); ++ if (IS_ACX100(adev)) ++ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast); ++ acx_l_update_ratevector(adev); ++ acx_l_update_client_rates(adev, txrate_cfg); ++ ++ /* Do/don't do tx rate fallback; beacon contents and rate */ ++ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES); ++ result = -EINPROGRESS; ++ ++ acx_unlock(adev, flags); ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_rate ++*/ ++static int ++acx_ioctl_get_rate( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->param; ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ u16 rate; ++ ++ acx_lock(adev, flags); ++ rate = adev->rate_oper; ++ if (adev->ap_client) ++ rate = adev->ap_client->rate_cur; ++ vwrq->value = acx111_rate_tbl[highest_bit(rate)]; ++ vwrq->fixed = !adev->rate_auto; ++ vwrq->disabled = 0; ++ acx_unlock(adev, flags); ++ ++ return OK; ++} ++ ++static int ++acx_ioctl_set_rts( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->rts; ++ acx_device_t *adev = ndev2adev(ndev); ++ int val = vwrq->value; ++ ++ if (vwrq->disabled) ++ val = 2312; ++ if ((val < 0) || (val > 2312)) ++ return -EINVAL; ++ ++ adev->rts_threshold = val; ++ return OK; ++} ++ ++static inline int ++acx_ioctl_get_rts( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->rts; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ vwrq->value = adev->rts_threshold; ++ vwrq->disabled = (vwrq->value >= 2312); ++ vwrq->fixed = 1; ++ return OK; ++} ++ ++ ++#if ACX_FRAGMENTATION ++static int ++acx_ioctl_set_frag( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int val = vwrq->value; ++ ++ if (vwrq->disabled) ++ val = 32767; ++ else ++ if ((val < 256) || (val > 2347)) ++ return -EINVAL; ++ ++ adev->frag_threshold = val; ++ return OK; ++} ++ ++static inline int ++acx_ioctl_get_frag( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->frag; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ vwrq->value = adev->frag_threshold; ++ vwrq->disabled = (vwrq->value >= 2347); ++ vwrq->fixed = 1; ++ return OK; ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_encode ++*/ ++static int ++acx_ioctl_set_encode( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->encoding; ++ acx_device_t *adev = ndev2adev(ndev); ++ int index; ++ int result; ++ ++ FN_ENTER; ++ ++ log(L_IOCTL, "set encoding flags=0x%04X, size=%d, key: %s\n", ++ dwrq->flags, dwrq->length, extra ? "set" : "No key"); ++ ++ acx_sem_lock(adev); ++ ++ index = (dwrq->flags & IW_ENCODE_INDEX) - 1; ++ ++ if (dwrq->length > 0) { ++ /* if index is 0 or invalid, use default key */ ++ if ((index < 0) || (index > 3)) ++ index = (int)adev->wep_current_index; ++ ++ if (0 == (dwrq->flags & IW_ENCODE_NOKEY)) { ++ if (dwrq->length > 29) ++ dwrq->length = 29; /* restrict it */ ++ ++ if (dwrq->length > 13) { ++ /* 29*8 == 232, WEP256 */ ++ adev->wep_keys[index].size = 29; ++ } else if (dwrq->length > 5) { ++ /* 13*8 == 104bit, WEP128 */ ++ adev->wep_keys[index].size = 13; ++ } else if (dwrq->length > 0) { ++ /* 5*8 == 40bit, WEP64 */ ++ adev->wep_keys[index].size = 5; ++ } else { ++ /* disable key */ ++ adev->wep_keys[index].size = 0; ++ } ++ ++ memset(adev->wep_keys[index].key, 0, ++ sizeof(adev->wep_keys[index].key)); ++ memcpy(adev->wep_keys[index].key, extra, dwrq->length); ++ } ++ } else { ++ /* set transmit key */ ++ if ((index >= 0) && (index <= 3)) ++ adev->wep_current_index = index; ++ else if (0 == (dwrq->flags & IW_ENCODE_MODE)) { ++ /* complain if we were not just setting ++ * the key mode */ ++ result = -EINVAL; ++ goto end_unlock; ++ } ++ } ++ ++ adev->wep_enabled = !(dwrq->flags & IW_ENCODE_DISABLED); ++ ++ if (dwrq->flags & IW_ENCODE_OPEN) { ++ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM; ++ adev->wep_restricted = 0; ++ ++ } else if (dwrq->flags & IW_ENCODE_RESTRICTED) { ++ adev->auth_alg = WLAN_AUTH_ALG_SHAREDKEY; ++ adev->wep_restricted = 1; ++ } ++ ++ /* set flag to make sure the card WEP settings get updated */ ++ SET_BIT(adev->set_mask, GETSET_WEP); ++ ++ log(L_IOCTL, "len=%d, key at 0x%p, flags=0x%X\n", ++ dwrq->length, extra, dwrq->flags); ++ ++ for (index = 0; index <= 3; index++) { ++ if (adev->wep_keys[index].size) { ++ log(L_IOCTL, "index=%d, size=%d, key at 0x%p\n", ++ adev->wep_keys[index].index, ++ (int) adev->wep_keys[index].size, ++ adev->wep_keys[index].key); ++ } ++ } ++ result = -EINPROGRESS; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_encode ++*/ ++static int ++acx_ioctl_get_encode( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->encoding; ++ acx_device_t *adev = ndev2adev(ndev); ++ int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; ++ ++ FN_ENTER; ++ ++ if (adev->wep_enabled == 0) { ++ dwrq->flags = IW_ENCODE_DISABLED; ++ } else { ++ if ((index < 0) || (index > 3)) ++ index = (int)adev->wep_current_index; ++ ++ dwrq->flags = (adev->wep_restricted == 1) ? ++ IW_ENCODE_RESTRICTED : IW_ENCODE_OPEN; ++ dwrq->length = adev->wep_keys[index].size; ++ ++ memcpy(extra, adev->wep_keys[index].key, ++ adev->wep_keys[index].size); ++ } ++ ++ /* set the current index */ ++ SET_BIT(dwrq->flags, index + 1); ++ ++ log(L_IOCTL, "len=%d, key=%p, flags=0x%X\n", ++ dwrq->length, dwrq->pointer, ++ dwrq->flags); ++ ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_set_power( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->power; ++ acx_device_t *adev = ndev2adev(ndev); ++ int result = -EINPROGRESS; ++ ++ FN_ENTER; ++ ++ log(L_IOCTL, "set 802.11 powersave flags=0x%04X\n", vwrq->flags); ++ ++ acx_sem_lock(adev); ++ ++ if (vwrq->disabled) { ++ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE); ++ SET_BIT(adev->set_mask, GETSET_POWER_80211); ++ goto end; ++ } ++ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { ++ u16 ps_timeout = (vwrq->value * 1024) / 1000; ++ ++ if (ps_timeout > 255) ++ ps_timeout = 255; ++ log(L_IOCTL, "setting PS timeout value to %d time units " ++ "due to %dus\n", ps_timeout, vwrq->value); ++ adev->ps_hangover_period = ps_timeout; ++ } else if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) { ++ u16 ps_periods = vwrq->value / 1000000; ++ ++ if (ps_periods > 255) ++ ps_periods = 255; ++ log(L_IOCTL, "setting PS period value to %d periods " ++ "due to %dus\n", ps_periods, vwrq->value); ++ adev->ps_listen_interval = ps_periods; ++ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_MODE_MASK); ++ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_EACH_ITVL); ++ } ++ ++ switch (vwrq->flags & IW_POWER_MODE) { ++ /* FIXME: are we doing the right thing here? */ ++ case IW_POWER_UNICAST_R: ++ CLEAR_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS); ++ break; ++ case IW_POWER_MULTICAST_R: ++ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS); ++ break; ++ case IW_POWER_ALL_R: ++ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS); ++ break; ++ case IW_POWER_ON: ++ break; ++ default: ++ log(L_IOCTL, "unknown PS mode\n"); ++ result = -EINVAL; ++ goto end; ++ } ++ ++ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE); ++ SET_BIT(adev->set_mask, GETSET_POWER_80211); ++end: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx_ioctl_get_power( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->power; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ FN_ENTER; ++ ++ log(L_IOCTL, "Get 802.11 Power Save flags = 0x%04X\n", vwrq->flags); ++ vwrq->disabled = ((adev->ps_wakeup_cfg & PS_CFG_ENABLE) == 0); ++ if (vwrq->disabled) ++ goto end; ++ ++ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { ++ vwrq->value = adev->ps_hangover_period * 1000 / 1024; ++ vwrq->flags = IW_POWER_TIMEOUT; ++ } else { ++ vwrq->value = adev->ps_listen_interval * 1000000; ++ vwrq->flags = IW_POWER_PERIOD|IW_POWER_RELATIVE; ++ } ++ if (adev->ps_options & PS_OPT_STILL_RCV_BCASTS) ++ SET_BIT(vwrq->flags, IW_POWER_ALL_R); ++ else ++ SET_BIT(vwrq->flags, IW_POWER_UNICAST_R); ++end: ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_txpow ++*/ ++static inline int ++acx_ioctl_get_txpow( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->power; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ FN_ENTER; ++ ++ vwrq->flags = IW_TXPOW_DBM; ++ vwrq->disabled = 0; ++ vwrq->fixed = 1; ++ vwrq->value = adev->tx_level_dbm; ++ ++ log(L_IOCTL, "get txpower:%d dBm\n", adev->tx_level_dbm); ++ ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_txpow ++*/ ++static int ++acx_ioctl_set_txpow( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->power; ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ log(L_IOCTL, "set txpower:%d, disabled:%d, flags:0x%04X\n", ++ vwrq->value, vwrq->disabled, vwrq->flags); ++ ++ acx_sem_lock(adev); ++ ++ if (vwrq->disabled != adev->tx_disabled) { ++ SET_BIT(adev->set_mask, GETSET_TX); ++ } ++ ++ adev->tx_disabled = vwrq->disabled; ++ if (vwrq->value == -1) { ++ if (vwrq->disabled) { ++ adev->tx_level_dbm = 0; ++ log(L_IOCTL, "disable radio tx\n"); ++ } else { ++ /* adev->tx_level_auto = 1; */ ++ log(L_IOCTL, "set tx power auto (NIY)\n"); ++ } ++ } else { ++ adev->tx_level_dbm = vwrq->value <= 20 ? vwrq->value : 20; ++ /* adev->tx_level_auto = 0; */ ++ log(L_IOCTL, "set txpower=%d dBm\n", adev->tx_level_dbm); ++ } ++ SET_BIT(adev->set_mask, GETSET_TXPOWER); ++ ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_range ++*/ ++static int ++acx_ioctl_get_range( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->data; ++ struct iw_range *range = (struct iw_range *)extra; ++ acx_device_t *adev = ndev2adev(ndev); ++ int i,n; ++ ++ FN_ENTER; ++ ++ if (!dwrq->pointer) ++ goto end; ++ ++ dwrq->length = sizeof(struct iw_range); ++ memset(range, 0, sizeof(struct iw_range)); ++ n = 0; ++ for (i = 1; i <= 14; i++) { ++ if (adev->reg_dom_chanmask & (1 << (i - 1))) { ++ range->freq[n].i = i; ++ range->freq[n].m = acx_channel_freq[i - 1] * 100000; ++ range->freq[n].e = 1; /* units are MHz */ ++ n++; ++ } ++ } ++ range->num_channels = n; ++ range->num_frequency = n; ++ ++ range->min_rts = 0; ++ range->max_rts = 2312; ++ ++#if ACX_FRAGMENTATION ++ range->min_frag = 256; ++ range->max_frag = 2312; ++#endif ++ ++ range->encoding_size[0] = 5; ++ range->encoding_size[1] = 13; ++ range->encoding_size[2] = 29; ++ range->num_encoding_sizes = 3; ++ range->max_encoding_tokens = 4; ++ ++ range->min_pmp = 0; ++ range->max_pmp = 5000000; ++ range->min_pmt = 0; ++ range->max_pmt = 65535 * 1000; ++ range->pmp_flags = IW_POWER_PERIOD; ++ range->pmt_flags = IW_POWER_TIMEOUT; ++ range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R; ++ ++ if (IS_ACX100(adev)) { /* ACX100 has direct radio programming - arbitrary levels, so offer a lot */ ++ for (i = 0; i <= IW_MAX_TXPOWER - 1; i++) ++ range->txpower[i] = 20 * i / (IW_MAX_TXPOWER - 1); ++ range->num_txpower = IW_MAX_TXPOWER; ++ range->txpower_capa = IW_TXPOW_DBM; ++ } ++ else { ++ int count = min(IW_MAX_TXPOWER, (int)adev->cfgopt_power_levels.len); ++ for (i = 0; i <= count; i++) ++ range->txpower[i] = adev->cfgopt_power_levels.list[i]; ++ range->num_txpower = count; ++ /* this list is given in mW */ ++ range->txpower_capa = IW_TXPOW_MWATT; ++ } ++ ++ range->we_version_compiled = WIRELESS_EXT; ++ range->we_version_source = 0x9; ++ ++ range->retry_capa = IW_RETRY_LIMIT; ++ range->retry_flags = IW_RETRY_LIMIT; ++ range->min_retry = 1; ++ range->max_retry = 255; ++ ++ range->r_time_flags = IW_RETRY_LIFETIME; ++ range->min_r_time = 0; ++ /* FIXME: lifetime ranges and orders of magnitude are strange?? */ ++ range->max_r_time = 65535; ++ ++ if (IS_USB(adev)) ++ range->sensitivity = 0; ++ else if (IS_ACX111(adev)) ++ range->sensitivity = 3; ++ else ++ range->sensitivity = 255; ++ ++ for (i=0; i < adev->rate_supported_len; i++) { ++ range->bitrate[i] = (adev->rate_supported[i] & ~0x80) * 500000; ++ /* never happens, but keep it, to be safe: */ ++ if (range->bitrate[i] == 0) ++ break; ++ } ++ range->num_bitrates = i; ++ ++ range->max_qual.qual = 100; ++ range->max_qual.level = 100; ++ range->max_qual.noise = 100; ++ /* TODO: better values */ ++ range->avg_qual.qual = 90; ++ range->avg_qual.level = 80; ++ range->avg_qual.noise = 2; ++ ++end: ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** Private functions ++*/ ++ ++/*********************************************************************** ++** acx_ioctl_get_nick ++*/ ++static inline int ++acx_ioctl_get_nick( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->data; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ strcpy(extra, adev->nick); ++ dwrq->length = strlen(extra) + 1; ++ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_nick ++*/ ++static int ++acx_ioctl_set_nick( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_point *dwrq = &wrqu->data; ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ if (dwrq->length > IW_ESSID_MAX_SIZE + 1) { ++ result = -E2BIG; ++ goto end_unlock; ++ } ++ ++ /* extra includes trailing \0, so it's ok */ ++ strcpy(adev->nick, extra); ++ result = OK; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_retry ++*/ ++static int ++acx_ioctl_get_retry( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->retry; ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned int type = vwrq->flags & IW_RETRY_TYPE; ++ unsigned int modifier = vwrq->flags & IW_RETRY_MODIFIER; ++ int result; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* return the short retry number by default */ ++ if (type == IW_RETRY_LIFETIME) { ++ vwrq->flags = IW_RETRY_LIFETIME; ++ vwrq->value = adev->msdu_lifetime; ++ } else if (modifier == IW_RETRY_MAX) { ++ vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_MAX; ++ vwrq->value = adev->long_retry; ++ } else { ++ vwrq->flags = IW_RETRY_LIMIT; ++ if (adev->long_retry != adev->short_retry) ++ SET_BIT(vwrq->flags, IW_RETRY_MIN); ++ vwrq->value = adev->short_retry; ++ } ++ ++ /* can't be disabled */ ++ vwrq->disabled = (u8)0; ++ result = OK; ++ ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_retry ++*/ ++static int ++acx_ioctl_set_retry( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->retry; ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ if (!vwrq) { ++ result = -EFAULT; ++ goto end; ++ } ++ if (vwrq->disabled) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ acx_sem_lock(adev); ++ ++ result = -EINVAL; ++ if (IW_RETRY_LIMIT == (vwrq->flags & IW_RETRY_TYPE)) { ++ printk("old retry limits: short %d long %d\n", ++ adev->short_retry, adev->long_retry); ++ if (vwrq->flags & IW_RETRY_MAX) { ++ adev->long_retry = vwrq->value; ++ } else if (vwrq->flags & IW_RETRY_MIN) { ++ adev->short_retry = vwrq->value; ++ } else { ++ /* no modifier: set both */ ++ adev->long_retry = vwrq->value; ++ adev->short_retry = vwrq->value; ++ } ++ printk("new retry limits: short %d long %d\n", ++ adev->short_retry, adev->long_retry); ++ SET_BIT(adev->set_mask, GETSET_RETRY); ++ result = -EINPROGRESS; ++ } ++ else if (vwrq->flags & IW_RETRY_LIFETIME) { ++ adev->msdu_lifetime = vwrq->value; ++ printk("new MSDU lifetime: %d\n", adev->msdu_lifetime); ++ SET_BIT(adev->set_mask, SET_MSDU_LIFETIME); ++ result = -EINPROGRESS; ++ } ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/************************ private ioctls ******************************/ ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_debug ++*/ ++#if ACX_DEBUG ++static int ++acx_ioctl_set_debug( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ unsigned int debug_new = *((unsigned int *)extra); ++ int result = -EINVAL; ++ ++ log(L_ANY, "setting debug from %04X to %04X\n", acx_debug, debug_new); ++ acx_debug = debug_new; ++ ++ result = OK; ++ return result; ++ ++} ++#endif ++ ++ ++/*********************************************************************** ++** acx_ioctl_list_reg_domain ++*/ ++static int ++acx_ioctl_list_reg_domain( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ int i = 1; ++ const char * const *entry = acx_reg_domain_strings; ++ ++ printk("dom# chan# domain/country\n"); ++ while (*entry) ++ printk("%4d %s\n", i++, *entry++); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_reg_domain ++*/ ++static int ++acx_ioctl_set_reg_domain( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ if ((*extra < 1) || ((size_t)*extra > acx_reg_domain_ids_len)) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ acx_sem_lock(adev); ++ ++ adev->reg_dom_id = acx_reg_domain_ids[*extra - 1]; ++ SET_BIT(adev->set_mask, GETSET_REG_DOMAIN); ++ ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_reg_domain ++*/ ++static int ++acx_ioctl_get_reg_domain( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int dom,i; ++ ++ /* no locking */ ++ dom = adev->reg_dom_id; ++ ++ for (i = 1; i <= acx_reg_domain_ids_len; i++) { ++ if (acx_reg_domain_ids[i-1] == dom) { ++ log(L_IOCTL, "regulatory domain is currently set " ++ "to %d (0x%X): %s\n", i, dom, ++ acx_reg_domain_strings[i-1]); ++ *extra = i; ++ break; ++ } ++ } ++ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_short_preamble ++*/ ++static const char * const ++preamble_modes[] = { ++ "off", ++ "on", ++ "auto (peer capability dependent)", ++ "unknown mode, error" ++}; ++ ++static int ++acx_ioctl_set_short_preamble( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int i; ++ int result; ++ ++ FN_ENTER; ++ ++ if ((unsigned char)*extra > 2) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ acx_sem_lock(adev); ++ ++ adev->preamble_mode = (u8)*extra; ++ switch (adev->preamble_mode) { ++ case 0: /* long */ ++ adev->preamble_cur = 0; ++ break; ++ case 1: ++ /* short, kick incapable peers */ ++ adev->preamble_cur = 1; ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ client_t *clt = &adev->sta_list[i]; ++ if (!clt->used) continue; ++ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) { ++ clt->used = CLIENT_EMPTY_SLOT_0; ++ } ++ } ++ switch (adev->mode) { ++ case ACX_MODE_2_STA: ++ if (adev->ap_client && !adev->ap_client->used) { ++ /* We kicked our AP :) */ ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ } ++ } ++ break; ++ case 2: /* auto. short only if all peers are short-capable */ ++ adev->preamble_cur = 1; ++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) { ++ client_t *clt = &adev->sta_list[i]; ++ if (!clt->used) continue; ++ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) { ++ adev->preamble_cur = 0; ++ break; ++ } ++ } ++ break; ++ } ++ printk("new short preamble setting: configured %s, active %s\n", ++ preamble_modes[adev->preamble_mode], ++ preamble_modes[adev->preamble_cur]); ++ result = OK; ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_short_preamble ++*/ ++static int ++acx_ioctl_get_short_preamble( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ acx_sem_lock(adev); ++ ++ printk("current short preamble setting: configured %s, active %s\n", ++ preamble_modes[adev->preamble_mode], ++ preamble_modes[adev->preamble_cur]); ++ ++ *extra = (char)adev->preamble_mode; ++ ++ acx_sem_unlock(adev); ++ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_antenna ++** ++** TX and RX antenna can be set separately but this function good ++** for testing 0-4 bits ++*/ ++static int ++acx_ioctl_set_antenna( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ acx_sem_lock(adev); ++ ++ printk("old antenna value: 0x%02X (COMBINED bit mask)\n" ++ "Rx antenna selection:\n" ++ "0x00 ant. 1\n" ++ "0x40 ant. 2\n" ++ "0x80 full diversity\n" ++ "0xc0 partial diversity\n" ++ "0x0f dwell time mask (in units of us)\n" ++ "Tx antenna selection:\n" ++ "0x00 ant. 2\n" /* yep, those ARE reversed! */ ++ "0x20 ant. 1\n" ++ "new antenna value: 0x%02X\n", ++ adev->antenna, (u8)*extra); ++ ++ adev->antenna = (u8)*extra; ++ SET_BIT(adev->set_mask, GETSET_ANTENNA); ++ ++ acx_sem_unlock(adev); ++ ++ return -EINPROGRESS; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_antenna ++*/ ++static int ++acx_ioctl_get_antenna( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ /* no locking. it's pointless to lock a single load */ ++ printk("current antenna value: 0x%02X (COMBINED bit mask)\n" ++ "Rx antenna selection:\n" ++ "0x00 ant. 1\n" ++ "0x40 ant. 2\n" ++ "0x80 full diversity\n" ++ "0xc0 partial diversity\n" ++ "Tx antenna selection:\n" ++ "0x00 ant. 2\n" /* yep, those ARE reversed! */ ++ "0x20 ant. 1\n", adev->antenna); ++ ++ return 0; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_rx_antenna ++** ++** 0 = antenna1; 1 = antenna2; 2 = full diversity; 3 = partial diversity ++** Could anybody test which antenna is the external one? ++*/ ++static int ++acx_ioctl_set_rx_antenna( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ if (*extra > 3) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ printk("old antenna value: 0x%02X\n", adev->antenna); ++ ++ acx_sem_lock(adev); ++ ++ adev->antenna &= 0x3f; ++ SET_BIT(adev->antenna, (*extra << 6)); ++ SET_BIT(adev->set_mask, GETSET_ANTENNA); ++ printk("new antenna value: 0x%02X\n", adev->antenna); ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_tx_antenna ++** ++** Arguments: 0 == antenna2; 1 == antenna1; ++** Could anybody test which antenna is the external one? ++*/ ++static int ++acx_ioctl_set_tx_antenna( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ FN_ENTER; ++ ++ if (*extra > 1) { ++ result = -EINVAL; ++ goto end; ++ } ++ ++ printk("old antenna value: 0x%02X\n", adev->antenna); ++ ++ acx_sem_lock(adev); ++ ++ adev->antenna &= ~0x30; ++ SET_BIT(adev->antenna, ((*extra & 0x01) << 5)); ++ SET_BIT(adev->set_mask, GETSET_ANTENNA); ++ printk("new antenna value: 0x%02X\n", adev->antenna); ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_wlansniff ++** ++** can we just remove this in favor of monitor mode? --vda ++*/ ++static int ++acx_ioctl_wlansniff( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned int *params = (unsigned int*)extra; ++ unsigned int enable = (unsigned int)(params[0] > 0); ++ int result; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* not using printk() here, since it distorts kismet display ++ * when printk messages activated */ ++ log(L_IOCTL, "setting monitor to: 0x%02X\n", params[0]); ++ ++ switch (params[0]) { ++ case 0: ++ /* no monitor mode. hmm, should we simply ignore it ++ * or go back to enabling adev->netdev->type ARPHRD_ETHER? */ ++ break; ++ case 1: ++ adev->monitor_type = ARPHRD_IEEE80211_PRISM; ++ break; ++ case 2: ++ adev->monitor_type = ARPHRD_IEEE80211; ++ break; ++ } ++ ++ if (params[0]) { ++ adev->mode = ACX_MODE_MONITOR; ++ SET_BIT(adev->set_mask, GETSET_MODE); ++ } ++ ++ if (enable) { ++ adev->channel = params[1]; ++ SET_BIT(adev->set_mask, GETSET_RX); ++ } ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_unknown11 ++** FIXME: looks like some sort of "iwpriv kick_sta MAC" but it's broken ++*/ ++static int ++acx_ioctl_unknown11( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++#ifdef BROKEN ++ struct iw_param *vwrq = &wrqu->param; ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ client_t client; ++ int result; ++ ++ acx_sem_lock(adev); ++ acx_lock(adev, flags); ++ ++ acx_l_transmit_disassoc(adev, &client); ++ result = OK; ++ ++ acx_unlock(adev, flags); ++ acx_sem_unlock(adev); ++ ++ return result; ++#endif ++ return -EINVAL; ++} ++ ++ ++/*********************************************************************** ++** debug helper function to be able to debug various issues relatively easily ++*/ ++static int ++acx_ioctl_dbg_set_masks( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ const unsigned int *params = (unsigned int*)extra; ++ int result; ++ ++ acx_sem_lock(adev); ++ ++ log(L_IOCTL, "setting flags in settings mask: " ++ "get_mask %08X set_mask %08X\n" ++ "before: get_mask %08X set_mask %08X\n", ++ params[0], params[1], ++ adev->get_mask, adev->set_mask); ++ SET_BIT(adev->get_mask, params[0]); ++ SET_BIT(adev->set_mask, params[1]); ++ log(L_IOCTL, "after: get_mask %08X set_mask %08X\n", ++ adev->get_mask, adev->set_mask); ++ result = -EINPROGRESS; /* immediately call commit handler */ ++ ++ acx_sem_unlock(adev); ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++* acx_ioctl_set_rates ++* ++* This ioctl takes string parameter. Examples: ++* iwpriv wlan0 SetRates "1,2" ++* use 1 and 2 Mbit rates, both are in basic rate set ++* iwpriv wlan0 SetRates "1,2 5,11" ++* use 1,2,5.5,11 Mbit rates. 1 and 2 are basic ++* iwpriv wlan0 SetRates "1,2 5c,11c" ++* same ('c' means 'CCK modulation' and it is a default for 5 and 11) ++* iwpriv wlan0 SetRates "1,2 5p,11p" ++* use 1,2,5.5,11 Mbit, 1,2 are basic. 5 and 11 are using PBCC ++* iwpriv wlan0 SetRates "1,2,5,11 22p" ++* use 1,2,5.5,11,22 Mbit. 1,2,5.5 and 11 are basic. 22 is using PBCC ++* (this is the maximum acx100 can do (modulo x4 mode)) ++* iwpriv wlan0 SetRates "1,2,5,11 22" ++* same. 802.11 defines only PBCC modulation ++* for 22 and 33 Mbit rates, so there is no ambiguity ++* iwpriv wlan0 SetRates "1,2,5,11 6o,9o,12o,18o,24o,36o,48o,54o" ++* 1,2,5.5 and 11 are basic. 11g OFDM rates are enabled but ++* they are not in basic rate set. 22 Mbit is disabled. ++* iwpriv wlan0 SetRates "1,2,5,11 6,9,12,18,24,36,48,54" ++* same. OFDM is default for 11g rates except 22 and 33 Mbit, ++* thus 'o' is optional ++* iwpriv wlan0 SetRates "1,2,5,11 6d,9d,12d,18d,24d,36d,48d,54d" ++* 1,2,5.5 and 11 are basic. 11g CCK-OFDM rates are enabled ++* (acx111 does not support CCK-OFDM, driver will reject this cmd) ++* iwpriv wlan0 SetRates "6,9,12 18,24,36,48,54" ++* 6,9,12 are basic, rest of 11g rates is enabled. Using OFDM ++*/ ++#include "setrate.c" ++ ++/* disallow: 33Mbit (unsupported by hw) */ ++/* disallow: CCKOFDM (unsupported by hw) */ ++static int ++acx111_supported(int mbit, int modulation, void *opaque) ++{ ++ if (mbit==33) return -ENOTSUPP; ++ if (modulation==DOT11_MOD_CCKOFDM) return -ENOTSUPP; ++ return OK; ++} ++ ++static const u16 ++acx111mask[] = { ++ [DOT11_RATE_1 ] = RATE111_1 , ++ [DOT11_RATE_2 ] = RATE111_2 , ++ [DOT11_RATE_5 ] = RATE111_5 , ++ [DOT11_RATE_11] = RATE111_11, ++ [DOT11_RATE_22] = RATE111_22, ++ /* [DOT11_RATE_33] = */ ++ [DOT11_RATE_6 ] = RATE111_6 , ++ [DOT11_RATE_9 ] = RATE111_9 , ++ [DOT11_RATE_12] = RATE111_12, ++ [DOT11_RATE_18] = RATE111_18, ++ [DOT11_RATE_24] = RATE111_24, ++ [DOT11_RATE_36] = RATE111_36, ++ [DOT11_RATE_48] = RATE111_48, ++ [DOT11_RATE_54] = RATE111_54, ++}; ++ ++static u32 ++acx111_gen_mask(int mbit, int modulation, void *opaque) ++{ ++ /* lower 16 bits show selected 1, 2, CCK and OFDM rates */ ++ /* upper 16 bits show selected PBCC rates */ ++ u32 m = acx111mask[rate_mbit2enum(mbit)]; ++ if (modulation==DOT11_MOD_PBCC) ++ return m<<16; ++ return m; ++} ++ ++static int ++verify_rate(u32 rate, int chip_type) ++{ ++ /* never happens. be paranoid */ ++ if (!rate) return -EINVAL; ++ ++ /* disallow: mixing PBCC and CCK at 5 and 11Mbit ++ ** (can be supported, but needs complicated handling in tx code) */ ++ if (( rate & ((RATE111_11+RATE111_5)<<16) ) ++ && ( rate & (RATE111_11+RATE111_5) ) ++ ) { ++ return -ENOTSUPP; ++ } ++ if (CHIPTYPE_ACX100 == chip_type) { ++ if ( rate & ~(RATE111_ACX100_COMPAT+(RATE111_ACX100_COMPAT<<16)) ) ++ return -ENOTSUPP; ++ } ++ return 0; ++} ++ ++static int ++acx_ioctl_set_rates(struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ int result; ++ u32 brate = 0, orate = 0; /* basic, operational rate set */ ++ ++ FN_ENTER; ++ ++ log(L_IOCTL, "set_rates %s\n", extra); ++ result = fill_ratemasks(extra, &brate, &orate, ++ acx111_supported, acx111_gen_mask, 0); ++ if (result) goto end; ++ SET_BIT(orate, brate); ++ log(L_IOCTL, "brate %08X orate %08X\n", brate, orate); ++ ++ result = verify_rate(brate, adev->chip_type); ++ if (result) goto end; ++ result = verify_rate(orate, adev->chip_type); ++ if (result) goto end; ++ ++ acx_sem_lock(adev); ++ acx_lock(adev, flags); ++ ++ adev->rate_basic = brate; ++ adev->rate_oper = orate; ++ /* TODO: ideally, we shall monitor highest basic rate ++ ** which was successfully sent to every peer ++ ** (say, last we checked, everybody could hear 5.5 Mbits) ++ ** and use that for bcasts when we want to reach all peers. ++ ** For beacons, we probably shall use lowest basic rate ++ ** because we want to reach all *potential* new peers too */ ++ adev->rate_bcast = 1 << lowest_bit(brate); ++ if (IS_ACX100(adev)) ++ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast); ++ adev->rate_auto = !has_only_one_bit(orate); ++ acx_l_update_client_rates(adev, orate); ++ /* TODO: get rid of ratevector, build it only when needed */ ++ acx_l_update_ratevector(adev); ++ ++ /* Do/don't do tx rate fallback; beacon contents and rate */ ++ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES); ++ result = -EINPROGRESS; ++ ++ acx_unlock(adev, flags); ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_get_phy_chan_busy_percentage ++*/ ++static int ++acx_ioctl_get_phy_chan_busy_percentage( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ struct { ++ u16 type; ++ u16 len; ++ u32 busytime; ++ u32 totaltime; ++ } ACX_PACKED usage; ++ int result; ++ ++ acx_sem_lock(adev); ++ ++ if (OK != acx_s_interrogate(adev, &usage, ACX1xx_IE_MEDIUM_USAGE)) { ++ result = NOT_OK; ++ goto end_unlock; ++ } ++ ++ usage.busytime = le32_to_cpu(usage.busytime); ++ usage.totaltime = le32_to_cpu(usage.totaltime); ++ ++ /* yes, this is supposed to be "Medium" (singular of media), ++ not "average"! OK, reword the message to make it obvious... */ ++ printk("%s: busy percentage of medium (since last invocation): %d%% " ++ "(%u of %u microseconds)\n", ++ ndev->name, ++ usage.busytime / ((usage.totaltime / 100) + 1), ++ usage.busytime, usage.totaltime); ++ ++ result = OK; ++ ++end_unlock: ++ acx_sem_unlock(adev); ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_ed_threshold ++*/ ++static inline int ++acx_ioctl_set_ed_threshold( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ acx_sem_lock(adev); ++ ++ printk("old ED threshold value: %d\n", adev->ed_threshold); ++ adev->ed_threshold = (unsigned char)*extra; ++ printk("new ED threshold value: %d\n", (unsigned char)*extra); ++ SET_BIT(adev->set_mask, GETSET_ED_THRESH); ++ ++ acx_sem_unlock(adev); ++ ++ return -EINPROGRESS; ++} ++ ++ ++/*********************************************************************** ++** acx_ioctl_set_cca ++*/ ++static inline int ++acx_ioctl_set_cca( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ acx_sem_lock(adev); ++ ++ printk("old CCA value: 0x%02X\n", adev->cca); ++ adev->cca = (unsigned char)*extra; ++ printk("new CCA value: 0x%02X\n", (unsigned char)*extra); ++ SET_BIT(adev->set_mask, GETSET_CCA); ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static const char * const ++scan_modes[] = { "active", "passive", "background" }; ++ ++static void ++acx_print_scan_params(acx_device_t *adev, const char* head) ++{ ++ printk("%s: %smode %d (%s), min chan time %dTU, " ++ "max chan time %dTU, max scan rate byte: %d\n", ++ adev->ndev->name, head, ++ adev->scan_mode, scan_modes[adev->scan_mode], ++ adev->scan_probe_delay, adev->scan_duration, adev->scan_rate); ++} ++ ++static int ++acx_ioctl_set_scan_params( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ const int *params = (int *)extra; ++ ++ acx_sem_lock(adev); ++ ++ acx_print_scan_params(adev, "old scan parameters: "); ++ if ((params[0] != -1) && (params[0] >= 0) && (params[0] <= 2)) ++ adev->scan_mode = params[0]; ++ if (params[1] != -1) ++ adev->scan_probe_delay = params[1]; ++ if (params[2] != -1) ++ adev->scan_duration = params[2]; ++ if ((params[3] != -1) && (params[3] <= 255)) ++ adev->scan_rate = params[3]; ++ acx_print_scan_params(adev, "new scan parameters: "); ++ SET_BIT(adev->set_mask, GETSET_RESCAN); ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++ ++ return result; ++} ++ ++static int ++acx_ioctl_get_scan_params( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ int *params = (int *)extra; ++ ++ acx_sem_lock(adev); ++ ++ acx_print_scan_params(adev, "current scan parameters: "); ++ params[0] = adev->scan_mode; ++ params[1] = adev->scan_probe_delay; ++ params[2] = adev->scan_duration; ++ params[3] = adev->scan_rate; ++ result = OK; ++ ++ acx_sem_unlock(adev); ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx100_ioctl_set_led_power( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ static const char * const led_modes[] = { "off", "on", "LinkQuality" }; ++ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result; ++ ++ acx_sem_lock(adev); ++ ++ printk("%s: power LED status: old %d (%s), ", ++ ndev->name, ++ adev->led_power, ++ led_modes[adev->led_power]); ++ adev->led_power = extra[0]; ++ if (adev->led_power > 2) adev->led_power = 2; ++ printk("new %d (%s)\n", ++ adev->led_power, ++ led_modes[adev->led_power]); ++ ++ if (adev->led_power == 2) { ++ printk("%s: max link quality setting: old %d, ", ++ ndev->name, adev->brange_max_quality); ++ if (extra[1]) ++ adev->brange_max_quality = extra[1]; ++ printk("new %d\n", adev->brange_max_quality); ++ } ++ ++ SET_BIT(adev->set_mask, GETSET_LED_POWER); ++ ++ result = -EINPROGRESS; ++ ++ acx_sem_unlock(adev); ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++static inline int ++acx100_ioctl_get_led_power( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ acx_sem_lock(adev); ++ ++ extra[0] = adev->led_power; ++ if (adev->led_power == 2) ++ extra[1] = adev->brange_max_quality; ++ else ++ extra[1] = -1; ++ ++ acx_sem_unlock(adev); ++ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx111_ioctl_info( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->param; ++ if (!IS_PCI(ndev2adev(ndev))) ++ return OK; ++ return acx111pci_ioctl_info(ndev, info, vwrq, extra); ++} ++ ++ ++/*********************************************************************** ++*/ ++static int ++acx100_ioctl_set_phy_amp_bias( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, ++ char *extra) ++{ ++ struct iw_param *vwrq = &wrqu->param; ++ if (IS_USB(ndev2adev(ndev))) { ++ printk("acx: set_phy_amp_bias() is not supported on USB\n"); ++ return OK; ++ } ++#ifdef ACX_MEM ++ return acx100mem_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra); ++#else ++ return acx100pci_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra); ++#endif ++} ++ ++ ++/*********************************************************************** ++*/ ++static const iw_handler acx_ioctl_handler[] = ++{ ++ acx_ioctl_commit, /* SIOCSIWCOMMIT */ ++ acx_ioctl_get_name, /* SIOCGIWNAME */ ++ NULL, /* SIOCSIWNWID */ ++ NULL, /* SIOCGIWNWID */ ++ acx_ioctl_set_freq, /* SIOCSIWFREQ */ ++ acx_ioctl_get_freq, /* SIOCGIWFREQ */ ++ acx_ioctl_set_mode, /* SIOCSIWMODE */ ++ acx_ioctl_get_mode, /* SIOCGIWMODE */ ++ acx_ioctl_set_sens, /* SIOCSIWSENS */ ++ acx_ioctl_get_sens, /* SIOCGIWSENS */ ++ NULL, /* SIOCSIWRANGE */ ++ acx_ioctl_get_range, /* SIOCGIWRANGE */ ++ NULL, /* SIOCSIWPRIV */ ++ NULL, /* SIOCGIWPRIV */ ++ NULL, /* SIOCSIWSTATS */ ++ NULL, /* SIOCGIWSTATS */ ++#if IW_HANDLER_VERSION > 4 ++ iw_handler_set_spy, /* SIOCSIWSPY */ ++ iw_handler_get_spy, /* SIOCGIWSPY */ ++ iw_handler_set_thrspy, /* SIOCSIWTHRSPY */ ++ iw_handler_get_thrspy, /* SIOCGIWTHRSPY */ ++#else /* IW_HANDLER_VERSION > 4 */ ++#ifdef WIRELESS_SPY ++ NULL /* acx_ioctl_set_spy FIXME */, /* SIOCSIWSPY */ ++ NULL /* acx_ioctl_get_spy */, /* SIOCGIWSPY */ ++#else /* WSPY */ ++ NULL, /* SIOCSIWSPY */ ++ NULL, /* SIOCGIWSPY */ ++#endif /* WSPY */ ++ NULL, /* [nothing] */ ++ NULL, /* [nothing] */ ++#endif /* IW_HANDLER_VERSION > 4 */ ++ acx_ioctl_set_ap, /* SIOCSIWAP */ ++ acx_ioctl_get_ap, /* SIOCGIWAP */ ++ NULL, /* [nothing] */ ++ acx_ioctl_get_aplist, /* SIOCGIWAPLIST */ ++ acx_ioctl_set_scan, /* SIOCSIWSCAN */ ++ acx_ioctl_get_scan, /* SIOCGIWSCAN */ ++ acx_ioctl_set_essid, /* SIOCSIWESSID */ ++ acx_ioctl_get_essid, /* SIOCGIWESSID */ ++ acx_ioctl_set_nick, /* SIOCSIWNICKN */ ++ acx_ioctl_get_nick, /* SIOCGIWNICKN */ ++ NULL, /* [nothing] */ ++ NULL, /* [nothing] */ ++ acx_ioctl_set_rate, /* SIOCSIWRATE */ ++ acx_ioctl_get_rate, /* SIOCGIWRATE */ ++ acx_ioctl_set_rts, /* SIOCSIWRTS */ ++ acx_ioctl_get_rts, /* SIOCGIWRTS */ ++#if ACX_FRAGMENTATION ++ acx_ioctl_set_frag, /* SIOCSIWFRAG */ ++ acx_ioctl_get_frag, /* SIOCGIWFRAG */ ++#else ++ NULL, /* SIOCSIWFRAG */ ++ NULL, /* SIOCGIWFRAG */ ++#endif ++ acx_ioctl_set_txpow, /* SIOCSIWTXPOW */ ++ acx_ioctl_get_txpow, /* SIOCGIWTXPOW */ ++ acx_ioctl_set_retry, /* SIOCSIWRETRY */ ++ acx_ioctl_get_retry, /* SIOCGIWRETRY */ ++ acx_ioctl_set_encode, /* SIOCSIWENCODE */ ++ acx_ioctl_get_encode, /* SIOCGIWENCODE */ ++ acx_ioctl_set_power, /* SIOCSIWPOWER */ ++ acx_ioctl_get_power, /* SIOCGIWPOWER */ ++}; ++ ++ ++/*********************************************************************** ++*/ ++ ++/* if you plan to reorder something, make sure to reorder all other places ++ * accordingly! */ ++/* SET/GET convention: SETs must have even position, GETs odd */ ++#define ACX100_IOCTL SIOCIWFIRSTPRIV ++enum { ++ ACX100_IOCTL_DEBUG = ACX100_IOCTL, ++ ACX100_IOCTL_GET__________UNUSED1, ++ ACX100_IOCTL_SET_PLED, ++ ACX100_IOCTL_GET_PLED, ++ ACX100_IOCTL_SET_RATES, ++ ACX100_IOCTL_LIST_DOM, ++ ACX100_IOCTL_SET_DOM, ++ ACX100_IOCTL_GET_DOM, ++ ACX100_IOCTL_SET_SCAN_PARAMS, ++ ACX100_IOCTL_GET_SCAN_PARAMS, ++ ACX100_IOCTL_SET_PREAMB, ++ ACX100_IOCTL_GET_PREAMB, ++ ACX100_IOCTL_SET_ANT, ++ ACX100_IOCTL_GET_ANT, ++ ACX100_IOCTL_RX_ANT, ++ ACX100_IOCTL_TX_ANT, ++ ACX100_IOCTL_SET_PHY_AMP_BIAS, ++ ACX100_IOCTL_GET_PHY_CHAN_BUSY, ++ ACX100_IOCTL_SET_ED, ++ ACX100_IOCTL_GET__________UNUSED3, ++ ACX100_IOCTL_SET_CCA, ++ ACX100_IOCTL_GET__________UNUSED4, ++ ACX100_IOCTL_MONITOR, ++ ACX100_IOCTL_TEST, ++ ACX100_IOCTL_DBG_SET_MASKS, ++ ACX111_IOCTL_INFO, ++ ACX100_IOCTL_DBG_SET_IO, ++ ACX100_IOCTL_DBG_GET_IO ++}; ++ ++ ++static const iw_handler acx_ioctl_private_handler[] = ++{ ++#if ACX_DEBUG ++[ACX100_IOCTL_DEBUG - ACX100_IOCTL] = acx_ioctl_set_debug, ++#endif ++[ACX100_IOCTL_SET_PLED - ACX100_IOCTL] = acx100_ioctl_set_led_power, ++[ACX100_IOCTL_GET_PLED - ACX100_IOCTL] = acx100_ioctl_get_led_power, ++[ACX100_IOCTL_SET_RATES - ACX100_IOCTL] = acx_ioctl_set_rates, ++[ACX100_IOCTL_LIST_DOM - ACX100_IOCTL] = acx_ioctl_list_reg_domain, ++[ACX100_IOCTL_SET_DOM - ACX100_IOCTL] = acx_ioctl_set_reg_domain, ++[ACX100_IOCTL_GET_DOM - ACX100_IOCTL] = acx_ioctl_get_reg_domain, ++[ACX100_IOCTL_SET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_set_scan_params, ++[ACX100_IOCTL_GET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_get_scan_params, ++[ACX100_IOCTL_SET_PREAMB - ACX100_IOCTL] = acx_ioctl_set_short_preamble, ++[ACX100_IOCTL_GET_PREAMB - ACX100_IOCTL] = acx_ioctl_get_short_preamble, ++[ACX100_IOCTL_SET_ANT - ACX100_IOCTL] = acx_ioctl_set_antenna, ++[ACX100_IOCTL_GET_ANT - ACX100_IOCTL] = acx_ioctl_get_antenna, ++[ACX100_IOCTL_RX_ANT - ACX100_IOCTL] = acx_ioctl_set_rx_antenna, ++[ACX100_IOCTL_TX_ANT - ACX100_IOCTL] = acx_ioctl_set_tx_antenna, ++[ACX100_IOCTL_SET_PHY_AMP_BIAS - ACX100_IOCTL] = acx100_ioctl_set_phy_amp_bias, ++[ACX100_IOCTL_GET_PHY_CHAN_BUSY - ACX100_IOCTL] = acx_ioctl_get_phy_chan_busy_percentage, ++[ACX100_IOCTL_SET_ED - ACX100_IOCTL] = acx_ioctl_set_ed_threshold, ++[ACX100_IOCTL_SET_CCA - ACX100_IOCTL] = acx_ioctl_set_cca, ++[ACX100_IOCTL_MONITOR - ACX100_IOCTL] = acx_ioctl_wlansniff, ++[ACX100_IOCTL_TEST - ACX100_IOCTL] = acx_ioctl_unknown11, ++[ACX100_IOCTL_DBG_SET_MASKS - ACX100_IOCTL] = acx_ioctl_dbg_set_masks, ++[ACX111_IOCTL_INFO - ACX100_IOCTL] = acx111_ioctl_info, ++}; ++ ++ ++static const struct iw_priv_args acx_ioctl_private_args[] = { ++#if ACX_DEBUG ++{ cmd : ACX100_IOCTL_DEBUG, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetDebug" }, ++#endif ++{ cmd : ACX100_IOCTL_SET_PLED, ++ set_args : IW_PRIV_TYPE_BYTE | 2, ++ get_args : 0, ++ name : "SetLEDPower" }, ++{ cmd : ACX100_IOCTL_GET_PLED, ++ set_args : 0, ++ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 2, ++ name : "GetLEDPower" }, ++{ cmd : ACX100_IOCTL_SET_RATES, ++ set_args : IW_PRIV_TYPE_CHAR | 256, ++ get_args : 0, ++ name : "SetRates" }, ++{ cmd : ACX100_IOCTL_LIST_DOM, ++ set_args : 0, ++ get_args : 0, ++ name : "ListRegDomain" }, ++{ cmd : ACX100_IOCTL_SET_DOM, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetRegDomain" }, ++{ cmd : ACX100_IOCTL_GET_DOM, ++ set_args : 0, ++ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ name : "GetRegDomain" }, ++{ cmd : ACX100_IOCTL_SET_SCAN_PARAMS, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4, ++ get_args : 0, ++ name : "SetScanParams" }, ++{ cmd : ACX100_IOCTL_GET_SCAN_PARAMS, ++ set_args : 0, ++ get_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4, ++ name : "GetScanParams" }, ++{ cmd : ACX100_IOCTL_SET_PREAMB, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetSPreamble" }, ++{ cmd : ACX100_IOCTL_GET_PREAMB, ++ set_args : 0, ++ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ name : "GetSPreamble" }, ++{ cmd : ACX100_IOCTL_SET_ANT, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetAntenna" }, ++{ cmd : ACX100_IOCTL_GET_ANT, ++ set_args : 0, ++ get_args : 0, ++ name : "GetAntenna" }, ++{ cmd : ACX100_IOCTL_RX_ANT, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetRxAnt" }, ++{ cmd : ACX100_IOCTL_TX_ANT, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetTxAnt" }, ++{ cmd : ACX100_IOCTL_SET_PHY_AMP_BIAS, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetPhyAmpBias"}, ++{ cmd : ACX100_IOCTL_GET_PHY_CHAN_BUSY, ++ set_args : 0, ++ get_args : 0, ++ name : "GetPhyChanBusy" }, ++{ cmd : ACX100_IOCTL_SET_ED, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetED" }, ++{ cmd : ACX100_IOCTL_SET_CCA, ++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, ++ get_args : 0, ++ name : "SetCCA" }, ++{ cmd : ACX100_IOCTL_MONITOR, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, ++ get_args : 0, ++ name : "monitor" }, ++{ cmd : ACX100_IOCTL_TEST, ++ set_args : 0, ++ get_args : 0, ++ name : "Test" }, ++{ cmd : ACX100_IOCTL_DBG_SET_MASKS, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, ++ get_args : 0, ++ name : "DbgSetMasks" }, ++{ cmd : ACX111_IOCTL_INFO, ++ set_args : 0, ++ get_args : 0, ++ name : "GetAcx111Info" }, ++{ cmd : ACX100_IOCTL_DBG_SET_IO, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4, ++ get_args : 0, ++ name : "DbgSetIO" }, ++{ cmd : ACX100_IOCTL_DBG_GET_IO, ++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, ++ get_args : 0, ++ name : "DbgGetIO" }, ++}; ++ ++ ++const struct iw_handler_def acx_ioctl_handler_def = ++{ ++ .num_standard = VEC_SIZE(acx_ioctl_handler), ++ .num_private = VEC_SIZE(acx_ioctl_private_handler), ++ .num_private_args = VEC_SIZE(acx_ioctl_private_args), ++ .standard = (iw_handler *) acx_ioctl_handler, ++ .private = (iw_handler *) acx_ioctl_private_handler, ++ .private_args = (struct iw_priv_args *) acx_ioctl_private_args, ++#if IW_HANDLER_VERSION > 5 ++ .get_wireless_stats = acx_e_get_wireless_stats ++#endif /* IW > 5 */ ++}; +Index: linux-2.6.23/drivers/net/wireless/acx/Kconfig +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/Kconfig 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,113 @@ ++config ACX ++ tristate "TI acx100/acx111 802.11b/g wireless chipsets" ++ depends on NET_RADIO && EXPERIMENTAL ++ select FW_LOADER ++ ---help--- ++ A driver for 802.11b/g wireless cards based on ++ Texas Instruments acx100 and acx111 chipsets. ++ ++ This driver supports Host AP mode that allows ++ your computer to act as an IEEE 802.11 access point. ++ This driver is new and experimental. ++ ++ Texas Instruments did not take part in development of this driver ++ in any way, shape or form. ++ ++ The driver can be compiled as a module and will be named "acx". ++ ++config ACX_PCI ++ bool "TI acx100/acx111 802.11b/g PCI" ++ depends on ACX && PCI ++ ---help--- ++ Include PCI and CardBus support in acx. ++ ++ acx chipsets need their firmware loaded at startup. ++ You will need to provide a firmware image via hotplug. ++ ++ Firmware may be in a form of single image 40-100kb in size ++ (a 'combined' firmware) or two images - main image ++ (again 40-100kb) and radio image (~10kb or less). ++ ++ Firmware images are requested from hotplug using following names: ++ ++ tiacx100 - main firmware image for acx100 chipset ++ tiacx100rNN - radio acx100 firmware for radio type NN ++ tiacx100cNN - combined acx100 firmware for radio type NN ++ tiacx111 - main acx111 firmware ++ tiacx111rNN - radio acx111 firmware for radio type NN ++ tiacx111cNN - combined acx111 firmware for radio type NN ++ ++ Driver will attempt to load combined image first. ++ If no such image is found, it will try to load main image ++ and radio image instead. ++ ++ Firmware files are not covered by GPL and are not distributed ++ with this driver for legal reasons. ++ ++config ACX_USB ++ bool "TI acx100/acx111 802.11b/g USB" ++ depends on ACX && (USB=y || USB=ACX) ++ ---help--- ++ Include USB support in acx. ++ ++ There is only one currently known device in this category, ++ D-Link DWL-120+, but newer devices seem to be on the horizon. ++ ++ acx chipsets need their firmware loaded at startup. ++ You will need to provide a firmware image via hotplug. ++ ++ Firmware for USB device is requested from hotplug ++ by the 'tiacx100usb' name. ++ ++ Firmware files are not covered by GPL and are not distributed ++ with this driver for legal reasons. ++ ++config ACX_MEM ++ bool "TI acx100/acx111 802.11b/g memory mapped slave 16 interface" ++ depends on ACX ++ ---help--- ++ acx chipsets need their firmware loaded at startup. ++ You will need to provide a firmware image via hotplug. ++ ++ Firmware for USB device is requested from hotplug ++ by the 'tiacx100usb' name. ++ ++ Firmware files are not covered by GPL and are not distributed ++ with this driver for legal reasons. ++ ++config ACX_CS ++ bool "TI acx100/acx111 802.11b/g cardbus interface" ++ depends on ACX ++ ---help--- ++ acx chipsets need their firmware loaded at startup. ++ You will need to provide a firmware image via hotplug. ++ ++ This driver is based on memory mapped driver. ++ ++ Firmware files are not covered by GPL and are not distributed ++ with this driver for legal reasons. ++ ++config ACX_HX4700 ++ tristate "ACX support for the iPAQ hx4700 using ACX_MEM" ++ depends on HX4700_CORE && ACX_MEM ++ ---help--- ++ Include memory interface support in acx for the iPAQ hx4700. ++ ++config ACX_HTCUNIVERSAL ++ tristate "ACX support for the HTC Universal using ACX_MEM" ++ depends on HTCUNIVERSAL_CORE && HTC_ASIC3 && ACX_MEM ++ ---help--- ++ Include memory interface support in acx for the HTC Universal. ++ ++config ACX_HTCSABLE ++ tristate "ACX support for the HTC Sable (IPAQ hw6915) using ACX_MEM" ++ depends on MACH_HW6900 && HTC_ASIC3 && ACX_MEM ++ ---help--- ++ Include memory interface support in acx for the HTC Sable (IPAQ hw6915). ++ ++config ACX_RX3000 ++ tristate "ACX support for the iPAQ RX3000 using ACX_MEM" ++ depends on MACH_RX3715 && ACX_MEM && LEDS_ASIC3 ++ ---help--- ++ Include memory interface support in acx for the IPAQ RX3000. ++ +Index: linux-2.6.23/drivers/net/wireless/acx/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/Makefile 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,21 @@ ++#obj-m += acx.o ++ ++#acx-obj-y += pci.o ++#acx-obj-y += usb.o ++ ++#acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y) ++ ++# Use this if you have proper Kconfig integration: ++ ++obj-$(CONFIG_ACX) += acx.o ++obj-$(CONFIG_ACX_HX4700) += hx4700_acx.o ++obj-$(CONFIG_ACX_HTCUNIVERSAL) += htcuniversal_acx.o ++obj-$(CONFIG_ACX_HTCSABLE) += htcsable_acx.o ++obj-$(CONFIG_ACX_RX3000) += rx3000_acx.o ++# ++acx-obj-$(CONFIG_ACX_PCI) += pci.o ++acx-obj-$(CONFIG_ACX_USB) += usb.o ++acx-obj-$(CONFIG_ACX_MEM) += mem.o ++acx-obj-$(CONFIG_ACX_CS) += cs.o ++# ++acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y) +Index: linux-2.6.23/drivers/net/wireless/acx/mem.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/mem.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,5363 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++** ++** Slave memory interface support: ++** ++** Todd Blumer - SDG Systems ++** Bill Reese - HP ++** Eric McCorkle - Shadowsun ++*/ ++#define ACX_MEM 1 ++ ++/* ++ * non-zero makes it dump the ACX memory to the console then ++ * panic when you cat /proc/driver/acx_wlan0_diag ++ */ ++#define DUMP_MEM_DEFINED 1 ++ ++#define DUMP_MEM_DURING_DIAG 0 ++#define DUMP_IF_SLOW 0 ++ ++#define PATCH_AROUND_BAD_SPOTS 1 ++#define HX4700_FIRMWARE_CHECKSUM 0x0036862e ++#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75 ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++ ++/* Linux 2.6.18+ uses */ ++#ifndef UTS_RELEASE ++#include ++#endif ++ ++#include /* required for Lx 2.6.8 ?? */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx.h" ++#include "acx_hw.h" ++ ++/*********************************************************************** ++*/ ++ ++#define CARD_EEPROM_ID_SIZE 6 ++ ++#include ++ ++#define REG_ACX_VENDOR_ID 0x900 ++/* ++ * This is the vendor id on the HX4700, anyway ++ */ ++#define ACX_VENDOR_ID 0x8400104c ++ ++typedef enum { ++ ACX_SOFT_RESET = 0, ++ ++ ACX_SLV_REG_ADDR, ++ ACX_SLV_REG_DATA, ++ ACX_SLV_REG_ADATA, ++ ++ ACX_SLV_MEM_CP, ++ ACX_SLV_MEM_ADDR, ++ ACX_SLV_MEM_DATA, ++ ACX_SLV_MEM_CTL, ++} acxreg_t; ++ ++/*********************************************************************** ++*/ ++static void acxmem_i_tx_timeout(struct net_device *ndev); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id); ++#else ++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs); ++#endif ++static void acxmem_i_set_multicast_list(struct net_device *ndev); ++ ++static int acxmem_e_open(struct net_device *ndev); ++static int acxmem_e_close(struct net_device *ndev); ++static void acxmem_s_up(struct net_device *ndev); ++static void acxmem_s_down(struct net_device *ndev); ++ ++static void dump_acxmem (acx_device_t *adev, u32 start, int length); ++static int acxmem_complete_hw_reset (acx_device_t *adev); ++static void acxmem_s_delete_dma_regions(acx_device_t *adev); ++ ++static struct platform_device *resume_pdev; ++ ++static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++acxmem_e_suspend(struct platform_device *pdev, pm_message_t state); ++#else ++acxmem_e_suspend(struct device *pdev, u32 state); ++#endif ++static void ++fw_resumer(struct work_struct *notused); ++//fw_resumer( void *data ); ++ ++static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) ++{ ++ struct net_device *ndev = ptr; ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ /* ++ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes. ++ */ ++ ++ if (NETDEV_CHANGEADDR == event) { ++ /* ++ * the upper layers put the new MAC address in ndev->dev_addr; we just copy ++ * it over and update the ACX with it. ++ */ ++ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr); ++ adev->set_mask |= GETSET_STATION_ID; ++ acx_s_update_card_settings (adev); ++ } ++ ++ return 0; ++} ++ ++static struct notifier_block acx_netdev_notifier = { ++ .notifier_call = acx_netdev_event, ++}; ++ ++/*********************************************************************** ++** Register access ++*/ ++ ++/* Pick one */ ++/* #define INLINE_IO static */ ++#define INLINE_IO static inline ++ ++INLINE_IO u32 ++read_id_register (acx_device_t *adev) ++{ ++ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]); ++ return readl (&adev->iobase[ACX_SLV_REG_DATA]); ++} ++ ++INLINE_IO u32 ++read_reg32(acx_device_t *adev, unsigned int offset) ++{ ++ u32 val; ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ return readl(((u8*)adev->iobase) + addr); ++ } ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ val = readl( &adev->iobase[ACX_SLV_REG_DATA] ); ++ ++ return val; ++} ++ ++INLINE_IO u16 ++read_reg16(acx_device_t *adev, unsigned int offset) ++{ ++ u16 lo; ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ return readw(((u8 *) adev->iobase) + addr); ++ } ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] ); ++ ++ return lo; ++} ++ ++INLINE_IO u8 ++read_reg8(acx_device_t *adev, unsigned int offset) ++{ ++ u8 lo; ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) ++ return readb(((u8 *)adev->iobase) + addr); ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] ); ++ ++ return (u8)lo; ++} ++ ++INLINE_IO void ++write_reg32(acx_device_t *adev, unsigned int offset, u32 val) ++{ ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ writel(val, ((u8*)adev->iobase) + addr); ++ return; ++ } ++ ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ writel( val, &adev->iobase[ACX_SLV_REG_DATA] ); ++} ++ ++INLINE_IO void ++write_reg16(acx_device_t *adev, unsigned int offset, u16 val) ++{ ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ writew(val, ((u8 *)adev->iobase) + addr); ++ return; ++ } ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] ); ++} ++ ++INLINE_IO void ++write_reg8(acx_device_t *adev, unsigned int offset, u8 val) ++{ ++ u32 addr; ++ ++ if (offset > IO_ACX_ECPU_CTRL) ++ addr = offset; ++ else ++ addr = adev->io[offset]; ++ ++ if (addr < 0x20) { ++ writeb(val, ((u8 *) adev->iobase) + addr); ++ return; ++ } ++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] ); ++ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] ); ++} ++ ++/* Handle PCI posting properly: ++ * Make sure that writes reach the adapter in case they require to be executed ++ * *before* the next write, by reading a random (and safely accessible) register. ++ * This call has to be made if there is no read following (which would flush the data ++ * to the adapter), yet the written data has to reach the adapter immediately. */ ++INLINE_IO void ++write_flush(acx_device_t *adev) ++{ ++ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */ ++ /* faster version (accesses the first register, IO_ACX_SOFT_RESET, ++ * which should also be safe): */ ++ (void) readl(adev->iobase); ++} ++ ++INLINE_IO void ++set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) { ++ u32 tmp; ++ ++ tmp = read_reg32 (adev, offset); ++ tmp = tmp | bits; ++ write_reg32 (adev, offset, tmp); ++ write_flush (adev); ++} ++ ++INLINE_IO void ++clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) { ++ u32 tmp; ++ ++ tmp = read_reg32 (adev, offset); ++ tmp = tmp & ~bits; ++ write_reg32 (adev, offset, tmp); ++ write_flush (adev); ++} ++ ++/* ++ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX ++ * addresses are 32 bit aligned. Count is in bytes. ++ */ ++INLINE_IO void ++write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val) ++{ ++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0); ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address); ++ udelay (10); ++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val); ++} ++ ++INLINE_IO u32 ++read_slavemem32 (acx_device_t *adev, u32 slave_address) ++{ ++ u32 val; ++ ++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0); ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address); ++ udelay (10); ++ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ ++ return val; ++} ++ ++INLINE_IO void ++write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val) ++{ ++ u32 data; ++ u32 base; ++ int offset; ++ ++ /* ++ * Get the word containing the target address and the byte offset in that word. ++ */ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ data &= ~(0xff << offset); ++ data |= val << offset; ++ write_slavemem32 (adev, base, data); ++} ++ ++INLINE_IO u8 ++read_slavemem8 (acx_device_t *adev, u32 slave_address) ++{ ++ u8 val; ++ u32 base; ++ u32 data; ++ int offset; ++ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ ++ val = (data >> offset) & 0xff; ++ ++ return val; ++} ++ ++/* ++ * doesn't split across word boundaries ++ */ ++INLINE_IO void ++write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val) ++{ ++ u32 data; ++ u32 base; ++ int offset; ++ ++ /* ++ * Get the word containing the target address and the byte offset in that word. ++ */ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ data &= ~(0xffff << offset); ++ data |= val << offset; ++ write_slavemem32 (adev, base, data); ++} ++ ++/* ++ * doesn't split across word boundaries ++ */ ++INLINE_IO u16 ++read_slavemem16 (acx_device_t *adev, u32 slave_address) ++{ ++ u16 val; ++ u32 base; ++ u32 data; ++ int offset; ++ ++ base = slave_address & ~3; ++ offset = (slave_address & 3) * 8; ++ ++ data = read_slavemem32 (adev, base); ++ ++ val = (data >> offset) & 0xffff; ++ ++ return val; ++} ++ ++/* ++ * Copy from slave memory ++ * ++ * TODO - rewrite using address autoincrement, handle partial words ++ */ ++void ++copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) { ++ u32 tmp = 0; ++ u8 *ptmp = (u8 *) &tmp; ++ ++ /* ++ * Right now I'm making the assumption that the destination is aligned, but ++ * I'd better check. ++ */ ++ if ((u32) destination & 3) { ++ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n"); ++ } ++ ++ while (count >= 4) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source); ++ udelay (10); ++ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ count -= 4; ++ source += 4; ++ destination += 4; ++ } ++ ++ /* ++ * If the word reads above didn't satisfy the count, read one more word ++ * and transfer a byte at a time until the request is satisfied. ++ */ ++ if (count) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source); ++ udelay (10); ++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ while (count--) { ++ *destination++ = *ptmp++; ++ } ++ } ++} ++ ++/* ++ * Copy to slave memory ++ * ++ * TODO - rewrite using autoincrement, handle partial words ++ */ ++void ++copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count) ++{ ++ u32 tmp = 0; ++ u8* ptmp = (u8 *) &tmp; ++ static u8 src[512]; /* make static to avoid huge stack objects */ ++ ++ /* ++ * For now, make sure the source is word-aligned by copying it to a word-aligned ++ * buffer. Someday rewrite to avoid the extra copy. ++ */ ++ if (count > sizeof (src)) { ++ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n"); ++ count = sizeof (src); ++ } ++ memcpy (src, source, count); ++ source = src; ++ ++ while (count >= 4) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination); ++ udelay (10); ++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source)); ++ count -= 4; ++ source += 4; ++ destination += 4; ++ } ++ ++ /* ++ * If there are leftovers read the next word from the acx and merge in ++ * what they want to write. ++ */ ++ if (count) { ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination); ++ udelay (10); ++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA); ++ while (count--) { ++ *ptmp++ = *source++; ++ } ++ /* ++ * reset address in case we're currently in auto-increment mode ++ */ ++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination); ++ udelay (10); ++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp); ++ udelay (10); ++ } ++ ++} ++ ++/* ++ * Block copy to slave buffers using memory block chain mode. Copies to the ACX ++ * transmit buffer structure with minimal intervention on our part. ++ * Interrupts should be disabled when calling this. ++ */ ++void ++chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count) ++{ ++ u32 val; ++ u32 *data = (u32 *) source; ++ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS]; ++ ++ /* ++ * Warn if the pointers don't look right. Destination must fit in [23:5] with ++ * zero elsewhere and source should be 32 bit aligned. ++ * This should never happen since we're in control of both, but I want to know about ++ * it if it does. ++ */ ++ if ((destination & 0x00ffffe0) != destination) { ++ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination); ++ } ++ if (count > sizeof aligned_source) { ++ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" ); ++ count = sizeof aligned_source; ++ } ++ if ((u32) source & 3) { ++ memcpy (aligned_source, source, count); ++ data = (u32 *) aligned_source; ++ } ++ ++ /* ++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment ++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word ++ */ ++ val = 2 << 16 | 1 << 2; ++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]); ++ ++ /* ++ * SLV_MEM_CP[23:5] = start of 1st block ++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0 ++ */ ++ val = destination & 0x00ffffe0; ++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]); ++ ++ /* ++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5] ++ */ ++ val = (destination & 0x00ffffe0) + (1<<2); ++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]); ++ ++ /* ++ * Write the data to the slave data register, rounding up to the end ++ * of the word containing the last byte (hence the > 0) ++ */ ++ while (count > 0) { ++ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]); ++ count -= 4; ++ } ++} ++ ++ ++/* ++ * Block copy from slave buffers using memory block chain mode. Copies from the ACX ++ * receive buffer structures with minimal intervention on our part. ++ * Interrupts should be disabled when calling this. ++ */ ++void ++chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) ++{ ++ u32 val; ++ u32 *data = (u32 *) destination; ++ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS]; ++ int saved_count = count; ++ ++ /* ++ * Warn if the pointers don't look right. Destination must fit in [23:5] with ++ * zero elsewhere and source should be 32 bit aligned. ++ * Turns out the network stack sends unaligned things, so fix them before ++ * copying to the ACX. ++ */ ++ if ((source & 0x00ffffe0) != source) { ++ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source); ++ dump_acxmem (adev, 0, 0x10000); ++ } ++ if ((u32) destination & 3) { ++ //printk ("acx chaincopy: data destination not word aligned!\n"); ++ data = (u32 *) aligned_destination; ++ if (count > sizeof aligned_destination) { ++ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" ); ++ count = sizeof aligned_destination; ++ } ++ } ++ ++ /* ++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment ++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word ++ */ ++ val = (2 << 16) | (1 << 2); ++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]); ++ ++ /* ++ * SLV_MEM_CP[23:5] = start of 1st block ++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0 ++ */ ++ val = source & 0x00ffffe0; ++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]); ++ ++ /* ++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5] ++ */ ++ val = (source & 0x00ffffe0) + (1<<2); ++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]); ++ ++ /* ++ * Read the data from the slave data register, rounding up to the end ++ * of the word containing the last byte (hence the > 0) ++ */ ++ while (count > 0) { ++ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]); ++ count -= 4; ++ } ++ ++ /* ++ * If the destination wasn't aligned, we would have saved it in ++ * the aligned buffer, so copy it where it should go. ++ */ ++ if ((u32) destination & 3) { ++ memcpy (destination, aligned_destination, saved_count); ++ } ++} ++ ++char ++printable (char c) ++{ ++ return ((c >= 20) && (c < 127)) ? c : '.'; ++} ++ ++#if DUMP_MEM_DEFINED > 0 ++static void ++dump_acxmem (acx_device_t *adev, u32 start, int length) ++{ ++ int i; ++ u8 buf[16]; ++ ++ while (length > 0) { ++ printk ("%04x ", start); ++ copy_from_slavemem (adev, buf, start, 16); ++ for (i = 0; (i < 16) && (i < length); i++) { ++ printk ("%02x ", buf[i]); ++ } ++ for (i = 0; (i < 16) && (i < length); i++) { ++ printk ("%c", printable (buf[i])); ++ } ++ printk ("\n"); ++ start += 16; ++ length -= 16; ++ } ++} ++#endif ++ ++static void ++enable_acx_irq(acx_device_t *adev); ++static void ++disable_acx_irq(acx_device_t *adev); ++ ++/* ++ * Return an acx pointer to the next transmit data block. ++ */ ++u32 ++allocate_acx_txbuf_space (acx_device_t *adev, int count) { ++ u32 block, next, last_block; ++ int blocks_needed; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&adev->txbuf_lock, flags); ++ /* ++ * Take 4 off the memory block size to account for the reserved word at the start of ++ * the block. ++ */ ++ blocks_needed = count / (adev->memblocksize - 4); ++ if (count % (adev->memblocksize - 4)) ++ blocks_needed++; ++ ++ if (blocks_needed <= adev->acx_txbuf_blocks_free) { ++ /* ++ * Take blocks at the head of the free list. ++ */ ++ last_block = block = adev->acx_txbuf_free; ++ ++ /* ++ * Follow block pointers through the requested number of blocks both to ++ * find the new head of the free list and to set the flags for the blocks ++ * appropriately. ++ */ ++ while (blocks_needed--) { ++ /* ++ * Keep track of the last block of the allocation ++ */ ++ last_block = adev->acx_txbuf_free; ++ ++ /* ++ * Make sure the end control flag is not set. ++ */ ++ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff; ++ write_slavemem32 (adev, adev->acx_txbuf_free, next); ++ ++ /* ++ * Update the new head of the free list ++ */ ++ adev->acx_txbuf_free = next << 5; ++ adev->acx_txbuf_blocks_free--; ++ ++ } ++ ++ /* ++ * Flag the last block both by clearing out the next pointer ++ * and marking the control field. ++ */ ++ write_slavemem32 (adev, last_block, 0x02000000); ++ ++ /* ++ * If we're out of buffers make sure the free list pointer is NULL ++ */ ++ if (!adev->acx_txbuf_blocks_free) { ++ adev->acx_txbuf_free = 0; ++ } ++ } ++ else { ++ block = 0; ++ } ++ spin_unlock_irqrestore (&adev->txbuf_lock, flags); ++ return block; ++} ++ ++/* ++ * Return buffer space back to the pool by following the next pointers until we find ++ * the block marked as the end. Point the last block to the head of the free list, ++ * then update the head of the free list to point to the newly freed memory. ++ * This routine gets called in interrupt context, so it shouldn't block to protect ++ * the integrity of the linked list. The ISR already holds the lock. ++ */ ++void ++reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) { ++ u32 cur, last, next; ++ unsigned long flags; ++ ++ spin_lock_irqsave (&adev->txbuf_lock, flags); ++ if ((blockptr >= adev->acx_txbuf_start) && ++ (blockptr <= adev->acx_txbuf_start + ++ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) { ++ cur = blockptr; ++ do { ++ last = cur; ++ next = read_slavemem32 (adev, cur); ++ ++ /* ++ * Advance to the next block in this allocation ++ */ ++ cur = (next & 0x7ffff) << 5; ++ ++ /* ++ * This block now counts as free. ++ */ ++ adev->acx_txbuf_blocks_free++; ++ } while (!(next & 0x02000000)); ++ ++ /* ++ * last now points to the last block of that allocation. Update the pointer ++ * in that block to point to the free list and reset the free list to the ++ * first block of the free call. If there were no free blocks, make sure ++ * the new end of the list marks itself as truly the end. ++ */ ++ if (adev->acx_txbuf_free) { ++ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5); ++ } ++ else { ++ write_slavemem32 (adev, last, 0x02000000); ++ } ++ adev->acx_txbuf_free = blockptr; ++ } ++ spin_unlock_irqrestore(&adev->txbuf_lock, flags); ++} ++ ++/* ++ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit ++ * buffer is a circular queue with one 32 bit word reserved at the beginning of each ++ * block. The upper 13 bits are a control field, of which only 0x02000000 has any ++ * meaning. The lower 19 bits are the address of the next block divided by 32. ++ */ ++void ++init_acx_txbuf (acx_device_t *adev) { ++ ++ /* ++ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us. ++ * All we need to do is reset the rest of the bookeeping. ++ */ ++ ++ adev->acx_txbuf_free = adev->acx_txbuf_start; ++ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks; ++ ++ /* ++ * Initialization leaves the last transmit pool block without a pointer back to ++ * the head of the list, but marked as the end of the list. That's how we want ++ * to see it, too, so leave it alone. This is only ever called after a firmware ++ * reset, so the ACX memory is in the state we want. ++ */ ++ ++} ++ ++INLINE_IO int ++adev_present(acx_device_t *adev) ++{ ++ /* fast version (accesses the first register, IO_ACX_SOFT_RESET, ++ * which should be safe): */ ++ return readl(adev->iobase) != 0xffffffff; ++} ++ ++/*********************************************************************** ++*/ ++static inline txdesc_t* ++get_txdesc(acx_device_t *adev, int index) ++{ ++ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size); ++} ++ ++static inline txdesc_t* ++advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc) ++{ ++ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size); ++} ++ ++static txhostdesc_t* ++get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ return &adev->txhostdesc_start[index*2]; ++} ++ ++static inline client_t* ++get_txc(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ return adev->txc[index]; ++} ++ ++static inline u16 ++get_txr(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ index /= adev->txdesc_size; ++ return adev->txr[index]; ++} ++ ++static inline void ++put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return; ++ } ++ adev->txc[index] = c; ++ adev->txr[index] = r111; ++} ++ ++ ++/*********************************************************************** ++** EEPROM and PHY read/write helpers ++*/ ++/*********************************************************************** ++** acxmem_read_eeprom_byte ++** ++** Function called to read an octet in the EEPROM. ++** ++** This function is used by acxmem_e_probe to check if the ++** connected card is a legal one or not. ++** ++** Arguments: ++** adev ptr to acx_device structure ++** addr address to read in the EEPROM ++** charbuf ptr to a char. This is where the read octet ++** will be stored ++*/ ++int ++acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf) ++{ ++ int result; ++ int count; ++ ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for EEPROM read\n", ++ adev->ndev->name); ++ result = NOT_OK; ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA); ++ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf); ++ result = OK; ++ ++fail: ++ return result; ++} ++ ++ ++/*********************************************************************** ++** We don't lock hw accesses here since we never r/w eeprom in IRQ ++** Note: this function sleeps only because of GFP_KERNEL alloc ++*/ ++#ifdef UNUSED ++int ++acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf) ++{ ++ u8 *data_verify = NULL; ++ unsigned long flags; ++ int count, i; ++ int result = NOT_OK; ++ u16 gpio_orig; ++ ++ printk("acx: WARNING! I would write to EEPROM now. " ++ "Since I really DON'T want to unless you know " ++ "what you're doing (THIS CODE WILL PROBABLY " ++ "NOT WORK YET!), I will abort that now. And " ++ "definitely make sure to make a " ++ "/proc/driver/acx_wlan0_eeprom backup copy first!!! " ++ "(the EEPROM content includes the PCI config header!! " ++ "If you kill important stuff, then you WILL " ++ "get in trouble and people DID get in trouble already)\n"); ++ return OK; ++ ++ FN_ENTER; ++ ++ data_verify = kmalloc(len, GFP_KERNEL); ++ if (!data_verify) { ++ goto end; ++ } ++ ++ /* first we need to enable the OE (EEPROM Output Enable) GPIO line ++ * to be able to write to the EEPROM. ++ * NOTE: an EEPROM writing success has been reported, ++ * but you probably have to modify GPIO_OUT, too, ++ * and you probably need to activate a different GPIO ++ * line instead! */ ++ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE); ++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1); ++ write_flush(adev); ++ ++ /* ok, now start writing the data out */ ++ for (i = 0; i < len; i++) { ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i); ++ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i)); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 1); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ if (unlikely(!--count)) { ++ printk("WARNING, DANGER!!! " ++ "Timeout waiting for EEPROM write\n"); ++ goto end; ++ } ++ cpu_relax(); ++ } ++ } ++ ++ /* disable EEPROM writing */ ++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig); ++ write_flush(adev); ++ ++ /* now start a verification run */ ++ for (i = 0; i < len; i++) { ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ if (unlikely(!--count)) { ++ printk("timeout waiting for EEPROM read\n"); ++ goto end; ++ } ++ cpu_relax(); ++ } ++ ++ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA); ++ } ++ ++ if (0 == memcmp(charbuf, data_verify, len)) ++ result = OK; /* read data matches, success */ ++ ++end: ++ kfree(data_verify); ++ FN_EXIT1(result); ++ return result; ++} ++#endif /* UNUSED */ ++ ++ ++/*********************************************************************** ++** acxmem_s_read_phy_reg ++** ++** Messing with rx/tx disabling and enabling here ++** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic ++*/ ++int ++acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf) ++{ ++ int result = NOT_OK; ++ int count; ++ ++ FN_ENTER; ++ ++ write_reg32(adev, IO_ACX_PHY_ADDR, reg); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_PHY_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg32(adev, IO_ACX_PHY_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for phy read\n", ++ adev->ndev->name); ++ *charbuf = 0; ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ log(L_DEBUG, "count was %u\n", count); ++ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA); ++ ++ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg); ++ result = OK; ++ goto fail; /* silence compiler warning */ ++fail: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value) ++{ ++ int count; ++ FN_ENTER; ++ ++ /* mprusko said that 32bit accesses result in distorted sensitivity ++ * on his card. Unconfirmed, looks like it's not true (most likely since we ++ * now properly flush writes). */ ++ write_reg32(adev, IO_ACX_PHY_DATA, value); ++ write_reg32(adev, IO_ACX_PHY_ADDR, reg); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_PHY_CTL, 1); ++ write_flush(adev); ++ ++ count = 0xffff; ++ while (read_reg32(adev, IO_ACX_PHY_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for phy read\n", ++ adev->ndev->name); ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg); ++ fail: ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++#define NO_AUTO_INCREMENT 1 ++ ++/*********************************************************************** ++** acxmem_s_write_fw ++** ++** Write the firmware image into the card. ++** ++** Arguments: ++** adev wlan device structure ++** fw_image firmware image. ++** ++** Returns: ++** 1 firmware image corrupted ++** 0 success ++*/ ++static int ++acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset) ++{ ++ int len, size, checkMismatch = -1; ++ u32 sum, v32, tmp, id; ++ /* we skip the first four bytes which contain the control sum */ ++ const u8 *p = (u8*)fw_image + 4; ++ ++ /* start the image checksum by adding the image size value */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++#ifdef NOPE ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */ ++#else ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */ ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */ ++ write_flush(adev); ++#endif ++#endif ++ len = 0; ++ size = le32_to_cpu(fw_image->size) & (~3); ++ ++ while (likely(len < size)) { ++ v32 = be32_to_cpu(*(u32*)p); ++ sum += p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ len += 4; ++ ++#ifdef NOPE ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4); ++ write_flush(adev); ++#endif ++ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32); ++ write_flush(adev); ++#endif ++ write_slavemem32 (adev, offset + len - 4, v32); ++ ++ id = read_id_register (adev); ++ ++ /* ++ * check the data written ++ */ ++ tmp = read_slavemem32 (adev, offset + len - 4); ++ if (checkMismatch && (tmp != v32)) { ++ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n", ++ offset + len - 4, v32, tmp, id); ++ checkMismatch = 0; ++ } ++ } ++ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n", ++ size, sum, le32_to_cpu(fw_image->chksum)); ++ ++ /* compare our checksum with the stored image checksum */ ++ return (sum != le32_to_cpu(fw_image->chksum)); ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_validate_fw ++** ++** Compare the firmware image given with ++** the firmware image written into the card. ++** ++** Arguments: ++** adev wlan device structure ++** fw_image firmware image. ++** ++** Returns: ++** NOT_OK firmware image corrupted or not correctly written ++** OK success ++*/ ++static int ++acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image, ++ u32 offset) ++{ ++ u32 sum, v32, w32; ++ int len, size; ++ int result = OK; ++ /* we skip the first four bytes which contain the control sum */ ++ const u8 *p = (u8*)fw_image + 4; ++ ++ /* start the image checksum by adding the image size value */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0); ++ ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */ ++#else ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */ ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */ ++#endif ++ ++ len = 0; ++ size = le32_to_cpu(fw_image->size) & (~3); ++ ++ while (likely(len < size)) { ++ v32 = be32_to_cpu(*(u32*)p); ++ p += 4; ++ len += 4; ++ ++#ifdef NOPE ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4); ++#endif ++ udelay(10); ++ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA); ++#endif ++ w32 = read_slavemem32 (adev, offset + len - 4); ++ ++ if (unlikely(w32 != v32)) { ++ printk("acx: FATAL: firmware upload: " ++ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n" ++ "I/O timing issues or defective memory, with DWL-xx0+? " ++ "ACX_IO_WIDTH=16 may help. Please report\n", ++ len, v32, w32); ++ result = NOT_OK; ++ break; ++ } ++ ++ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24); ++ } ++ ++ /* sum control verification */ ++ if (result != NOT_OK) { ++ if (sum != le32_to_cpu(fw_image->chksum)) { ++ printk("acx: FATAL: firmware upload: " ++ "checksums don't match!\n"); ++ result = NOT_OK; ++ } ++ } ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_upload_fw ++** ++** Called from acx_reset_dev ++*/ ++static int ++acxmem_s_upload_fw(acx_device_t *adev) ++{ ++ firmware_image_t *fw_image = NULL; ++ int res = NOT_OK; ++ int try; ++ u32 file_size; ++ char *filename = "WLANGEN.BIN"; ++#ifdef PATCH_AROUND_BAD_SPOTS ++ u32 offset; ++ int i; ++ /* ++ * arm-linux-objdump -d patch.bin, or ++ * od -Ax -t x4 patch.bin after finding the bounds ++ * of the .text section with arm-linux-objdump -s patch.bin ++ */ ++ u32 patch[] = { ++ 0xe584c030, 0xe59fc008, ++ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c, ++ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a, ++ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24, ++ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db, ++ 0x60ca6003, 0xbdf0750a, 0xffff0808 ++ }; ++#endif ++ ++ FN_ENTER; ++ /* No combined image; tell common we need the radio firmware, too */ ++ adev->need_radio_fw = 1; ++ ++ fw_image = acx_s_read_fw(adev->dev, filename, &file_size); ++ if (!fw_image) { ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++ } ++ ++ for (try = 1; try <= 5; try++) { ++ res = acxmem_s_write_fw(adev, fw_image, 0); ++ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res); ++ if (OK == res) { ++ res = acxmem_s_validate_fw(adev, fw_image, 0); ++ log(L_DEBUG|L_INIT, "acx_validate_fw " ++ "(main): %d\n", res); ++ } ++ ++ if (OK == res) { ++ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED); ++ break; ++ } ++ printk("acx: firmware upload attempt #%d FAILED, " ++ "retrying...\n", try); ++ acx_s_msleep(1000); /* better wait for a while... */ ++ } ++ ++#ifdef PATCH_AROUND_BAD_SPOTS ++ /* ++ * Only want to do this if the firmware is exactly what we expect for an ++ * iPaq 4700; otherwise, bad things would ensue. ++ */ ++ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) || ++ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) { ++ /* ++ * Put the patch after the main firmware image. 0x950c contains ++ * the ACX's idea of the end of the firmware. Use that location to ++ * load ours (which depends on that location being 0xab58) then ++ * update that location to point to after ours. ++ */ ++ ++ offset = read_slavemem32 (adev, 0x950c); ++ ++ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset); ++ ++ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) { ++ write_slavemem32 (adev, offset, patch[i]); ++ offset += sizeof(u32); ++ } ++ ++ /* ++ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58 ++ */ ++ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4); ++ ++ /* ++ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74 ++ * ++ * 4a00 ldr r2, [pc, #0] ++ * 4710 bx r2 ++ * .data 0xab74+1 ++ */ ++ write_slavemem32 (adev, 0x1f40, 0x47104a00); ++ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1); ++ ++ /* ++ * Bump the end of the firmware up to beyond our patch. ++ */ ++ write_slavemem32 (adev, 0x950c, offset); ++ ++ } ++#endif ++ ++ vfree(fw_image); ++ ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_upload_radio ++** ++** Uploads the appropriate radio module firmware into the card. ++*/ ++int ++acxmem_s_upload_radio(acx_device_t *adev) ++{ ++ acx_ie_memmap_t mm; ++ firmware_image_t *radio_image; ++ acx_cmd_radioinit_t radioinit; ++ int res = NOT_OK; ++ int try; ++ u32 offset; ++ u32 size; ++ char filename[sizeof("RADIONN.BIN")]; ++ ++ if (!adev->need_radio_fw) return OK; ++ ++ FN_ENTER; ++ ++ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP); ++ offset = le32_to_cpu(mm.CodeEnd); ++ ++ snprintf(filename, sizeof(filename), "RADIO%02x.BIN", ++ adev->radio_type); ++ radio_image = acx_s_read_fw(adev->dev, filename, &size); ++ if (!radio_image) { ++ printk("acx: can't load radio module '%s'\n", filename); ++ goto fail; ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0); ++ ++ for (try = 1; try <= 5; try++) { ++ res = acxmem_s_write_fw(adev, radio_image, offset); ++ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res); ++ if (OK == res) { ++ res = acxmem_s_validate_fw(adev, radio_image, offset); ++ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res); ++ } ++ ++ if (OK == res) ++ break; ++ printk("acx: radio firmware upload attempt #%d FAILED, " ++ "retrying...\n", try); ++ acx_s_msleep(1000); /* better wait for a while... */ ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0); ++ radioinit.offset = cpu_to_le32(offset); ++ ++ /* no endian conversion needed, remains in card CPU area: */ ++ radioinit.len = radio_image->size; ++ ++ vfree(radio_image); ++ ++ if (OK != res) ++ goto fail; ++ ++ /* will take a moment so let's have a big timeout */ ++ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT, ++ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000)); ++ ++ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP); ++ ++fail: ++ FN_EXIT1(res); ++ return res; ++} ++ ++/*********************************************************************** ++** acxmem_l_reset_mac ++** ++** MAC will be reset ++** Call context: reset_dev ++*/ ++static void ++acxmem_l_reset_mac(acx_device_t *adev) ++{ ++ int count; ++ FN_ENTER; ++ ++ /* halt eCPU */ ++ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1); ++ ++ /* now do soft reset of eCPU, set bit */ ++ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1); ++ log(L_DEBUG, "%s: enable soft reset...\n", __func__); ++ ++ /* Windows driver sleeps here for a while with this sequence */ ++ for (count = 0; count < 200; count++) { ++ udelay (50); ++ } ++ ++ /* now clear bit again: deassert eCPU reset */ ++ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__); ++ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1); ++ ++ /* now start a burst read from initial EEPROM */ ++ set_regbits (adev, IO_ACX_EE_START, 0x1); ++ ++ /* ++ * Windows driver sleeps here for a while with this sequence ++ */ ++ for (count = 0; count < 200; count++) { ++ udelay (50); ++ } ++ ++ /* Windows driver writes 0x10000 to register 0x808 here */ ++ ++ write_reg32 (adev, 0x808, 0x10000); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_verify_init ++*/ ++static int ++acxmem_s_verify_init(acx_device_t *adev) ++{ ++ int result = NOT_OK; ++ unsigned long timeout; ++ ++ FN_ENTER; ++ ++ timeout = jiffies + 2*HZ; ++ for (;;) { ++ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES); ++ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) { ++ result = OK; ++ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD); ++ break; ++ } ++ if (time_after(jiffies, timeout)) ++ break; ++ /* Init may take up to ~0.5 sec total */ ++ acx_s_msleep(50); ++ } ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** A few low-level helpers ++** ++** Note: these functions are not protected by lock ++** and thus are never allowed to be called from IRQ. ++** Also they must not race with fw upload which uses same hw regs ++*/ ++ ++/*********************************************************************** ++** acxmem_write_cmd_type_status ++*/ ++ ++static inline void ++acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status) ++{ ++ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16)); ++ write_flush(adev); ++} ++ ++ ++/*********************************************************************** ++** acxmem_read_cmd_type_status ++*/ ++static u32 ++acxmem_read_cmd_type_status(acx_device_t *adev) ++{ ++ u32 cmd_type, cmd_status; ++ ++ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area); ++ ++ cmd_status = (cmd_type >> 16); ++ cmd_type = (u16)cmd_type; ++ ++ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n", ++ cmd_type, cmd_status, ++ acx_cmd_status_str(cmd_status)); ++ ++ return cmd_status; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_reset_dev ++** ++** Arguments: ++** netdevice that contains the adev variable ++** Returns: ++** NOT_OK on fail ++** OK on success ++** Side effects: ++** device is hard reset ++** Call context: ++** acxmem_e_probe ++** Comment: ++** This resets the device using low level hardware calls ++** as well as uploads and verifies the firmware to the card ++*/ ++ ++static inline void ++init_mboxes(acx_device_t *adev) ++{ ++ u32 cmd_offs, info_offs; ++ ++ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS); ++ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS); ++ adev->cmd_area = (u8*) cmd_offs; ++ adev->info_area = (u8*) info_offs; ++ /* ++ log(L_DEBUG, "iobase2=%p\n" ++ */ ++ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n" ++ "info_mbox_offset=%X info_area=%p\n", ++ cmd_offs, adev->cmd_area, ++ info_offs, adev->info_area); ++} ++ ++ ++static inline void ++read_eeprom_area(acx_device_t *adev) ++{ ++#if ACX_DEBUG > 1 ++ int offs; ++ u8 tmp; ++ ++ for (offs = 0x8c; offs < 0xb9; offs++) ++ acxmem_read_eeprom_byte(adev, offs, &tmp); ++#endif ++} ++ ++static int ++acxmem_s_reset_dev(acx_device_t *adev) ++{ ++ const char* msg = ""; ++ unsigned long flags; ++ int result = NOT_OK; ++ u16 hardware_info; ++ u16 ecpu_ctrl; ++ int count; ++ u32 tmp; ++ ++ FN_ENTER; ++ /* ++ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0); ++ */ ++ /* reset the device to make sure the eCPU is stopped ++ * to upload the firmware correctly */ ++ ++ acx_lock(adev, flags); ++ ++ /* Windows driver does some funny things here */ ++ /* ++ * clear bit 0x200 in register 0x2A0 ++ */ ++ clear_regbits (adev, 0x2A0, 0x200); ++ ++ /* ++ * Set bit 0x200 in ACX_GPIO_OUT ++ */ ++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200); ++ ++ /* ++ * read register 0x900 until its value is 0x8400104C, sleeping ++ * in between reads if it's not immediate ++ */ ++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID); ++ count = 500; ++ while (count-- && (tmp != ACX_VENDOR_ID)) { ++ mdelay (10); ++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID); ++ } ++ ++ /* end what Windows driver does */ ++ ++ acxmem_l_reset_mac(adev); ++ ++ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1; ++ if (!ecpu_ctrl) { ++ msg = "eCPU is already running. "; ++ goto end_unlock; ++ } ++ ++#ifdef WE_DONT_NEED_THAT_DO_WE ++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) { ++ /* eCPU most likely means "embedded CPU" */ ++ msg = "eCPU did not start after boot from flash. "; ++ goto end_unlock; ++ } ++ ++ /* check sense on reset flags */ ++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) { ++ printk("%s: eCPU did not start after boot (SOR), " ++ "is this fatal?\n", adev->ndev->name); ++ } ++#endif ++ /* scan, if any, is stopped now, setting corresponding IRQ bit */ ++ adev->irq_status |= HOST_INT_SCAN_COMPLETE; ++ ++ acx_unlock(adev, flags); ++ ++ /* need to know radio type before fw load */ ++ /* Need to wait for arrival of this information in a loop, ++ * most probably since eCPU runs some init code from EEPROM ++ * (started burst read in reset_mac()) which also ++ * sets the radio type ID */ ++ ++ count = 0xffff; ++ do { ++ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION); ++ if (!--count) { ++ msg = "eCPU didn't indicate radio type"; ++ goto end_fail; ++ } ++ cpu_relax(); ++ } while (!(hardware_info & 0xff00)); /* radio type still zero? */ ++ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff); ++ /* printk("DEBUG: count %d\n", count); */ ++ adev->form_factor = hardware_info & 0xff; ++ adev->radio_type = hardware_info >> 8; ++ ++ /* load the firmware */ ++ if (OK != acxmem_s_upload_fw(adev)) ++ goto end_fail; ++ ++ /* acx_s_msleep(10); this one really shouldn't be required */ ++ ++ /* now start eCPU by clearing bit */ ++ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1); ++ log(L_DEBUG, "booted eCPU up and waiting for completion...\n"); ++ ++ /* Windows driver clears bit 0x200 in register 0x2A0 here */ ++ clear_regbits (adev, 0x2A0, 0x200); ++ ++ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */ ++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200); ++ /* wait for eCPU bootup */ ++ if (OK != acxmem_s_verify_init(adev)) { ++ msg = "timeout waiting for eCPU. "; ++ goto end_fail; ++ } ++ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n"); ++ init_mboxes(adev); ++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0); ++ ++ /* test that EEPROM is readable */ ++ read_eeprom_area(adev); ++ ++ result = OK; ++ goto end; ++ ++/* Finish error message. Indicate which function failed */ ++end_unlock: ++ acx_unlock(adev, flags); ++end_fail: ++ printk("acx: %sreset_dev() FAILED\n", msg); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_issue_cmd_timeo ++** ++** Sends command to fw, extract result ++** ++** NB: we do _not_ take lock inside, so be sure to not touch anything ++** which may interfere with IRQ handler operation ++** ++** TODO: busy wait is a bit silly, so: ++** 1) stop doing many iters - go to sleep after first ++** 2) go to waitqueue based approach: wait, not poll! ++*/ ++#undef FUNC ++#define FUNC "issue_cmd" ++ ++#if !ACX_DEBUG ++int ++acxmem_s_issue_cmd_timeo( ++ acx_device_t *adev, ++ unsigned int cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned cmd_timeout) ++{ ++#else ++int ++acxmem_s_issue_cmd_timeo_debug( ++ acx_device_t *adev, ++ unsigned cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned cmd_timeout, ++ const char* cmdstr) ++{ ++ unsigned long start = jiffies; ++#endif ++ const char *devname; ++ unsigned counter; ++ u16 irqtype; ++ int i, j; ++ u8 *p; ++ u16 cmd_status; ++ unsigned long timeout; ++ ++ FN_ENTER; ++ ++ devname = adev->ndev->name; ++ if (!devname || !devname[0] || devname[4]=='%') ++ devname = "acx"; ++ ++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n", ++ cmdstr, buflen, cmd_timeout, ++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1); ++ ++ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) { ++ printk("%s: "FUNC"(): firmware is not loaded yet, " ++ "cannot execute commands!\n", devname); ++ goto bad; ++ } ++ ++ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) { ++ printk("input buffer (len=%u):\n", buflen); ++ acx_dump_bytes(buffer, buflen); ++ } ++ ++ /* wait for firmware to become idle for our command submission */ ++ timeout = HZ/5; ++ counter = (timeout * 1000 / HZ) - 1; /* in ms */ ++ timeout += jiffies; ++ do { ++ cmd_status = acxmem_read_cmd_type_status(adev); ++ /* Test for IDLE state */ ++ if (!cmd_status) ++ break; ++ if (counter % 8 == 0) { ++ if (time_after(jiffies, timeout)) { ++ counter = 0; ++ break; ++ } ++ /* we waited 8 iterations, no luck. Sleep 8 ms */ ++ acx_s_msleep(8); ++ } ++ } while (likely(--counter)); ++ ++ if (!counter) { ++ /* the card doesn't get idle, we're in trouble */ ++ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n", ++ devname, cmd_status); ++#if DUMP_IF_SLOW > 0 ++ dump_acxmem (adev, 0, 0x10000); ++ panic ("not idle"); ++#endif ++ goto bad; ++ } else if (counter < 190) { /* if waited >10ms... */ ++ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. " ++ "Please report\n", 199 - counter); ++ } ++ ++ /* now write the parameters of the command if needed */ ++ if (buffer && buflen) { ++ /* if it's an INTERROGATE command, just pass the length ++ * of parameters to read, as data */ ++#if CMD_DISCOVERY ++ if (cmd == ACX1xx_CMD_INTERROGATE) ++ memset_io(adev->cmd_area + 4, 0xAA, buflen); ++#endif ++ /* ++ * slave memory version ++ */ ++ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer, ++ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen); ++ } ++ /* now write the actual command type */ ++ acxmem_write_cmd_type_status(adev, cmd, 0); ++ ++ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */ ++ adev->irq_status &= ~HOST_INT_CMD_COMPLETE; ++ ++ /* execute command */ ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD); ++ write_flush(adev); ++ ++ /* wait for firmware to process command */ ++ ++ /* Ensure nonzero and not too large timeout. ++ ** Also converts e.g. 100->99, 200->199 ++ ** which is nice but not essential */ ++ cmd_timeout = (cmd_timeout-1) | 1; ++ if (unlikely(cmd_timeout > 1199)) ++ cmd_timeout = 1199; ++ ++ /* we schedule away sometimes (timeout can be large) */ ++ counter = cmd_timeout; ++ timeout = jiffies + cmd_timeout * HZ / 1000; ++ do { ++ if (!adev->irqs_active) { /* IRQ disabled: poll */ ++ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES); ++ if (irqtype & HOST_INT_CMD_COMPLETE) { ++ write_reg16(adev, IO_ACX_IRQ_ACK, ++ HOST_INT_CMD_COMPLETE); ++ break; ++ } ++ } else { /* Wait when IRQ will set the bit */ ++ irqtype = adev->irq_status; ++ if (irqtype & HOST_INT_CMD_COMPLETE) ++ break; ++ } ++ ++ if (counter % 8 == 0) { ++ if (time_after(jiffies, timeout)) { ++ counter = 0; ++ break; ++ } ++ /* we waited 8 iterations, no luck. Sleep 8 ms */ ++ acx_s_msleep(8); ++ } ++ } while (likely(--counter)); ++ ++ /* save state for debugging */ ++ cmd_status = acxmem_read_cmd_type_status(adev); ++ ++ /* put the card in IDLE state */ ++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0); ++ ++ if (!counter) { /* timed out! */ ++ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. " ++ "irq bits:0x%04X irq_status:0x%04X timeout:%dms " ++ "cmd_status:%d (%s)\n", ++ devname, (adev->irqs_active) ? "waiting" : "polling", ++ irqtype, adev->irq_status, cmd_timeout, ++ cmd_status, acx_cmd_status_str(cmd_status)); ++ printk("%s: "FUNC"(): device irq status 0x%04x\n", ++ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES)); ++ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n", ++ devname, ++ read_reg16 (adev, IO_ACX_IRQ_MASK), ++ read_reg16 (adev, IO_ACX_FEMR)); ++ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) { ++ printk ("acxmem: firmware probably hosed - reloading\n"); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++ { ++ pm_message_t state; ++ acxmem_e_suspend (resume_pdev, state); ++ } ++#else ++ acxmem_e_suspend (adev->dev, 0); ++#endif ++ { ++ struct work_struct *notused; ++ fw_resumer (notused); ++ } ++ } ++ ++ goto bad; ++ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */ ++ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. " ++ "count:%d. Please report\n", ++ (adev->irqs_active) ? "waited" : "polled", ++ cmd_timeout - counter, counter); ++ } ++ ++ if (1 != cmd_status) { /* it is not a 'Success' */ ++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). " ++ "Took %dms of %d\n", ++ devname, cmd_status, acx_cmd_status_str(cmd_status), ++ cmd_timeout - counter, cmd_timeout); ++ /* zero out result buffer ++ * WARNING: this will trash stack in case of illegally large input ++ * length! */ ++ if (buflen > 388) { ++ /* ++ * 388 is maximum command length ++ */ ++ printk ("invalid length 0x%08x\n", buflen); ++ buflen = 388; ++ } ++ p = (u8 *) buffer; ++ for (i = 0; i < buflen; i+= 16) { ++ printk ("%04x:", i); ++ for (j = 0; (j < 16) && (i+j < buflen); j++) { ++ printk (" %02x", *p++); ++ } ++ printk ("\n"); ++ } ++ ++ if (buffer && buflen) ++ memset(buffer, 0, buflen); ++ goto bad; ++ } ++ ++ /* read in result parameters if needed */ ++ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) { ++ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen); ++ if (acx_debug & L_DEBUG) { ++ printk("output buffer (len=%u): ", buflen); ++ acx_dump_bytes(buffer, buflen); ++ } ++ } ++ ++/* ok: */ ++ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n", ++ cmdstr, jiffies - start); ++ FN_EXIT1(OK); ++ return OK; ++ ++bad: ++ /* Give enough info so that callers can avoid ++ ** printing their own diagnostic messages */ ++#if ACX_DEBUG ++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr); ++#else ++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd); ++#endif ++ dump_stack(); ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++#if defined(NONESSENTIAL_FEATURES) ++typedef struct device_id { ++ unsigned char id[6]; ++ char *descr; ++ char *type; ++} device_id_t; ++ ++static const device_id_t ++device_ids[] = ++{ ++ { ++ {'G', 'l', 'o', 'b', 'a', 'l'}, ++ NULL, ++ NULL, ++ }, ++ { ++ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, ++ "uninitialized", ++ "SpeedStream SS1021 or Gigafast WF721-AEX" ++ }, ++ { ++ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85}, ++ "non-standard", ++ "DrayTek Vigor 520" ++ }, ++ { ++ {'?', '?', '?', '?', '?', '?'}, ++ "non-standard", ++ "Level One WPC-0200" ++ }, ++ { ++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ "empty", ++ "DWL-650+ variant" ++ } ++}; ++ ++static void ++acx_show_card_eeprom_id(acx_device_t *adev) ++{ ++ unsigned char buffer[CARD_EEPROM_ID_SIZE]; ++ int i; ++ ++ memset(&buffer, 0, CARD_EEPROM_ID_SIZE); ++ /* use direct EEPROM access */ ++ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) { ++ if (OK != acxmem_read_eeprom_byte(adev, ++ ACX100_EEPROM_ID_OFFSET + i, ++ &buffer[i])) { ++ printk("acx: reading EEPROM FAILED\n"); ++ break; ++ } ++ } ++ ++ for (i = 0; i < VEC_SIZE(device_ids); i++) { ++ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) { ++ if (device_ids[i].descr) { ++ printk("acx: EEPROM card ID string check " ++ "found %s card ID: is this %s?\n", ++ device_ids[i].descr, device_ids[i].type); ++ } ++ break; ++ } ++ } ++ if (i == VEC_SIZE(device_ids)) { ++ printk("acx: EEPROM card ID string check found " ++ "unknown card: expected 'Global', got '%.*s\'. " ++ "Please report\n", CARD_EEPROM_ID_SIZE, buffer); ++ } ++} ++#endif /* NONESSENTIAL_FEATURES */ ++ ++/*********************************************************************** ++** acxmem_free_desc_queues ++** ++** Releases the queues that have been allocated, the ++** others have been initialised to NULL so this ++** function can be used if only part of the queues were allocated. ++*/ ++ ++void ++acxmem_free_desc_queues(acx_device_t *adev) ++{ ++#define ACX_FREE_QUEUE(size, ptr, phyaddr) \ ++ if (ptr) { \ ++ kfree(ptr); \ ++ ptr = NULL; \ ++ size = 0; \ ++ } ++ ++ FN_ENTER; ++ ++ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy); ++ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy); ++ ++ adev->txdesc_start = NULL; ++ ++ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy); ++ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy); ++ ++ adev->rxdesc_start = NULL; ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_delete_dma_regions ++*/ ++static void ++acxmem_s_delete_dma_regions(acx_device_t *adev) ++{ ++ unsigned long flags; ++ ++ FN_ENTER; ++ /* disable radio Tx/Rx. Shouldn't we use the firmware commands ++ * here instead? Or are we that much down the road that it's no ++ * longer possible here? */ ++ /* ++ * slave memory interface really doesn't like this. ++ */ ++ /* ++ write_reg16(adev, IO_ACX_ENABLE, 0); ++ */ ++ ++ acx_s_msleep(100); ++ ++ acx_lock(adev, flags); ++ acxmem_free_desc_queues(adev); ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_probe ++** ++** Probe routine called when a PCI device w/ matching ID is found. ++** Here's the sequence: ++** - Allocate the PCI resources. ++** - Read the PCMCIA attribute memory to make sure we have a WLAN card ++** - Reset the MAC ++** - Initialize the dev and wlan data ++** - Initialize the MAC ++** ++** pdev - ptr to pci device structure containing info about pci configuration ++** id - ptr to the device id entry that matched this device ++*/ ++static const u16 ++IO_ACX100[] = ++{ ++ 0x0000, /* IO_ACX_SOFT_RESET */ ++ ++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */ ++ 0x0018, /* IO_ACX_SLV_MEM_DATA */ ++ 0x001c, /* IO_ACX_SLV_MEM_CTL */ ++ 0x0020, /* IO_ACX_SLV_END_CTL */ ++ ++ 0x0034, /* IO_ACX_FEMR */ ++ ++ 0x007c, /* IO_ACX_INT_TRIG */ ++ 0x0098, /* IO_ACX_IRQ_MASK */ ++ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */ ++ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */ ++ 0x00ac, /* IO_ACX_IRQ_ACK */ ++ 0x00b0, /* IO_ACX_HINT_TRIG */ ++ ++ 0x0104, /* IO_ACX_ENABLE */ ++ ++ 0x0250, /* IO_ACX_EEPROM_CTL */ ++ 0x0254, /* IO_ACX_EEPROM_ADDR */ ++ 0x0258, /* IO_ACX_EEPROM_DATA */ ++ 0x025c, /* IO_ACX_EEPROM_CFG */ ++ ++ 0x0268, /* IO_ACX_PHY_ADDR */ ++ 0x026c, /* IO_ACX_PHY_DATA */ ++ 0x0270, /* IO_ACX_PHY_CTL */ ++ ++ 0x0290, /* IO_ACX_GPIO_OE */ ++ ++ 0x0298, /* IO_ACX_GPIO_OUT */ ++ ++ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */ ++ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */ ++ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */ ++ ++ 0x02d0, /* IO_ACX_EE_START */ ++ 0x02d4, /* IO_ACX_SOR_CFG */ ++ 0x02d8 /* IO_ACX_ECPU_CTRL */ ++}; ++ ++static const u16 ++IO_ACX111[] = ++{ ++ 0x0000, /* IO_ACX_SOFT_RESET */ ++ ++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */ ++ 0x0018, /* IO_ACX_SLV_MEM_DATA */ ++ 0x001c, /* IO_ACX_SLV_MEM_CTL */ ++ 0x0020, /* IO_ACX_SLV_MEM_CP */ ++ ++ 0x0034, /* IO_ACX_FEMR */ ++ ++ 0x00b4, /* IO_ACX_INT_TRIG */ ++ 0x00d4, /* IO_ACX_IRQ_MASK */ ++ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */ ++ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */ ++ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */ ++ 0x00e8, /* IO_ACX_IRQ_ACK */ ++ 0x00ec, /* IO_ACX_HINT_TRIG */ ++ ++ 0x01d0, /* IO_ACX_ENABLE */ ++ ++ 0x0338, /* IO_ACX_EEPROM_CTL */ ++ 0x033c, /* IO_ACX_EEPROM_ADDR */ ++ 0x0340, /* IO_ACX_EEPROM_DATA */ ++ 0x0344, /* IO_ACX_EEPROM_CFG */ ++ ++ 0x0350, /* IO_ACX_PHY_ADDR */ ++ 0x0354, /* IO_ACX_PHY_DATA */ ++ 0x0358, /* IO_ACX_PHY_CTL */ ++ ++ 0x0374, /* IO_ACX_GPIO_OE */ ++ ++ 0x037c, /* IO_ACX_GPIO_OUT */ ++ ++ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */ ++ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */ ++ 0x0390, /* IO_ACX_EEPROM_INFORMATION */ ++ ++ 0x0100, /* IO_ACX_EE_START */ ++ 0x0104, /* IO_ACX_SOR_CFG */ ++ 0x0108, /* IO_ACX_ECPU_CTRL */ ++}; ++ ++static void ++dummy_netdev_init(struct net_device *ndev) {} ++ ++/* ++ * Most of the acx specific pieces of hardware reset. ++ */ ++static int ++acxmem_complete_hw_reset (acx_device_t *adev) ++{ ++ acx111_ie_configoption_t co; ++ ++ /* NB: read_reg() reads may return bogus data before reset_dev(), ++ * since the firmware which directly controls large parts of the I/O ++ * registers isn't initialized yet. ++ * acx100 seems to be more affected than acx111 */ ++ if (OK != acxmem_s_reset_dev (adev)) ++ return -1; ++ ++ if (IS_ACX100(adev)) { ++ /* ACX100: configopt struct in cmd mailbox - directly after reset */ ++ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co)); ++ } ++ ++ if (OK != acx_s_init_mac(adev)) ++ return -3; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111: configopt struct needs to be queried after full init */ ++ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS); ++ } ++ ++ /* ++ * Set up transmit buffer administration ++ */ ++ init_acx_txbuf (adev); ++ ++ /* ++ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor ++ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT ++ */ ++ if (adev->form_factor == 3) { ++ set_regbits (adev, 0x288, 0x01000000); ++ set_regbits (adev, 0x298, 1<<9); ++ } ++ ++/* TODO: merge them into one function, they are called just once and are the same for pci & usb */ ++ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version)) ++ return -2; ++ ++ acx_s_parse_configoption(adev, &co); ++ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */ ++ acx_display_hardware_details(adev); ++ ++ return 0; ++} ++ ++static int __devinit ++acxmem_e_probe(struct platform_device *pdev) ++{ ++ struct acx_hardware_data *hwdata = pdev->dev.platform_data; ++ acx_device_t *adev = NULL; ++ struct net_device *ndev = NULL; ++ const char *chip_name; ++ int result = -EIO; ++ int err; ++ int i; ++ unsigned long addr_size=0; ++ u8 chip_type; ++ ++ FN_ENTER; ++ (void) hwdata->start_hw(); ++ ++ /* FIXME: prism54 calls pci_set_mwi() here, ++ * should we do/support the same? */ ++ ++ /* chiptype is u8 but id->driver_data is ulong ++ ** Works for now (possible values are 1 and 2) */ ++ chip_type = CHIPTYPE_ACX100; ++ /* acx100 and acx111 have different PCI memory regions */ ++ if (chip_type == CHIPTYPE_ACX100) { ++ chip_name = "ACX100"; ++ } else if (chip_type == CHIPTYPE_ACX111) { ++ chip_name = "ACX111"; ++ } else { ++ printk("acx: unknown chip type 0x%04X\n", chip_type); ++ goto fail_unknown_chiptype; ++ } ++ ++ printk("acx: found %s-based wireless network card\n", chip_name); ++ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug); ++ ++ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init); ++ /* (NB: memsets to 0 entire area) */ ++ if (!ndev) { ++ printk("acx: no memory for netdevice struct\n"); ++ goto fail_alloc_netdev; ++ } ++ ++ platform_set_drvdata (pdev, ndev); ++ ++ ether_setup(ndev); ++ ++ /* ++ * use platform_data resources that were provided ++ */ ++ ndev->irq = 0; ++ for (i=0; inum_resources; i++) { ++ if (pdev->resource[i].flags == IORESOURCE_IRQ) { ++ ndev->irq = pdev->resource[i].start; ++ } ++ else if (pdev->resource[i].flags == IORESOURCE_MEM) { ++ ndev->base_addr = pdev->resource[i].start; ++ addr_size = pdev->resource[i].end - pdev->resource[i].start; ++ } ++ } ++ if (addr_size == 0 || ndev->irq == 0) ++ goto fail_hw_params; ++ ndev->open = &acxmem_e_open; ++ ndev->stop = &acxmem_e_close; ++ pdev->dev.release = &acxmem_e_release; ++ ndev->hard_start_xmit = &acx_i_start_xmit; ++ ndev->get_stats = &acx_e_get_stats; ++#if IW_HANDLER_VERSION <= 5 ++ ndev->get_wireless_stats = &acx_e_get_wireless_stats; ++#endif ++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def; ++ ndev->set_multicast_list = &acxmem_i_set_multicast_list; ++ ndev->tx_timeout = &acxmem_i_tx_timeout; ++ ndev->change_mtu = &acx_e_change_mtu; ++ ndev->watchdog_timeo = 4 * HZ; ++ ++ adev = ndev2adev(ndev); ++ spin_lock_init(&adev->lock); /* initial state: unlocked */ ++ spin_lock_init(&adev->txbuf_lock); ++ /* We do not start with downed sem: we want PARANOID_LOCKING to work */ ++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */ ++ /* since nobody can see new netdev yet, we can as well ++ ** just _presume_ that we're under sem (instead of actually taking it): */ ++ /* acx_sem_lock(adev); */ ++ adev->dev = &pdev->dev; ++ adev->ndev = ndev; ++ adev->dev_type = DEVTYPE_MEM; ++ adev->chip_type = chip_type; ++ adev->chip_name = chip_name; ++ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111; ++ adev->membase = (volatile u32 *) ndev->base_addr; ++ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size); ++ /* to find crashes due to weird driver access ++ * to unconfigured interface (ifup) */ ++ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead; ++ ++#if defined(NONESSENTIAL_FEATURES) ++ acx_show_card_eeprom_id(adev); ++#endif /* NONESSENTIAL_FEATURES */ ++ ++#ifdef SET_MODULE_OWNER ++ SET_MODULE_OWNER(ndev); ++#endif ++ SET_NETDEV_DEV(ndev, &pdev->dev); ++ ++ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq); ++ ++ /* ok, pci setup is finished, now start initializing the card */ ++ ++ if (OK != acxmem_complete_hw_reset (adev)) ++ goto fail_reset; ++ ++ /* ++ * Set up default things for most of the card settings. ++ */ ++ acx_s_set_defaults(adev); ++ ++ /* Register the card, AFTER everything else has been set up, ++ * since otherwise an ioctl could step on our feet due to ++ * firmware operations happening in parallel or uninitialized data */ ++ err = register_netdev(ndev); ++ if (OK != err) { ++ printk("acx: register_netdev() FAILED: %d\n", err); ++ goto fail_register_netdev; ++ } ++ ++ acx_proc_register_entries(ndev); ++ ++ /* Now we have our device, so make sure the kernel doesn't try ++ * to send packets even though we're not associated to a network yet */ ++ acx_stop_queue(ndev, "on probe"); ++ acx_carrier_off(ndev, "on probe"); ++ ++ /* ++ * Set up a default monitor type so that poor combinations of initialization ++ * sequences in monitor mode don't end up destroying the hardware type. ++ */ ++ adev->monitor_type = ARPHRD_ETHER; ++ ++ /* ++ * Register to receive inetaddr notifier changes. This will allow us to ++ * catch if the user changes the MAC address of the interface. ++ */ ++ register_netdevice_notifier(&acx_netdev_notifier); ++ ++ /* after register_netdev() userspace may start working with dev ++ * (in particular, on other CPUs), we only need to up the sem */ ++ /* acx_sem_unlock(adev); */ ++ ++ printk("acx "ACX_RELEASE": net device %s, driver compiled " ++ "against wireless extensions %d and Linux %s\n", ++ ndev->name, WIRELESS_EXT, UTS_RELEASE); ++ ++#if CMD_DISCOVERY ++ great_inquisitor(adev); ++#endif ++ ++ result = OK; ++ goto done; ++ ++ /* error paths: undo everything in reverse order... */ ++ ++fail_register_netdev: ++ ++ acxmem_s_delete_dma_regions(adev); ++ ++fail_reset: ++fail_hw_params: ++ free_netdev(ndev); ++fail_alloc_netdev: ++fail_unknown_chiptype: ++ ++ ++done: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_remove ++** ++** Shut device down (if not hot unplugged) ++** and deallocate PCI resources for the acx chip. ++** ++** pdev - ptr to PCI device structure containing info about pci configuration ++*/ ++static int __devexit ++acxmem_e_remove(struct platform_device *pdev) ++{ ++ struct acx_hardware_data *hwdata = pdev->dev.platform_data; ++ struct net_device *ndev; ++ acx_device_t *adev; ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ ndev = (struct net_device*) platform_get_drvdata(pdev); ++ if (!ndev) { ++ log(L_DEBUG, "%s: card is unused. Skipping any release code\n", ++ __func__); ++ goto end; ++ } ++ ++ adev = ndev2adev(ndev); ++ ++ /* If device wasn't hot unplugged... */ ++ if (adev_present(adev)) { ++ ++ acx_sem_lock(adev); ++ ++ /* disable both Tx and Rx to shut radio down properly */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0); ++ ++#ifdef REDUNDANT ++ /* put the eCPU to sleep to save power ++ * Halting is not possible currently, ++ * since not supported by all firmware versions */ ++ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0); ++#endif ++ acx_lock(adev, flags); ++ ++ /* disable power LED to save power :-) */ ++ log(L_INIT, "switching off power LED to save power\n"); ++ acxmem_l_power_led(adev, 0); ++ ++ /* stop our eCPU */ ++ if (IS_ACX111(adev)) { ++ /* FIXME: does this actually keep halting the eCPU? ++ * I don't think so... ++ */ ++ acxmem_l_reset_mac(adev); ++ } else { ++ u16 temp; ++ ++ /* halt eCPU */ ++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1; ++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp); ++ write_flush(adev); ++ } ++ ++ acx_unlock(adev, flags); ++ ++ acx_sem_unlock(adev); ++ } ++ ++ ++ /* ++ * Unregister the notifier chain ++ */ ++ unregister_netdevice_notifier(&acx_netdev_notifier); ++ ++ /* unregister the device to not let the kernel ++ * (e.g. ioctls) access a half-deconfigured device ++ * NB: this will cause acxmem_e_close() to be called, ++ * thus we shouldn't call it under sem! */ ++ log(L_INIT, "removing device %s\n", ndev->name); ++ unregister_netdev(ndev); ++ ++ /* unregister_netdev ensures that no references to us left. ++ * For paranoid reasons we continue to follow the rules */ ++ acx_sem_lock(adev); ++ ++ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) { ++ acxmem_s_down(ndev); ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ } ++ ++ acx_proc_unregister_entries(ndev); ++ ++ acxmem_s_delete_dma_regions(adev); ++ ++ /* finally, clean up PCI bus state */ ++ if (adev->iobase) iounmap((void *)adev->iobase); ++ ++ acx_sem_unlock(adev); ++ ++ /* Free netdev (quite late, ++ * since otherwise we might get caught off-guard ++ * by a netdev timeout handler execution ++ * expecting to see a working dev...) */ ++ free_netdev(ndev); ++ ++ (void) hwdata->stop_hw(); ++ ++ printk ("e_remove done\n"); ++end: ++ FN_EXIT0; ++ ++ return 0; ++} ++ ++ ++/*********************************************************************** ++** TODO: PM code needs to be fixed / debugged / tested. ++*/ ++#ifdef CONFIG_PM ++static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++acxmem_e_suspend(struct platform_device *pdev, pm_message_t state) ++#else ++acxmem_e_suspend(struct device *pdev, u32 state) ++#endif ++{ ++ struct net_device *ndev = platform_get_drvdata(pdev); ++ acx_device_t *adev; ++ struct acx_hardware_data *hwdata; ++ ++ FN_ENTER; ++ printk("acx: suspend handler is experimental!\n"); ++ printk("sus: dev %p\n", ndev); ++ ++ if (!netif_running(ndev)) ++ goto end; ++ ++ adev = ndev2adev(ndev); ++ printk("sus: adev %p\n", adev); ++ ++ hwdata = adev->dev->platform_data; ++ ++ acx_sem_lock(adev); ++ ++ netif_device_detach(ndev); /* this one cannot sleep */ ++ acxmem_s_down(ndev); ++ /* down() does not set it to 0xffff, but here we really want that */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ acxmem_s_delete_dma_regions(adev); ++ ++ /* ++ * Turn the ACX chip off. ++ */ ++ hwdata->stop_hw(); ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++ ++static void ++fw_resumer(struct work_struct *notused) ++{ ++ struct platform_device *pdev = resume_pdev; ++ struct net_device *ndev = platform_get_drvdata(pdev); ++ acx_device_t *adev; ++ struct acx_hardware_data *hwdata; ++ ++ printk("acx: resume handler is experimental!\n"); ++ printk("rsm: got dev %p\n", ndev); ++ ++ if (!netif_running(ndev)) ++ return; ++ ++ adev = ndev2adev(ndev); ++ printk("rsm: got adev %p\n", adev); ++ ++ acx_sem_lock(adev); ++ ++ hwdata = adev->dev->platform_data; ++ ++ /* ++ * Turn on the ACX. ++ */ ++ hwdata->start_hw(); ++ ++ acxmem_complete_hw_reset (adev); ++ ++ /* ++ * done by acx_s_set_defaults for initial startup ++ */ ++ acxmem_set_interrupt_mask(adev); ++ ++ printk ("rsm: bringing up interface\n"); ++ SET_BIT (adev->set_mask, GETSET_ALL); ++ acxmem_s_up(ndev); ++ printk("rsm: acx up done\n"); ++ ++ /* now even reload all card parameters as they were before suspend, ++ * and possibly be back in the network again already :-) ++ */ ++ /* - most settings updated in acxmem_s_up() ++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) { ++ adev->set_mask = GETSET_ALL; ++ acx_s_update_card_settings(adev); ++ printk("rsm: settings updated\n"); ++ } ++ */ ++ netif_device_attach(ndev); ++ printk("rsm: device attached\n"); ++ ++ acx_sem_unlock(adev); ++} ++ ++DECLARE_WORK( fw_resume_work, fw_resumer ); ++ ++static int ++acxmem_e_resume(struct platform_device *pdev) ++{ ++ FN_ENTER; ++ ++ resume_pdev = pdev; ++ schedule_work( &fw_resume_work ); ++ ++ FN_EXIT0; ++ return OK; ++} ++#endif /* CONFIG_PM */ ++ ++ ++/*********************************************************************** ++** acxmem_s_up ++** ++** This function is called by acxmem_e_open (when ifconfig sets the device as up) ++** ++** Side effects: ++** - Enables on-card interrupt requests ++** - calls acx_s_start ++*/ ++ ++static void ++enable_acx_irq(acx_device_t *adev) ++{ ++ FN_ENTER; ++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask); ++ write_reg16(adev, IO_ACX_FEMR, 0x8000); ++ adev->irqs_active = 1; ++ FN_EXIT0; ++} ++ ++static void ++acxmem_s_up(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ enable_acx_irq(adev); ++ acx_unlock(adev, flags); ++ ++ /* acx fw < 1.9.3.e has a hardware timer, and older drivers ++ ** used to use it. But we don't do that anymore, our OS ++ ** has reliable software timers */ ++ init_timer(&adev->mgmt_timer); ++ adev->mgmt_timer.function = acx_i_timer; ++ adev->mgmt_timer.data = (unsigned long)adev; ++ ++ /* Need to set ACX_STATE_IFACE_UP first, or else ++ ** timer won't be started by acx_set_status() */ ++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ /* actual scan cmd will happen in start() */ ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); break; ++ case ACX_MODE_3_AP: ++ case ACX_MODE_MONITOR: ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break; ++ } ++ ++ acx_s_start(adev); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_down ++** ++** This disables the netdevice ++** ++** Side effects: ++** - disables on-card interrupt request ++*/ ++ ++static void ++disable_acx_irq(acx_device_t *adev) ++{ ++ FN_ENTER; ++ ++ /* I guess mask is not 0xffff because acx100 won't signal ++ ** cmd completion then (needed for ifup). ++ ** Someone with acx100 please confirm */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ adev->irqs_active = 0; ++ FN_EXIT0; ++} ++ ++static void ++acxmem_s_down(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ /* Disable IRQs first, so that IRQs cannot race with us */ ++ /* then wait until interrupts have finished executing on other CPUs */ ++ acx_lock(adev, flags); ++ disable_acx_irq(adev); ++ synchronize_irq(adev->pdev->irq); ++ acx_unlock(adev, flags); ++ ++ /* we really don't want to have an asynchronous tasklet disturb us ++ ** after something vital for its job has been shut down, so ++ ** end all remaining work now. ++ ** ++ ** NB: carrier_off (done by set_status below) would lead to ++ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK(). ++ ** That's why we do FLUSH first. ++ ** ++ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK() ++ ** waits for acx_e_after_interrupt_task to complete if it is running ++ ** on another CPU, but acx_e_after_interrupt_task ++ ** will sleep on sem forever, because it is taken by us! ++ ** Work around that by temporary sem unlock. ++ ** This will fail miserably if we'll be hit by concurrent ++ ** iwconfig or something in between. TODO! */ ++ acx_sem_unlock(adev); ++ FLUSH_SCHEDULED_WORK(); ++ acx_sem_lock(adev); ++ ++ /* This is possible: ++ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task -> ++ ** -> set_status(ASSOCIATED) -> wake_queue() ++ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK ++ ** lock/unlock is just paranoia, maybe not needed */ ++ acx_lock(adev, flags); ++ acx_stop_queue(ndev, "on ifdown"); ++ acx_set_status(adev, ACX_STATUS_0_STOPPED); ++ acx_unlock(adev, flags); ++ ++ /* kernel/timer.c says it's illegal to del_timer_sync() ++ ** a timer which restarts itself. We guarantee this cannot ++ ** ever happen because acx_i_timer() never does this if ++ ** status is ACX_STATUS_0_STOPPED */ ++ del_timer_sync(&adev->mgmt_timer); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_open ++** ++** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP ++** from clear to set. In other words: ifconfig up. ++** ++** Returns: ++** 0 success ++** >0 f/w reported error ++** <0 driver reported error ++*/ ++static int ++acxmem_e_open(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result = OK; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ acx_init_task_scheduler(adev); ++ ++/* TODO: pci_set_power_state(pdev, PCI_D0); ? */ ++ ++ /* request shared IRQ handler */ ++ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) { ++ printk("%s: request_irq FAILED\n", ndev->name); ++ result = -EAGAIN; ++ goto done; ++ } ++ set_irq_type (ndev->irq, IRQT_FALLING); ++ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq); ++ ++ /* ifup device */ ++ acxmem_s_up(ndev); ++ ++ /* We don't currently have to do anything else. ++ * The setup of the MAC should be subsequently completed via ++ * the mlme commands. ++ * Higher layers know we're ready from dev->start==1 and ++ * dev->tbusy==0. Our rx path knows to pass up received/ ++ * frames because of dev->flags&IFF_UP is true. ++ */ ++done: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_close ++** ++** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP ++** from set to clear. I.e. called by "ifconfig DEV down" ++** ++** Returns: ++** 0 success ++** >0 f/w reported error ++** <0 driver reported error ++*/ ++static int ++acxmem_e_close(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* ifdown device */ ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ if (netif_device_present(ndev)) { ++ acxmem_s_down(ndev); ++ } ++ ++ /* disable all IRQs, release shared IRQ handler */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ free_irq(ndev->irq, ndev); ++ ++/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */ ++ ++ /* We currently don't have to do anything else. ++ * Higher layers know we're not ready from dev->start==0 and ++ * dev->tbusy==1. Our rx path knows to not pass up received ++ * frames because of dev->flags&IFF_UP is false. ++ */ ++ acx_sem_unlock(adev); ++ ++ log(L_INIT, "closed device\n"); ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acxmem_i_tx_timeout ++** ++** Called from network core. Must not sleep! ++*/ ++static void ++acxmem_i_tx_timeout(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ unsigned int tx_num_cleaned; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ /* clean processed tx descs, they may have been completely full */ ++ tx_num_cleaned = acxmem_l_clean_txdesc(adev); ++ ++ /* nothing cleaned, yet (almost) no free buffers available? ++ * --> clean all tx descs, no matter which status!! ++ * Note that I strongly suspect that doing emergency cleaning ++ * may confuse the firmware. This is a last ditch effort to get ++ * ANYTHING to work again... ++ * ++ * TODO: it's best to simply reset & reinit hw from scratch... ++ */ ++ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) { ++ printk("%s: FAILED to free any of the many full tx buffers. " ++ "Switching to emergency freeing. " ++ "Please report!\n", ndev->name); ++ acxmem_l_clean_txdesc_emergency(adev); ++ } ++ ++ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status)) ++ acx_wake_queue(ndev, "after tx timeout"); ++ ++ /* stall may have happened due to radio drift, so recalib radio */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ ++ /* do unimportant work last */ ++ printk("%s: tx timeout!\n", ndev->name); ++ adev->stats.tx_errors++; ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_i_set_multicast_list ++** FIXME: most likely needs refinement ++*/ ++static void ++acxmem_i_set_multicast_list(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ /* firmwares don't have allmulti capability, ++ * so just use promiscuous mode instead in this case. */ ++ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) { ++ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS); ++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI); ++ SET_BIT(adev->set_mask, SET_RXCONFIG); ++ /* let kernel know in case *we* needed to set promiscuous */ ++ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI); ++ } else { ++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS); ++ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI); ++ SET_BIT(adev->set_mask, SET_RXCONFIG); ++ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI); ++ } ++ ++ /* cannot update card settings directly here, atomic context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG); ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxmem_l_process_rxdesc ++** ++** Called directly and only from the IRQ handler ++*/ ++ ++#if !ACX_DEBUG ++static inline void log_rxbuffer(const acx_device_t *adev) {} ++#else ++static void ++log_rxbuffer(const acx_device_t *adev) ++{ ++ register const struct rxhostdesc *rxhostdesc; ++ int i; ++ /* no FN_ENTER here, we don't want that */ ++ ++ rxhostdesc = adev->rxhostdesc_start; ++ if (unlikely(!rxhostdesc)) return; ++ for (i = 0; i < RX_CNT; i++) { ++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN)) ++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL))) ++ printk("rx: buf %d full\n", i); ++ rxhostdesc++; ++ } ++} ++#endif ++ ++static void ++acxmem_l_process_rxdesc(acx_device_t *adev) ++{ ++ register rxhostdesc_t *hostdesc; ++ register rxdesc_t *rxdesc; ++ unsigned count, tail; ++ u32 addr; ++ u8 Ctl_8; ++ ++ FN_ENTER; ++ ++ if (unlikely(acx_debug & L_BUFR)) ++ log_rxbuffer(adev); ++ ++ /* First, have a loop to determine the first descriptor that's ++ * full, just in case there's a mismatch between our current ++ * rx_tail and the full descriptor we're supposed to handle. */ ++ tail = adev->rx_tail; ++ count = RX_CNT; ++ while (1) { ++ hostdesc = &adev->rxhostdesc_start[tail]; ++ rxdesc = &adev->rxdesc_start[tail]; ++ /* advance tail regardless of outcome of the below test */ ++ tail = (tail + 1) % RX_CNT; ++ ++ /* ++ * Unlike the PCI interface, where the ACX can write directly to ++ * the host descriptors, on the slave memory interface we have to ++ * pull these. All we really need to do is check the Ctl_8 field ++ * in the rx descriptor on the ACX, which should be 0x11000000 if ++ * we should process it. ++ */ ++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8)); ++ if ((Ctl_8 & DESC_CTL_HOSTOWN) && ++ (Ctl_8 & DESC_CTL_ACXDONE)) ++ break; /* found it! */ ++ ++ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */ ++ goto end; ++ } ++ ++ /* now process descriptors, starting with the first we figured out */ ++ while (1) { ++ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8); ++ /* ++ * If the ACX has CTL_RECLAIM set on this descriptor there ++ * is no buffer associated; it just wants us to tell it to ++ * reclaim the memory. ++ */ ++ if (!(Ctl_8 & DESC_CTL_RECLAIM)) { ++ ++ /* ++ * slave interface - pull data now ++ */ ++ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length)); ++ ++ /* ++ * hostdesc->data is an rxbuffer_t, which includes header information, ++ * but the length in the data packet doesn't. The header information ++ * takes up an additional 12 bytes, so add that to the length we copy. ++ */ ++ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr)); ++ if (addr) { ++ /* ++ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we ++ * get that now and then - try to trap it for debug. ++ */ ++ if (addr & 0xffff0000) { ++ printk("rxdesc 0x%08x\n", (u32) rxdesc); ++ dump_acxmem (adev, 0, 0x10000); ++ panic ("Bad access!"); ++ } ++ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr, ++ hostdesc->length + ++ (u32) &((rxbuffer_t *)0)->hdr_a3); ++ acx_l_process_rxbuf(adev, hostdesc->data); ++ } ++ } ++ else { ++ printk ("rx reclaim only!\n"); ++ } ++ ++ hostdesc->Status = 0; ++ ++ /* ++ * Let the ACX know we're done. ++ */ ++ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN); ++ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE); ++ SET_BIT (Ctl_8, DESC_CTL_RECLAIM); ++ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8); ++ ++ /* ++ * Now tell the ACX we've finished with the receive buffer so ++ * it can finish the reclaim. ++ */ ++ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC); ++ ++ /* ok, descriptor is handled, now check the next descriptor */ ++ hostdesc = &adev->rxhostdesc_start[tail]; ++ rxdesc = &adev->rxdesc_start[tail]; ++ ++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8)); ++ ++ /* if next descriptor is empty, then bail out */ ++ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE)) ++ break; ++ ++ tail = (tail + 1) % RX_CNT; ++ } ++end: ++ adev->rx_tail = tail; ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_i_interrupt ++** ++** IRQ handler (atomic context, must not sleep, blah, blah) ++*/ ++ ++/* scan is complete. all frames now on the receive queue are valid */ ++#define INFO_SCAN_COMPLETE 0x0001 ++#define INFO_WEP_KEY_NOT_FOUND 0x0002 ++/* hw has been reset as the result of a watchdog timer timeout */ ++#define INFO_WATCH_DOG_RESET 0x0003 ++/* failed to send out NULL frame from PS mode notification to AP */ ++/* recommended action: try entering 802.11 PS mode again */ ++#define INFO_PS_FAIL 0x0004 ++/* encryption/decryption process on a packet failed */ ++#define INFO_IV_ICV_FAILURE 0x0005 ++ ++/* Info mailbox format: ++2 bytes: type ++2 bytes: status ++more bytes may follow ++ rumors say about status: ++ 0x0000 info available (set by hw) ++ 0x0001 information received (must be set by host) ++ 0x1000 info available, mailbox overflowed (messages lost) (set by hw) ++ but in practice we've seen: ++ 0x9000 when we did not set status to 0x0001 on prev message ++ 0x1001 when we did set it ++ 0x0000 was never seen ++ conclusion: this is really a bitfield: ++ 0x1000 is 'info available' bit ++ 'mailbox overflowed' bit is 0x8000, not 0x1000 ++ value of 0x0000 probably means that there are no messages at all ++ P.S. I dunno how in hell hw is supposed to notice that messages are lost - ++ it does NOT clear bit 0x0001, and this bit will probably stay forever set ++ after we set it once. Let's hope this will be fixed in firmware someday ++*/ ++ ++static void ++handle_info_irq(acx_device_t *adev) ++{ ++#if ACX_DEBUG ++ static const char * const info_type_msg[] = { ++ "(unknown)", ++ "scan complete", ++ "WEP key not found", ++ "internal watchdog reset was done", ++ "failed to send powersave (NULL frame) notification to AP", ++ "encrypt/decrypt on a packet has failed", ++ "TKIP tx keys disabled", ++ "TKIP rx keys disabled", ++ "TKIP rx: key ID not found", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "TKIP IV value exceeds thresh" ++ }; ++#endif ++ u32 info_type, info_status; ++ ++ info_type = read_slavemem32 (adev, (u32) adev->info_area); ++ ++ info_status = (info_type >> 16); ++ info_type = (u16)info_type; ++ ++ /* inform fw that we have read this info message */ ++ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK); ++ write_flush(adev); ++ ++ log(L_CTL, "info_type:%04X info_status:%04X\n", ++ info_type, info_status); ++ ++ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n", ++ info_status, info_type, ++ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ? ++ 0 : info_type] ++ ); ++} ++ ++ ++static void ++log_unusual_irq(u16 irqtype) { ++ /* ++ if (!printk_ratelimit()) ++ return; ++ */ ++ ++ printk("acx: got"); ++ if (irqtype & HOST_INT_TX_XFER) { ++ printk(" Tx_Xfer"); ++ } ++ if (irqtype & HOST_INT_RX_COMPLETE) { ++ printk(" Rx_Complete"); ++ } ++ if (irqtype & HOST_INT_DTIM) { ++ printk(" DTIM"); ++ } ++ if (irqtype & HOST_INT_BEACON) { ++ printk(" Beacon"); ++ } ++ if (irqtype & HOST_INT_TIMER) { ++ log(L_IRQ, " Timer"); ++ } ++ if (irqtype & HOST_INT_KEY_NOT_FOUND) { ++ printk(" Key_Not_Found"); ++ } ++ if (irqtype & HOST_INT_IV_ICV_FAILURE) { ++ printk(" IV_ICV_Failure (crypto)"); ++ } ++ /* HOST_INT_CMD_COMPLETE */ ++ /* HOST_INT_INFO */ ++ if (irqtype & HOST_INT_OVERFLOW) { ++ printk(" Overflow"); ++ } ++ if (irqtype & HOST_INT_PROCESS_ERROR) { ++ printk(" Process_Error"); ++ } ++ /* HOST_INT_SCAN_COMPLETE */ ++ if (irqtype & HOST_INT_FCS_THRESHOLD) { ++ printk(" FCS_Threshold"); ++ } ++ if (irqtype & HOST_INT_UNKNOWN) { ++ printk(" Unknown"); ++ } ++ printk(" IRQ(s)\n"); ++} ++ ++ ++static void ++update_link_quality_led(acx_device_t *adev) ++{ ++ int qual; ++ ++ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise); ++ if (qual > adev->brange_max_quality) ++ qual = adev->brange_max_quality; ++ ++ if (time_after(jiffies, adev->brange_time_last_state_change + ++ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) { ++ acxmem_l_power_led(adev, (adev->brange_last_state == 0)); ++ adev->brange_last_state ^= 1; /* toggle */ ++ adev->brange_time_last_state_change = jiffies; ++ } ++} ++ ++ ++#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */ ++ ++static irqreturn_t ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++acxmem_i_interrupt(int irq, void *dev_id) ++#else ++acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++#endif ++{ ++ acx_device_t *adev; ++ unsigned long flags; ++ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY; ++ register u16 irqtype; ++ u16 unmasked; ++ ++ adev = ndev2adev((struct net_device*)dev_id); ++ ++ /* LOCKING: can just spin_lock() since IRQs are disabled anyway. ++ * I am paranoid */ ++ acx_lock(adev, flags); ++ ++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR); ++ if (unlikely(0xffff == unmasked)) { ++ /* 0xffff value hints at missing hardware, ++ * so don't do anything. ++ * Not very clean, but other drivers do the same... */ ++ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n"); ++ goto none; ++ } ++ ++ /* We will check only "interesting" IRQ types */ ++ irqtype = unmasked & ~adev->irq_mask; ++ if (!irqtype) { ++ /* We are on a shared IRQ line and it wasn't our IRQ */ ++ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n", ++ unmasked, adev->irq_mask); ++ goto none; ++ } ++ ++ /* Done here because IRQ_NONEs taking three lines of log ++ ** drive me crazy */ ++ FN_ENTER; ++ ++#define IRQ_ITERATE 1 ++#if IRQ_ITERATE ++if (jiffies != adev->irq_last_jiffies) { ++ adev->irq_loops_this_jiffy = 0; ++ adev->irq_last_jiffies = jiffies; ++} ++ ++/* safety condition; we'll normally abort loop below ++ * in case no IRQ type occurred */ ++while (likely(--irqcount)) { ++#endif ++ /* ACK all IRQs ASAP */ ++ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff); ++ ++ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n", ++ unmasked, adev->irq_mask, irqtype); ++ ++ /* Handle most important IRQ types first */ ++ if (irqtype & HOST_INT_RX_DATA) { ++ log(L_IRQ, "got Rx_Data IRQ\n"); ++ acxmem_l_process_rxdesc(adev); ++ } ++ if (irqtype & HOST_INT_TX_COMPLETE) { ++ log(L_IRQ, "got Tx_Complete IRQ\n"); ++ /* don't clean up on each Tx complete, wait a bit ++ * unless we're going towards full, in which case ++ * we do it immediately, too (otherwise we might lockup ++ * with a full Tx buffer if we go into ++ * acxmem_l_clean_txdesc() at a time when we won't wakeup ++ * the net queue in there for some reason...) */ ++ if (adev->tx_free <= TX_START_CLEAN) { ++#if TX_CLEANUP_IN_SOFTIRQ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP); ++#else ++ acxmem_l_clean_txdesc(adev); ++#endif ++ } ++ } ++ ++ /* Less frequent ones */ ++ if (irqtype & (0 ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ | HOST_INT_SCAN_COMPLETE ++ )) { ++ if (irqtype & HOST_INT_CMD_COMPLETE) { ++ log(L_IRQ, "got Command_Complete IRQ\n"); ++ /* save the state for the running issue_cmd() */ ++ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE); ++ } ++ if (irqtype & HOST_INT_INFO) { ++ handle_info_irq(adev); ++ } ++ if (irqtype & HOST_INT_SCAN_COMPLETE) { ++ log(L_IRQ, "got Scan_Complete IRQ\n"); ++ /* need to do that in process context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN); ++ /* remember that fw is not scanning anymore */ ++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE); ++ } ++ } ++ ++ /* These we just log, but either they happen rarely ++ * or we keep them masked out */ ++ if (irqtype & (0 ++ /* | HOST_INT_RX_DATA */ ++ /* | HOST_INT_TX_COMPLETE */ ++ | HOST_INT_TX_XFER ++ | HOST_INT_RX_COMPLETE ++ | HOST_INT_DTIM ++ | HOST_INT_BEACON ++ | HOST_INT_TIMER ++ | HOST_INT_KEY_NOT_FOUND ++ | HOST_INT_IV_ICV_FAILURE ++ /* | HOST_INT_CMD_COMPLETE */ ++ /* | HOST_INT_INFO */ ++ | HOST_INT_OVERFLOW ++ | HOST_INT_PROCESS_ERROR ++ /* | HOST_INT_SCAN_COMPLETE */ ++ | HOST_INT_FCS_THRESHOLD ++ | HOST_INT_UNKNOWN ++ )) { ++ log_unusual_irq(irqtype); ++ } ++ ++#if IRQ_ITERATE ++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR); ++ irqtype = unmasked & ~adev->irq_mask; ++ /* Bail out if no new IRQ bits or if all are masked out */ ++ if (!irqtype) ++ break; ++ ++ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) { ++ printk(KERN_ERR "acx: too many interrupts per jiffy!\n"); ++ /* Looks like card floods us with IRQs! Try to stop that */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ /* This will short-circuit all future attempts to handle IRQ. ++ * We cant do much more... */ ++ adev->irq_mask = 0; ++ break; ++ } ++} ++#endif ++ /* Routine to perform blink with range */ ++ if (unlikely(adev->led_power == 2)) ++ update_link_quality_led(adev); ++ ++/* handled: */ ++ /* write_flush(adev); - not needed, last op was read anyway */ ++ acx_unlock(adev, flags); ++ FN_EXIT0; ++ return IRQ_HANDLED; ++ ++none: ++ acx_unlock(adev, flags); ++ return IRQ_NONE; ++} ++ ++ ++/*********************************************************************** ++** acxmem_l_power_led ++*/ ++void ++acxmem_l_power_led(acx_device_t *adev, int enable) ++{ ++ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800; ++ ++ /* A hack. Not moving message rate limiting to adev->xxx ++ * (it's only a debug message after all) */ ++ static int rate_limit = 0; ++ ++ if (rate_limit++ < 3) ++ log(L_IOCTL, "Please report in case toggling the power " ++ "LED doesn't work for your card!\n"); ++ if (enable) ++ write_reg16(adev, IO_ACX_GPIO_OUT, ++ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled); ++ else ++ write_reg16(adev, IO_ACX_GPIO_OUT, ++ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled); ++} ++ ++ ++/*********************************************************************** ++** Ioctls ++*/ ++ ++/*********************************************************************** ++*/ ++int ++acx111pci_ioctl_info( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++#if ACX_DEBUG > 1 ++ acx_device_t *adev = ndev2adev(ndev); ++ rxdesc_t *rxdesc; ++ txdesc_t *txdesc; ++ rxhostdesc_t *rxhostdesc; ++ txhostdesc_t *txhostdesc; ++ struct acx111_ie_memoryconfig memconf; ++ struct acx111_ie_queueconfig queueconf; ++ unsigned long flags; ++ int i; ++ char memmap[0x34]; ++ char rxconfig[0x8]; ++ char fcserror[0x8]; ++ char ratefallback[0x5]; ++ ++ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) ) ++ return OK; ++ /* using printk() since we checked debug flag already */ ++ ++ acx_sem_lock(adev); ++ ++ if (!IS_ACX111(adev)) { ++ printk("acx111-specific function called " ++ "with non-acx111 chip, aborting\n"); ++ goto end_ok; ++ } ++ ++ /* get Acx111 Memory Configuration */ ++ memset(&memconf, 0, sizeof(memconf)); ++ /* BTW, fails with 12 (Write only) error code. ++ ** Retained for easy testing of issue_cmd error handling :) */ ++ printk ("Interrogating queue config\n"); ++ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG); ++ printk ("done with queue config\n"); ++ ++ /* get Acx111 Queue Configuration */ ++ memset(&queueconf, 0, sizeof(queueconf)); ++ printk ("Interrogating mem config options\n"); ++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS); ++ printk ("done with mem config options\n"); ++ ++ /* get Acx111 Memory Map */ ++ memset(memmap, 0, sizeof(memmap)); ++ printk ("Interrogating mem map\n"); ++ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP); ++ printk ("done with mem map\n"); ++ ++ /* get Acx111 Rx Config */ ++ memset(rxconfig, 0, sizeof(rxconfig)); ++ printk ("Interrogating rxconfig\n"); ++ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG); ++ printk ("done with queue rxconfig\n"); ++ ++ /* get Acx111 fcs error count */ ++ memset(fcserror, 0, sizeof(fcserror)); ++ printk ("Interrogating fcs err count\n"); ++ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT); ++ printk ("done with err count\n"); ++ ++ /* get Acx111 rate fallback */ ++ memset(ratefallback, 0, sizeof(ratefallback)); ++ printk ("Interrogating rate fallback\n"); ++ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK); ++ printk ("done with rate fallback\n"); ++ ++ /* force occurrence of a beacon interrupt */ ++ /* TODO: comment why is this necessary */ ++ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON); ++ ++ /* dump Acx111 Mem Configuration */ ++ printk("dump mem config:\n" ++ "data read: %d, struct size: %d\n" ++ "Number of stations: %1X\n" ++ "Memory block size: %1X\n" ++ "tx/rx memory block allocation: %1X\n" ++ "count rx: %X / tx: %X queues\n" ++ "options %1X\n" ++ "fragmentation %1X\n" ++ "Rx Queue 1 Count Descriptors: %X\n" ++ "Rx Queue 1 Host Memory Start: %X\n" ++ "Tx Queue 1 Count Descriptors: %X\n" ++ "Tx Queue 1 Attributes: %X\n", ++ memconf.len, (int) sizeof(memconf), ++ memconf.no_of_stations, ++ memconf.memory_block_size, ++ memconf.tx_rx_memory_block_allocation, ++ memconf.count_rx_queues, memconf.count_tx_queues, ++ memconf.options, ++ memconf.fragmentation, ++ memconf.rx_queue1_count_descs, ++ acx2cpu(memconf.rx_queue1_host_rx_start), ++ memconf.tx_queue1_count_descs, ++ memconf.tx_queue1_attributes); ++ ++ /* dump Acx111 Queue Configuration */ ++ printk("dump queue head:\n" ++ "data read: %d, struct size: %d\n" ++ "tx_memory_block_address (from card): %X\n" ++ "rx_memory_block_address (from card): %X\n" ++ "rx1_queue address (from card): %X\n" ++ "tx1_queue address (from card): %X\n" ++ "tx1_queue attributes (from card): %X\n", ++ queueconf.len, (int) sizeof(queueconf), ++ queueconf.tx_memory_block_address, ++ queueconf.rx_memory_block_address, ++ queueconf.rx1_queue_address, ++ queueconf.tx1_queue_address, ++ queueconf.tx1_attributes); ++ ++ /* dump Acx111 Mem Map */ ++ printk("dump mem map:\n" ++ "data read: %d, struct size: %d\n" ++ "Code start: %X\n" ++ "Code end: %X\n" ++ "WEP default key start: %X\n" ++ "WEP default key end: %X\n" ++ "STA table start: %X\n" ++ "STA table end: %X\n" ++ "Packet template start: %X\n" ++ "Packet template end: %X\n" ++ "Queue memory start: %X\n" ++ "Queue memory end: %X\n" ++ "Packet memory pool start: %X\n" ++ "Packet memory pool end: %X\n" ++ "iobase: %p\n" ++ "iobase2: %p\n", ++ *((u16 *)&memmap[0x02]), (int) sizeof(memmap), ++ *((u32 *)&memmap[0x04]), ++ *((u32 *)&memmap[0x08]), ++ *((u32 *)&memmap[0x0C]), ++ *((u32 *)&memmap[0x10]), ++ *((u32 *)&memmap[0x14]), ++ *((u32 *)&memmap[0x18]), ++ *((u32 *)&memmap[0x1C]), ++ *((u32 *)&memmap[0x20]), ++ *((u32 *)&memmap[0x24]), ++ *((u32 *)&memmap[0x28]), ++ *((u32 *)&memmap[0x2C]), ++ *((u32 *)&memmap[0x30]), ++ adev->iobase, ++ adev->iobase2); ++ ++ /* dump Acx111 Rx Config */ ++ printk("dump rx config:\n" ++ "data read: %d, struct size: %d\n" ++ "rx config: %X\n" ++ "rx filter config: %X\n", ++ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig), ++ *((u16 *)&rxconfig[0x04]), ++ *((u16 *)&rxconfig[0x06])); ++ ++ /* dump Acx111 fcs error */ ++ printk("dump fcserror:\n" ++ "data read: %d, struct size: %d\n" ++ "fcserrors: %X\n", ++ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror), ++ *((u32 *)&fcserror[0x04])); ++ ++ /* dump Acx111 rate fallback */ ++ printk("dump rate fallback:\n" ++ "data read: %d, struct size: %d\n" ++ "ratefallback: %X\n", ++ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback), ++ *((u8 *)&ratefallback[0x04])); ++ ++ /* protect against IRQ */ ++ acx_lock(adev, flags); ++ ++ /* dump acx111 internal rx descriptor ring buffer */ ++ rxdesc = adev->rxdesc_start; ++ ++ /* loop over complete receive pool */ ++ if (rxdesc) for (i = 0; i < RX_CNT; i++) { ++ printk("\ndump internal rxdesc %d:\n" ++ "mem pos %p\n" ++ "next 0x%X\n" ++ "acx mem pointer (dynamic) 0x%X\n" ++ "CTL (dynamic) 0x%X\n" ++ "Rate (dynamic) 0x%X\n" ++ "RxStatus (dynamic) 0x%X\n" ++ "Mod/Pre (dynamic) 0x%X\n", ++ i, ++ rxdesc, ++ acx2cpu(rxdesc->pNextDesc), ++ acx2cpu(rxdesc->ACXMemPtr), ++ rxdesc->Ctl_8, ++ rxdesc->rate, ++ rxdesc->error, ++ rxdesc->SNR); ++ rxdesc++; ++ } ++ ++ /* dump host rx descriptor ring buffer */ ++ ++ rxhostdesc = adev->rxhostdesc_start; ++ ++ /* loop over complete receive pool */ ++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) { ++ printk("\ndump host rxdesc %d:\n" ++ "mem pos %p\n" ++ "buffer mem pos 0x%X\n" ++ "buffer mem offset 0x%X\n" ++ "CTL 0x%X\n" ++ "Length 0x%X\n" ++ "next 0x%X\n" ++ "Status 0x%X\n", ++ i, ++ rxhostdesc, ++ acx2cpu(rxhostdesc->data_phy), ++ rxhostdesc->data_offset, ++ le16_to_cpu(rxhostdesc->Ctl_16), ++ le16_to_cpu(rxhostdesc->length), ++ acx2cpu(rxhostdesc->desc_phy_next), ++ rxhostdesc->Status); ++ rxhostdesc++; ++ } ++ ++ /* dump acx111 internal tx descriptor ring buffer */ ++ txdesc = adev->txdesc_start; ++ ++ /* loop over complete transmit pool */ ++ if (txdesc) for (i = 0; i < TX_CNT; i++) { ++ printk("\ndump internal txdesc %d:\n" ++ "size 0x%X\n" ++ "mem pos %p\n" ++ "next 0x%X\n" ++ "acx mem pointer (dynamic) 0x%X\n" ++ "host mem pointer (dynamic) 0x%X\n" ++ "length (dynamic) 0x%X\n" ++ "CTL (dynamic) 0x%X\n" ++ "CTL2 (dynamic) 0x%X\n" ++ "Status (dynamic) 0x%X\n" ++ "Rate (dynamic) 0x%X\n", ++ i, ++ (int) sizeof(struct txdesc), ++ txdesc, ++ acx2cpu(txdesc->pNextDesc), ++ acx2cpu(txdesc->AcxMemPtr), ++ acx2cpu(txdesc->HostMemPtr), ++ le16_to_cpu(txdesc->total_length), ++ txdesc->Ctl_8, ++ txdesc->Ctl2_8, txdesc->error, ++ txdesc->u.r1.rate); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ ++ /* dump host tx descriptor ring buffer */ ++ ++ txhostdesc = adev->txhostdesc_start; ++ ++ /* loop over complete host send pool */ ++ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) { ++ printk("\ndump host txdesc %d:\n" ++ "mem pos %p\n" ++ "buffer mem pos 0x%X\n" ++ "buffer mem offset 0x%X\n" ++ "CTL 0x%X\n" ++ "Length 0x%X\n" ++ "next 0x%X\n" ++ "Status 0x%X\n", ++ i, ++ txhostdesc, ++ acx2cpu(txhostdesc->data_phy), ++ txhostdesc->data_offset, ++ le16_to_cpu(txhostdesc->Ctl_16), ++ le16_to_cpu(txhostdesc->length), ++ acx2cpu(txhostdesc->desc_phy_next), ++ le32_to_cpu(txhostdesc->Status)); ++ txhostdesc++; ++ } ++ ++ /* write_reg16(adev, 0xb4, 0x4); */ ++ ++ acx_unlock(adev, flags); ++end_ok: ++ ++ acx_sem_unlock(adev); ++#endif /* ACX_DEBUG */ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx100mem_ioctl_set_phy_amp_bias( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ u16 gpio_old; ++ ++ if (!IS_ACX100(adev)) { ++ /* WARNING!!! ++ * Removing this check *might* damage ++ * hardware, since we're tweaking GPIOs here after all!!! ++ * You've been warned... ++ * WARNING!!! */ ++ printk("acx: sorry, setting bias level for non-acx100 " ++ "is not supported yet\n"); ++ return OK; ++ } ++ ++ if (*extra > 7) { ++ printk("acx: invalid bias parameter, range is 0-7\n"); ++ return -EINVAL; ++ } ++ ++ acx_sem_lock(adev); ++ ++ /* Need to lock accesses to [IO_ACX_GPIO_OUT]: ++ * IRQ handler uses it to update LED */ ++ acx_lock(adev, flags); ++ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT); ++ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8)); ++ acx_unlock(adev, flags); ++ ++ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old); ++ printk("%s: PHY power amplifier bias: old:%d, new:%d\n", ++ ndev->name, ++ (gpio_old & 0x0700) >> 8, (unsigned char)*extra); ++ ++ acx_sem_unlock(adev); ++ ++ return OK; ++} ++ ++/*************************************************************** ++** acxmem_l_alloc_tx ++** Actually returns a txdesc_t* ptr ++** ++** FIXME: in case of fragments, should allocate multiple descrs ++** after figuring out how many we need and whether we still have ++** sufficiently many. ++*/ ++tx_t* ++acxmem_l_alloc_tx(acx_device_t *adev) ++{ ++ struct txdesc *txdesc; ++ unsigned head; ++ u8 ctl8; ++ static int txattempts = 0; ++ ++ FN_ENTER; ++ ++ if (unlikely(!adev->tx_free)) { ++ printk("acx: BUG: no free txdesc left\n"); ++ /* ++ * Probably the ACX ignored a transmit attempt and now there's a packet ++ * sitting in the queue we think should be transmitting but the ACX doesn't ++ * know about. ++ * On the first pass, send the ACX a TxProc interrupt to try moving ++ * things along, and if that doesn't work (ie, we get called again) completely ++ * flush the transmit queue. ++ */ ++ if (txattempts < 10) { ++ txattempts++; ++ printk ("acx: trying to wake up ACX\n"); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC); ++ write_flush(adev); } ++ else { ++ txattempts = 0; ++ printk ("acx: flushing transmit queue.\n"); ++ acxmem_l_clean_txdesc_emergency (adev); ++ } ++ txdesc = NULL; ++ goto end; ++ } ++ ++ /* ++ * Make a quick check to see if there is transmit buffer space on ++ * the ACX. This can't guarantee there is enough space for the packet ++ * since we don't yet know how big it is, but it will prevent at least some ++ * annoyances. ++ */ ++ if (!adev->acx_txbuf_blocks_free) { ++ txdesc = NULL; ++ goto end; ++ } ++ ++ head = adev->tx_head; ++ /* ++ * txdesc points to ACX memory ++ */ ++ txdesc = get_txdesc(adev, head); ++ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ ++ /* ++ * If we don't own the buffer (HOSTOWN) it is certainly not free; however, ++ * we may have previously thought we had enough memory to send ++ * a packet, allocated the buffer then gave up when we found not enough ++ * transmit buffer space on the ACX. In that case, HOSTOWN and ++ * ACXDONE will both be set. ++ */ ++ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) { ++ /* whoops, descr at current index is not free, so probably ++ * ring buffer already full */ ++ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find " ++ "free txdesc\n", head, ctl8); ++ txdesc = NULL; ++ goto end; ++ } ++ ++ /* Needed in case txdesc won't be eventually submitted for tx */ ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN); ++ ++ adev->tx_free--; ++ log(L_BUFT, "tx: got desc %u, %u remain\n", ++ head, adev->tx_free); ++ /* Keep a few free descs between head and tail of tx ring. ++ ** It is not absolutely needed, just feels safer */ ++ if (adev->tx_free < TX_STOP_QUEUE) { ++ log(L_BUF, "stop queue (%u tx desc left)\n", ++ adev->tx_free); ++ acx_stop_queue(adev->ndev, NULL); ++ } ++ ++ /* returning current descriptor, so advance to next free one */ ++ adev->tx_head = (head + 1) % TX_CNT; ++end: ++ FN_EXIT0; ++ ++ return (tx_t*)txdesc; ++} ++ ++ ++/*************************************************************** ++** acxmem_l_dealloc_tx ++** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque); ++ transmit descriptor. The ACX ++** can get confused if we skip transmit descriptors in the queue, ++** so when we don't need a descriptor return it to its original ++** state and move the queue head pointer back. ++** ++*/ ++void ++acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque) ++{ ++ /* ++ * txdesc is the address of the descriptor on the ACX. ++ */ ++ txdesc_t *txdesc = (txdesc_t*)tx_opaque; ++ txdesc_t tmptxdesc; ++ int index; ++ ++ memset (&tmptxdesc, 0, sizeof(tmptxdesc)); ++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG; ++ tmptxdesc.u.r1.rate = 0x0a; ++ ++ /* ++ * Clear out all of the transmit descriptor except for the next pointer ++ */ ++ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr), ++ (u8 *) &(tmptxdesc.HostMemPtr), ++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)); ++ ++ /* ++ * This is only called immediately after we've allocated, so we should ++ * be able to set the head back to this descriptor. ++ */ ++ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size; ++ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index); ++ adev->tx_head = index; ++} ++ ++ ++/*********************************************************************** ++*/ ++void* ++acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque) ++{ ++ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data; ++} ++ ++ ++/*********************************************************************** ++** acxmem_l_tx_data ++** ++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx). ++** Can be called from acx_i_start_xmit (data frames from net core). ++** ++** FIXME: in case of fragments, should loop over the number of ++** pre-allocated tx descrs, properly setting up transfer data and ++** CTL_xxx flags according to fragment number. ++*/ ++void ++acxmem_update_queue_indicator (acx_device_t *adev, int txqueue) ++{ ++#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE ++ u32 indicator; ++ unsigned long flags; ++ int count; ++ ++ /* ++ * Can't handle an interrupt while we're fiddling with the ACX's lock, ++ * according to TI. The ACX is supposed to hold fw_lock for at most ++ * 500ns. ++ */ ++ local_irq_save (flags); ++ ++ /* ++ * Wait for ACX to release the lock (at most 500ns). ++ */ ++ count = 0; ++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock)) ++ && (count++ < 50)) { ++ ndelay (10); ++ } ++ if (count < 50) { ++ ++ /* ++ * Take out the host lock - anything non-zero will work, so don't worry about ++ * be/le ++ */ ++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1); ++ ++ /* ++ * Avoid a race condition ++ */ ++ count = 0; ++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock)) ++ && (count++ < 50)) { ++ ndelay (10); ++ } ++ ++ if (count < 50) { ++ /* ++ * Mark the queue active ++ */ ++ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator)); ++ indicator |= cpu_to_le32 (1 << txqueue); ++ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator); ++ } ++ ++ /* ++ * Release the host lock ++ */ ++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0); ++ ++ } ++ ++ /* ++ * Restore interrupts ++ */ ++ local_irq_restore (flags); ++#endif ++} ++ ++void ++acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len) ++{ ++ /* ++ * txdesc is the address on the ACX ++ */ ++ txdesc_t *txdesc = (txdesc_t*)tx_opaque; ++ txhostdesc_t *hostdesc1, *hostdesc2; ++ client_t *clt; ++ u16 rate_cur; ++ u8 Ctl_8, Ctl2_8; ++ u32 addr; ++ ++ FN_ENTER; ++ /* fw doesn't tx such packets anyhow */ ++ if (unlikely(len < WLAN_HDR_A3_LEN)) ++ goto end; ++ ++ hostdesc1 = get_txhostdesc(adev, txdesc); ++ /* modify flag status in separate variable to be able to write it back ++ * in one big swoop later (also in order to have less device memory ++ * accesses) */ ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */ ++ ++ hostdesc2 = hostdesc1 + 1; ++ ++ /* DON'T simply set Ctl field to 0 here globally, ++ * it needs to maintain a consistent flag status (those are state flags!!), ++ * otherwise it may lead to severe disruption. Only set or reset particular ++ * flags at the exact moment this is needed... */ ++ ++ /* let chip do RTS/CTS handshaking before sending ++ * in case packet size exceeds threshold */ ++ if (len > adev->rts_threshold) ++ SET_BIT(Ctl2_8, DESC_CTL2_RTS); ++ else ++ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS); ++ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_3_AP: ++ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1); ++ break; ++ case ACX_MODE_2_STA: ++ clt = adev->ap_client; ++ break; ++#if 0 ++/* testing was done on acx111: */ ++ case ACX_MODE_MONITOR: ++ SET_BIT(Ctl2_8, 0 ++/* sends CTS to self before packet */ ++ + DESC_CTL2_SEQ /* don't increase sequence field */ ++/* not working (looks like good fcs is still added) */ ++ + DESC_CTL2_FCS /* don't add the FCS */ ++/* not tested */ ++ + DESC_CTL2_MORE_FRAG ++/* not tested */ ++ + DESC_CTL2_RETRY /* don't increase retry field */ ++/* not tested */ ++ + DESC_CTL2_POWER /* don't increase power mgmt. field */ ++/* no effect */ ++ + DESC_CTL2_WEP /* encrypt this frame */ ++/* not tested */ ++ + DESC_CTL2_DUR /* don't increase duration field */ ++ ); ++ /* fallthrough */ ++#endif ++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */ ++ clt = NULL; ++ break; ++ } ++ ++ rate_cur = clt ? clt->rate_cur : adev->rate_bcast; ++ if (unlikely(!rate_cur)) { ++ printk("acx: driver bug! bad ratemask\n"); ++ goto end; ++ } ++ ++ /* used in tx cleanup routine for auto rate and accounting: */ ++ put_txcr(adev, txdesc, clt, rate_cur); ++ ++ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len)); ++ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN); ++ if (IS_ACX111(adev)) { ++ /* note that if !txdesc->do_auto, txrate->cur ++ ** has only one nonzero bit */ ++ txdesc->u.r2.rate111 = cpu_to_le16( ++ rate_cur ++ /* WARNING: I was never able to make it work with prism54 AP. ++ ** It was falling down to 1Mbit where shortpre is not applicable, ++ ** and not working at all at "5,11 basic rates only" setting. ++ ** I even didn't see tx packets in radio packet capture. ++ ** Disabled for now --vda */ ++ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */ ++ ); ++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS ++ /* should add this to rate111 above as necessary */ ++ | (clt->pbcc511 ? RATE111_PBCC511 : 0) ++#endif ++ hostdesc1->length = cpu_to_le16(len); ++ } else { /* ACX100 */ ++ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100; ++ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100); ++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS ++ if (clt->pbcc511) { ++ if (n == RATE100_5 || n == RATE100_11) ++ n |= RATE100_PBCC511; ++ } ++ ++ if (clt->shortpre && (clt->cur != RATE111_1)) ++ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */ ++#endif ++ /* set autodma and reclaim and 1st mpdu */ ++ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG); ++ ++#if ACX_FRAGMENTATION ++ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */ ++#endif ++ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN); ++ ++ /* ++ * Since we're not using autodma copy the packet data to the acx now. ++ * Even host descriptors point to the packet header, and the odd indexed ++ * descriptor following points to the packet data. ++ * ++ * The first step is to find free memory in the ACX transmit buffers. ++ * They don't necessarily map one to one with the transmit queue entries, ++ * so search through them starting just after the last one used. ++ */ ++ addr = allocate_acx_txbuf_space (adev, len); ++ if (addr) { ++ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len); ++ } ++ else { ++ /* ++ * Bummer. We thought we might have enough room in the transmit ++ * buffers to send this packet, but it turns out we don't. alloc_tx ++ * has already marked this transmit descriptor as HOSTOWN and ACXDONE, ++ * which means the ACX will hang when it gets to this descriptor unless ++ * we do something about it. Having a bubble in the transmit queue just ++ * doesn't seem to work, so we have to reset this transmit queue entry's ++ * state to its original value and back up our head pointer to point ++ * back to this entry. ++ */ ++ hostdesc1->length = 0; ++ hostdesc2->length = 0; ++ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG); ++ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size; ++ goto end; ++ } ++ /* ++ * Tell the ACX where the packet is. ++ */ ++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr); ++ ++ } ++ /* don't need to clean ack/rts statistics here, already ++ * done on descr cleanup */ ++ ++ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors ++ * are now owned by the acx100; do this as LAST operation */ ++ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN); ++ /* flush writes before we release hostdesc to the adapter here */ ++ //wmb(); ++ ++ /* write back modified flags */ ++ /* ++ * At this point Ctl_8 should just be FIRSTFRAG ++ */ ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8); ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8); ++ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */ ++ ++ /* ++ * Update the queue indicator to say there's data on the first queue. ++ */ ++ acxmem_update_queue_indicator (adev, 0); ++ ++ /* flush writes before we tell the adapter that it's its turn now */ ++ mmiowb(); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC); ++ write_flush(adev); ++ ++ /* log the packet content AFTER sending it, ++ * in order to not delay sending any further than absolutely needed ++ * Do separate logs for acx100/111 to have human-readable rates */ ++ if (unlikely(acx_debug & (L_XFER|L_DATA))) { ++ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc; ++ if (IS_ACX111(adev)) ++ printk("tx: pkt (%s): len %d " ++ "rate %04X%s status %u\n", ++ acx_get_packet_type_string(le16_to_cpu(fc)), len, ++ le16_to_cpu(txdesc->u.r2.rate111), ++ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "", ++ adev->status); ++ else ++ printk("tx: pkt (%s): len %d rate %03u%s status %u\n", ++ acx_get_packet_type_string(fc), len, ++ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)), ++ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "", ++ adev->status); ++ ++ if (acx_debug & L_DATA) { ++ printk("tx: 802.11 [%d]: ", len); ++ acx_dump_bytes(hostdesc1->data, len); ++ } ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_l_clean_txdesc ++** ++** This function resets the txdescs' status when the ACX100 ++** signals the TX done IRQ (txdescs have been processed), starting with ++** the pool index of the descriptor which we would use next, ++** in order to make sure that we can be as fast as possible ++** in filling new txdescs. ++** Everytime we get called we know where the next packet to be cleaned is. ++*/ ++ ++#if !ACX_DEBUG ++static inline void log_txbuffer(const acx_device_t *adev) {} ++#else ++static void ++log_txbuffer(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ int i; ++ u8 Ctl_8; ++ ++ /* no FN_ENTER here, we don't want that */ ++ /* no locks here, since it's entirely non-critical code */ ++ txdesc = adev->txdesc_start; ++ if (unlikely(!txdesc)) return; ++ printk("tx: desc->Ctl8's:"); ++ for (i = 0; i < TX_CNT; i++) { ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ printk(" %02X", Ctl_8); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ printk("\n"); ++} ++#endif ++ ++ ++static void ++handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger) ++{ ++ const char *err = "unknown error"; ++ ++ /* hmm, should we handle this as a mask ++ * of *several* bits? ++ * For now I think only caring about ++ * individual bits is ok... */ ++ switch (error) { ++ case 0x01: ++ err = "no Tx due to error in other fragment"; ++ adev->wstats.discard.fragment++; ++ break; ++ case 0x02: ++ err = "Tx aborted"; ++ adev->stats.tx_aborted_errors++; ++ break; ++ case 0x04: ++ err = "Tx desc wrong parameters"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x08: ++ err = "WEP key not found"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x10: ++ err = "MSDU lifetime timeout? - try changing " ++ "'iwconfig retry lifetime XXX'"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x20: ++ err = "excessive Tx retries due to either distance " ++ "too high or unable to Tx or Tx frame error - " ++ "try changing 'iwconfig txpower XXX' or " ++ "'sens'itivity or 'retry'"; ++ adev->wstats.discard.retries++; ++ /* Tx error 0x20 also seems to occur on ++ * overheating, so I'm not sure whether we ++ * actually want to do aggressive radio recalibration, ++ * since people maybe won't notice then that their hardware ++ * is slowly getting cooked... ++ * Or is it still a safe long distance from utter ++ * radio non-functionality despite many radio recalibs ++ * to final destructive overheating of the hardware? ++ * In this case we really should do recalib here... ++ * I guess the only way to find out is to do a ++ * potentially fatal self-experiment :-\ ++ * Or maybe only recalib in case we're using Tx ++ * rate auto (on errors switching to lower speed ++ * --> less heat?) or 802.11 power save mode? ++ * ++ * ok, just do it. */ ++ if (++adev->retry_errors_msg_ratelimit % 4 == 0) { ++ if (adev->retry_errors_msg_ratelimit <= 20) { ++ printk("%s: several excessive Tx " ++ "retry errors occurred, attempting " ++ "to recalibrate radio. Radio " ++ "drift might be caused by increasing " ++ "card temperature, please check the card " ++ "before it's too late!\n", ++ adev->ndev->name); ++ if (adev->retry_errors_msg_ratelimit == 20) ++ printk("disabling above message\n"); ++ } ++ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ } ++ break; ++ case 0x40: ++ err = "Tx buffer overflow"; ++ adev->stats.tx_fifo_errors++; ++ break; ++ case 0x80: ++ err = "DMA error"; ++ adev->wstats.discard.misc++; ++ break; ++ } ++ adev->stats.tx_errors++; ++ if (adev->stats.tx_errors <= 20) ++ printk("%s: tx error 0x%02X, buf %02u! (%s)\n", ++ adev->ndev->name, error, finger, err); ++ else ++ printk("%s: tx error 0x%02X, buf %02u!\n", ++ adev->ndev->name, error, finger); ++} ++ ++ ++unsigned int ++acxmem_l_clean_txdesc(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ unsigned finger; ++ int num_cleaned; ++ u16 r111; ++ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8; ++ u32 acxmem; ++ txdesc_t tmptxdesc; ++ ++ FN_ENTER; ++ ++ /* ++ * Set up a template descriptor for re-initialization. The only ++ * things that get set are Ctl_8 and the rate, and the rate defaults ++ * to 1Mbps. ++ */ ++ memset (&tmptxdesc, 0, sizeof (tmptxdesc)); ++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG; ++ tmptxdesc.u.r1.rate = 0x0a; ++ ++ if (unlikely(acx_debug & L_DEBUG)) ++ log_txbuffer(adev); ++ ++ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail); ++ ++ /* We know first descr which is not free yet. We advance it as far ++ ** as we see correct bits set in following descs (if next desc ++ ** is NOT free, we shouldn't advance at all). We know that in ++ ** front of tx_tail may be "holes" with isolated free descs. ++ ** We will catch up when all intermediate descs will be freed also */ ++ ++ finger = adev->tx_tail; ++ num_cleaned = 0; ++ while (likely(finger != adev->tx_head)) { ++ txdesc = get_txdesc(adev, finger); ++ ++ /* If we allocated txdesc on tx path but then decided ++ ** to NOT use it, then it will be left as a free "bubble" ++ ** in the "allocated for tx" part of the ring. ++ ** We may meet it on the next ring pass here. */ ++ ++ /* stop if not marked as "tx finished" and "host owned" */ ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN) ++ != DESC_CTL_ACXDONE_HOSTOWN) { ++ if (unlikely(!num_cleaned)) { /* maybe remove completely */ ++ log(L_BUFT, "clean_txdesc: tail isn't free. " ++ "tail:%d head:%d\n", ++ adev->tx_tail, adev->tx_head); ++ } ++ break; ++ } ++ ++ /* remember desc values... */ ++ error = read_slavemem8 (adev, (u32) &(txdesc->error)); ++ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures)); ++ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures)); ++ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok)); ++ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)); ++ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111))); ++ ++ /* need to check for certain error conditions before we ++ * clean the descriptor: we still need valid descr data here */ ++ if (unlikely(0x30 & error)) { ++ /* only send IWEVTXDROP in case of retry or lifetime exceeded; ++ * all other errors mean we screwed up locally */ ++ union iwreq_data wrqu; ++ wlan_hdr_t *hdr; ++ txhostdesc_t *hostdesc; ++ ++ hostdesc = get_txhostdesc(adev, txdesc); ++ hdr = (wlan_hdr_t *)hostdesc->data; ++ MAC_COPY(wrqu.addr.sa_data, hdr->a1); ++ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL); ++ } ++ ++ /* ++ * Free up the transmit data buffers ++ */ ++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr)); ++ if (acxmem) { ++ reclaim_acx_txbuf_space (adev, acxmem); ++ } ++ ++ /* ...and free the desc by clearing all the fields ++ except the next pointer */ ++ copy_to_slavemem (adev, ++ (u32) &(txdesc->HostMemPtr), ++ (u8 *) &(tmptxdesc.HostMemPtr), ++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc) ++ ); ++ ++ adev->tx_free++; ++ num_cleaned++; ++ ++ if ((adev->tx_free >= TX_START_QUEUE) ++ && (adev->status == ACX_STATUS_4_ASSOCIATED) ++ && (acx_queue_stopped(adev->ndev)) ++ ) { ++ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n", ++ adev->tx_free); ++ acx_wake_queue(adev->ndev, NULL); ++ } ++ ++ /* do error checking, rate handling and logging ++ * AFTER having done the work, it's faster */ ++ ++ /* do rate handling */ ++ if (adev->rate_auto) { ++ struct client *clt = get_txc(adev, txdesc); ++ if (clt) { ++ u16 cur = get_txr(adev, txdesc); ++ if (clt->rate_cur == cur) { ++ acx_l_handle_txrate_auto(adev, clt, ++ cur, /* intended rate */ ++ r100, r111, /* actually used rate */ ++ (error & 0x30), /* was there an error? */ ++ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free); ++ } ++ } ++ } ++ ++ if (unlikely(error)) ++ handle_tx_error(adev, error, finger); ++ ++ if (IS_ACX111(adev)) ++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n", ++ finger, ack_failures, rts_failures, rts_ok, r111); ++ else ++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n", ++ finger, ack_failures, rts_failures, rts_ok, r100); ++ ++ /* update pointer for descr to be cleaned next */ ++ finger = (finger + 1) % TX_CNT; ++ } ++ ++ /* remember last position */ ++ adev->tx_tail = finger; ++/* end: */ ++ FN_EXIT1(num_cleaned); ++ return num_cleaned; ++} ++ ++/* clean *all* Tx descriptors, and regardless of their previous state. ++ * Used for brute-force reset handling. */ ++void ++acxmem_l_clean_txdesc_emergency(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ int i; ++ u32 acxmem; ++ ++ FN_ENTER; ++ ++ for (i = 0; i < TX_CNT; i++) { ++ txdesc = get_txdesc(adev, i); ++ ++ /* free it */ ++ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->error), 0); ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN); ++ ++ /* ++ * Clean up the memory allocated on the ACX for this transmit descriptor. ++ */ ++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr)); ++ if (acxmem) { ++ reclaim_acx_txbuf_space (adev, acxmem); ++ } ++ ++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0); ++ } ++ ++ adev->tx_free = TX_CNT; ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxmem_s_create_tx_host_desc_queue ++*/ ++ ++static void* ++allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg) ++{ ++ void *ptr; ++ ptr = kmalloc (size, GFP_KERNEL); ++ /* ++ * The ACX can't use the physical address, so we'll have to fake it ++ * later and it might be handy to have the virtual address. ++ */ ++ *phy = (dma_addr_t) NULL; ++ ++ if (ptr) { ++ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n", ++ msg, (int)size, ptr, (unsigned long long)*phy); ++ memset(ptr, 0, size); ++ return ptr; ++ } ++ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n", ++ msg, (int)size); ++ return NULL; ++} ++ ++ ++/* ++ * In the generic slave memory access mode, most of the stuff in ++ * the txhostdesc_t is unused. It's only here because the rest of ++ * the ACX driver expects it to be since the PCI version uses indirect ++ * host memory organization with DMA. Since we're not using DMA the ++ * only use we have for the host descriptors is to store the packets ++ * on the way out. ++ */ ++static int ++acxmem_s_create_tx_host_desc_queue(acx_device_t *adev) ++{ ++ txhostdesc_t *hostdesc; ++ u8 *txbuf; ++ int i; ++ ++ FN_ENTER; ++ ++ /* allocate TX buffer */ ++ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS; ++ ++ adev->txbuf_start = allocate(adev, adev->txbuf_area_size, ++ &adev->txbuf_startphy, "txbuf_start"); ++ if (!adev->txbuf_start) ++ goto fail; ++ ++ /* allocate the TX host descriptor queue pool */ ++ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc); ++ ++ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size, ++ &adev->txhostdesc_startphy, "txhostdesc_start"); ++ if (!adev->txhostdesc_start) ++ goto fail; ++ ++ /* check for proper alignment of TX host descriptor pool */ ++ if ((long) adev->txhostdesc_start & 3) { ++ printk("acx: driver bug: dma alloc returns unaligned address\n"); ++ goto fail; ++ } ++ ++ hostdesc = adev->txhostdesc_start; ++ txbuf = adev->txbuf_start; ++ ++#if 0 ++/* Each tx buffer is accessed by hardware via ++** txdesc -> txhostdesc(s) -> txbuffer(s). ++** We use only one txhostdesc per txdesc, but it looks like ++** acx111 is buggy: it accesses second txhostdesc ++** (via hostdesc.desc_phy_next field) even if ++** txdesc->length == hostdesc->length and thus ++** entire packet was placed into first txhostdesc. ++** Due to this bug acx111 hangs unless second txhostdesc ++** has le16_to_cpu(hostdesc.length) = 3 (or larger) ++** Storing NULL into hostdesc.desc_phy_next ++** doesn't seem to help. ++** ++** Update: although it worked on Xterasys XN-2522g ++** with len=3 trick, WG311v2 is even more bogus, doesn't work. ++** Keeping this code (#ifdef'ed out) for documentational purposes. ++*/ ++ for (i = 0; i < TX_CNT*2; i++) { ++ hostdesc_phy += sizeof(*hostdesc); ++ if (!(i & 1)) { ++ hostdesc->data_phy = cpu2acx(txbuf_phy); ++ /* hostdesc->data_offset = ... */ ++ /* hostdesc->reserved = ... */ ++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN); ++ /* hostdesc->length = ... */ ++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy); ++ hostdesc->pNext = ptr2acx(NULL); ++ /* hostdesc->Status = ... */ ++ /* below: non-hardware fields */ ++ hostdesc->data = txbuf; ++ ++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS; ++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS; ++ } else { ++ /* hostdesc->data_phy = ... */ ++ /* hostdesc->data_offset = ... */ ++ /* hostdesc->reserved = ... */ ++ /* hostdesc->Ctl_16 = ... */ ++ hostdesc->length = cpu_to_le16(3); /* bug workaround */ ++ /* hostdesc->desc_phy_next = ... */ ++ /* hostdesc->pNext = ... */ ++ /* hostdesc->Status = ... */ ++ /* below: non-hardware fields */ ++ /* hostdesc->data = ... */ ++ } ++ hostdesc++; ++ } ++#endif ++/* We initialize two hostdescs so that they point to adjacent ++** memory areas. Thus txbuf is really just a contiguous memory area */ ++ for (i = 0; i < TX_CNT*2; i++) { ++ /* ->data is a non-hardware field: */ ++ hostdesc->data = txbuf; ++ ++ if (!(i & 1)) { ++ txbuf += WLAN_HDR_A3_LEN; ++ } else { ++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN; ++ } ++ hostdesc++; ++ } ++ hostdesc--; ++ ++ FN_EXIT1(OK); ++ return OK; ++fail: ++ printk("acx: create_tx_host_desc_queue FAILED\n"); ++ /* dealloc will be done by free function on error case */ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*************************************************************** ++** acxmem_s_create_rx_host_desc_queue ++*/ ++/* the whole size of a data buffer (header plus data body) ++ * plus 32 bytes safety offset at the end */ ++#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32) ++ ++static int ++acxmem_s_create_rx_host_desc_queue(acx_device_t *adev) ++{ ++ rxhostdesc_t *hostdesc; ++ rxbuffer_t *rxbuf; ++ int i; ++ ++ FN_ENTER; ++ ++ /* allocate the RX host descriptor queue pool */ ++ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc); ++ ++ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size, ++ &adev->rxhostdesc_startphy, "rxhostdesc_start"); ++ if (!adev->rxhostdesc_start) ++ goto fail; ++ ++ /* check for proper alignment of RX host descriptor pool */ ++ if ((long) adev->rxhostdesc_start & 3) { ++ printk("acx: driver bug: dma alloc returns unaligned address\n"); ++ goto fail; ++ } ++ ++ /* allocate Rx buffer pool which will be used by the acx ++ * to store the whole content of the received frames in it */ ++ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE; ++ ++ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size, ++ &adev->rxbuf_startphy, "rxbuf_start"); ++ if (!adev->rxbuf_start) ++ goto fail; ++ ++ rxbuf = adev->rxbuf_start; ++ hostdesc = adev->rxhostdesc_start; ++ ++ /* don't make any popular C programming pointer arithmetic mistakes ++ * here, otherwise I'll kill you... ++ * (and don't dare asking me why I'm warning you about that...) */ ++ for (i = 0; i < RX_CNT; i++) { ++ hostdesc->data = rxbuf; ++ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE); ++ rxbuf++; ++ hostdesc++; ++ } ++ hostdesc--; ++ FN_EXIT1(OK); ++ return OK; ++fail: ++ printk("acx: create_rx_host_desc_queue FAILED\n"); ++ /* dealloc will be done by free function on error case */ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*************************************************************** ++** acxmem_s_create_hostdesc_queues ++*/ ++int ++acxmem_s_create_hostdesc_queues(acx_device_t *adev) ++{ ++ int result; ++ result = acxmem_s_create_tx_host_desc_queue(adev); ++ if (OK != result) return result; ++ result = acxmem_s_create_rx_host_desc_queue(adev); ++ return result; ++} ++ ++ ++/*************************************************************** ++** acxmem_create_tx_desc_queue ++*/ ++static void ++acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start) ++{ ++ txdesc_t *txdesc; ++ u32 clr; ++ int i; ++ ++ FN_ENTER; ++ ++ if (IS_ACX100(adev)) ++ adev->txdesc_size = sizeof(*txdesc); ++ else ++ /* the acx111 txdesc is 4 bytes larger */ ++ adev->txdesc_size = sizeof(*txdesc) + 4; ++ ++ /* ++ * This refers to an ACX address, not one of ours ++ */ ++ adev->txdesc_start = (txdesc_t *) tx_queue_start; ++ ++ log(L_DEBUG, "adev->txdesc_start=%p\n", ++ adev->txdesc_start); ++ ++ adev->tx_free = TX_CNT; ++ /* done by memset: adev->tx_head = 0; */ ++ /* done by memset: adev->tx_tail = 0; */ ++ txdesc = adev->txdesc_start; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111 has a preinitialized Tx buffer! */ ++ /* loop over whole send pool */ ++ /* FIXME: do we have to do the hostmemptr stuff here?? */ ++ for (i = 0; i < TX_CNT; i++) { ++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN; ++ /* reserve two (hdr desc and payload desc) */ ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ } else { ++ /* ACX100 Tx buffer needs to be initialized by us */ ++ /* clear whole send pool. sizeof is safe here (we are acx100) */ ++ ++ /* ++ * adev->txdesc_start refers to device memory, so we can't write ++ * directly to it. ++ */ ++ clr = (u32) adev->txdesc_start; ++ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) { ++ write_slavemem32 (adev, clr, 0); ++ clr += 4; ++ } ++ ++ /* loop over whole send pool */ ++ for (i = 0; i < TX_CNT; i++) { ++ log(L_DEBUG, "configure card tx descriptor: 0x%p, " ++ "size: 0x%X\n", txdesc, adev->txdesc_size); ++ ++ /* initialise ctl */ ++ /* ++ * No auto DMA here ++ */ ++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), ++ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG)); ++ /* done by memset(0): txdesc->Ctl2_8 = 0; */ ++ ++ /* point to next txdesc */ ++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc), ++ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size)); ++ ++ /* go to the next one */ ++ /* ++ is safe here (we are acx100) */ ++ txdesc++; ++ } ++ /* go back to the last one */ ++ txdesc--; ++ /* and point to the first making it a ring buffer */ ++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc), ++ (u32) cpu_to_le32 (tx_queue_start)); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxmem_create_rx_desc_queue ++*/ ++static void ++acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start) ++{ ++ rxdesc_t *rxdesc; ++ u32 mem_offs; ++ int i; ++ ++ FN_ENTER; ++ ++ /* done by memset: adev->rx_tail = 0; */ ++ ++ /* ACX111 doesn't need any further config: preconfigures itself. ++ * Simply print ring buffer for debugging */ ++ if (IS_ACX111(adev)) { ++ /* rxdesc_start already set here */ ++ ++ adev->rxdesc_start = (rxdesc_t *) rx_queue_start; ++ ++ rxdesc = adev->rxdesc_start; ++ for (i = 0; i < RX_CNT; i++) { ++ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc); ++ rxdesc = adev->rxdesc_start = (rxdesc_t *) ++ acx2cpu(rxdesc->pNextDesc); ++ } ++ } else { ++ /* we didn't pre-calculate rxdesc_start in case of ACX100 */ ++ /* rxdesc_start should be right AFTER Tx pool */ ++ adev->rxdesc_start = (rxdesc_t *) ++ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t))); ++ /* NB: sizeof(txdesc_t) above is valid because we know ++ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere! ++ ** acx111's txdesc is larger! */ ++ ++ mem_offs = (u32) adev->rxdesc_start; ++ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) { ++ write_slavemem32 (adev, mem_offs, 0); ++ mem_offs += 4; ++ } ++ ++ /* loop over whole receive pool */ ++ rxdesc = adev->rxdesc_start; ++ for (i = 0; i < RX_CNT; i++) { ++ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc); ++ /* point to next rxdesc */ ++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc), ++ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc))); ++ /* go to the next one */ ++ rxdesc++; ++ } ++ /* go to the last one */ ++ rxdesc--; ++ ++ /* and point to the first making it a ring buffer */ ++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc), ++ (u32) cpu_to_le32 (rx_queue_start)); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxmem_create_desc_queues ++*/ ++void ++acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start) ++{ ++ u32 *p; ++ int i; ++ ++ acxmem_create_tx_desc_queue(adev, tx_queue_start); ++ acxmem_create_rx_desc_queue(adev, rx_queue_start); ++ p = (u32 *) adev->acx_queue_indicator; ++ for (i = 0; i < 4; i++) { ++ write_slavemem32 (adev, (u32) p, 0); ++ p++; ++ } ++} ++ ++ ++/*************************************************************** ++** acxmem_s_proc_diag_output ++*/ ++char* ++acxmem_s_proc_diag_output(char *p, acx_device_t *adev) ++{ ++ const char *rtl, *thd, *ttl; ++ txdesc_t *txdesc; ++ u8 Ctl_8; ++ rxdesc_t *rxdesc; ++ int i; ++ u32 tmp; ++ txdesc_t txd; ++ u8 buf[0x200]; ++ int j, k; ++ ++ FN_ENTER; ++ ++#if DUMP_MEM_DURING_DIAG > 0 ++ dump_acxmem (adev, 0, 0x10000); ++ panic ("dump finished"); ++#endif ++ ++ p += sprintf(p, "** Rx buf **\n"); ++ rxdesc = adev->rxdesc_start; ++ if (rxdesc) for (i = 0; i < RX_CNT; i++) { ++ rtl = (i == adev->rx_tail) ? " [tail]" : ""; ++ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8)); ++ if (Ctl_8 & DESC_CTL_HOSTOWN) ++ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl); ++ else ++ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl); ++ rxdesc++; ++ } ++ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free, ++ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running"); ++ ++ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n", ++ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free); ++ txdesc = adev->txdesc_start; ++ if (txdesc) { ++ for (i = 0; i < TX_CNT; i++) { ++ thd = (i == adev->tx_head) ? " [head]" : ""; ++ ttl = (i == adev->tx_tail) ? " [tail]" : ""; ++ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd)); ++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8)); ++ if (Ctl_8 & DESC_CTL_ACXDONE) ++ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl); ++ else if (Ctl_8 & DESC_CTL_HOSTOWN) ++ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl); ++ else ++ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl); ++ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr)); ++ if (tmp) { ++ p += sprintf (p, " %04x", tmp); ++ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) { ++ tmp <<= 5; ++ p += sprintf (p, " %04x", tmp); ++ } ++ } ++ p += sprintf (p, "\n"); ++ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n" ++ "%02x %02x %02x %02x %04x\n", ++ (u32) txdesc, ++ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time, ++ txd.total_length, txd.Reserved, ++ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3], ++ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures, ++ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl, ++ txd.queue_info ++ ); ++ if (txd.AcxMemPtr.v) { ++ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf)); ++ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) { ++ p += sprintf (p, " "); ++ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) { ++ p += sprintf (p, " %02x", buf[j+k+4]); ++ } ++ p += sprintf (p, "\n"); ++ } ++ } ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ } ++ ++ p += sprintf(p, ++ "\n" ++ "** Generic slave data **\n" ++ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n" ++ "txbuf_start 0x%p, txbuf_area_size %u\n" ++ "txdesc_size %u, txdesc_start 0x%p\n" ++ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n" ++ "txbuf start 0x%04x, txbuf size %d\n" ++ "rxdesc_start 0x%p\n" ++ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n" ++ "rxbuf_start 0x%p, rxbuf_area_size %u\n", ++ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES), ++ adev->txbuf_start, adev->txbuf_area_size, ++ adev->txdesc_size, adev->txdesc_start, ++ adev->txhostdesc_start, adev->txhostdesc_area_size, ++ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize, ++ adev->rxdesc_start, ++ adev->rxhostdesc_start, adev->rxhostdesc_area_size, ++ adev->rxbuf_start, adev->rxbuf_area_size); ++ FN_EXIT0; ++ return p; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxmem_proc_eeprom_output(char *buf, acx_device_t *adev) ++{ ++ char *p = buf; ++ int i; ++ ++ FN_ENTER; ++ ++ for (i = 0; i < 0x400; i++) { ++ acxmem_read_eeprom_byte(adev, i, p++); ++ } ++ ++ FN_EXIT1(p - buf); ++ return p - buf; ++} ++ ++ ++/*********************************************************************** ++*/ ++void ++acxmem_set_interrupt_mask(acx_device_t *adev) ++{ ++ if (IS_ACX111(adev)) { ++ adev->irq_mask = (u16) ~(0 ++ | HOST_INT_RX_DATA ++ | HOST_INT_TX_COMPLETE ++ /* | HOST_INT_TX_XFER */ ++ /* | HOST_INT_RX_COMPLETE */ ++ /* | HOST_INT_DTIM */ ++ /* | HOST_INT_BEACON */ ++ /* | HOST_INT_TIMER */ ++ /* | HOST_INT_KEY_NOT_FOUND */ ++ | HOST_INT_IV_ICV_FAILURE ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ | HOST_INT_OVERFLOW ++ /* | HOST_INT_PROCESS_ERROR */ ++ | HOST_INT_SCAN_COMPLETE ++ | HOST_INT_FCS_THRESHOLD ++ | HOST_INT_UNKNOWN ++ ); ++ /* Or else acx100 won't signal cmd completion, right? */ ++ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */ ++ } else { ++ adev->irq_mask = (u16) ~(0 ++ | HOST_INT_RX_DATA ++ | HOST_INT_TX_COMPLETE ++ /* | HOST_INT_TX_XFER */ ++ /* | HOST_INT_RX_COMPLETE */ ++ /* | HOST_INT_DTIM */ ++ /* | HOST_INT_BEACON */ ++ /* | HOST_INT_TIMER */ ++ /* | HOST_INT_KEY_NOT_FOUND */ ++ /* | HOST_INT_IV_ICV_FAILURE */ ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ /* | HOST_INT_OVERFLOW */ ++ /* | HOST_INT_PROCESS_ERROR */ ++ | HOST_INT_SCAN_COMPLETE ++ /* | HOST_INT_FCS_THRESHOLD */ ++ /* | HOST_INT_BEACON_MISSED */ ++ ); ++ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */ ++ } ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm) ++{ ++ struct acx111_ie_tx_level tx_level; ++ ++ /* since it can be assumed that at least the Maxim radio has a ++ * maximum power output of 20dBm and since it also can be ++ * assumed that these values drive the DAC responsible for ++ * setting the linear Tx level, I'd guess that these values ++ * should be the corresponding linear values for a dBm value, ++ * in other words: calculate the values from that formula: ++ * Y [dBm] = 10 * log (X [mW]) ++ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm) ++ * and you're done... ++ * Hopefully that's ok, but you never know if we're actually ++ * right... (especially since Windows XP doesn't seem to show ++ * actual Tx dBm values :-P) */ ++ ++ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the ++ * values are EXACTLY mW!!! Not sure about RFMD and others, ++ * though... */ ++ static const u8 dbm2val_maxim[21] = { ++ 63, 63, 63, 62, ++ 61, 61, 60, 60, ++ 59, 58, 57, 55, ++ 53, 50, 47, 43, ++ 38, 31, 23, 13, ++ 0 ++ }; ++ static const u8 dbm2val_rfmd[21] = { ++ 0, 0, 0, 1, ++ 2, 2, 3, 3, ++ 4, 5, 6, 8, ++ 10, 13, 16, 20, ++ 25, 32, 41, 50, ++ 63 ++ }; ++ const u8 *table; ++ ++ switch (adev->radio_type) { ++ case RADIO_MAXIM_0D: ++ table = &dbm2val_maxim[0]; ++ break; ++ case RADIO_RFMD_11: ++ case RADIO_RALINK_15: ++ table = &dbm2val_rfmd[0]; ++ break; ++ default: ++ printk("%s: unknown/unsupported radio type, " ++ "cannot modify tx power level yet!\n", ++ adev->ndev->name); ++ return NOT_OK; ++ } ++ /* ++ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure ++ * routine matches the PA bias with the gain, so just use its default value. ++ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware ++ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim ++ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the ++ * gain control DAC. ++ * ++ * Physically between the ACX and the radio, higher Tx gain control DAC values result ++ * in less power output; 0 volts to the Maxim radio results in the highest output power ++ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register. ++ * ++ * Although there is only the 1 power setting, one of the radio firmware functions adjusts ++ * the transmit power level up and down. That function is called by the ACX FIQ handler ++ * under certain conditions. ++ */ ++ tx_level.level = 1; ++ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL); ++ ++ printk("%s: changing radio power level to %u dBm (%u)\n", ++ adev->ndev->name, level_dbm, table[level_dbm]); ++ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]); ++ ++ return 0; ++} ++ ++ ++static struct platform_driver ++acxmem_drv_id = { ++ .driver = { ++ .name = "acx-mem", ++ }, ++ .probe = acxmem_e_probe, ++ .remove = __devexit_p(acxmem_e_remove), ++#ifdef CONFIG_PM ++ .suspend = acxmem_e_suspend, ++ .resume = acxmem_e_resume ++#endif /* CONFIG_PM */ ++}; ++ ++ ++/*********************************************************************** ++** acxmem_e_init_module ++** ++** Module initialization routine, called once at module load time ++*/ ++int __init ++acxmem_e_init_module(void) ++{ ++ int res; ++ ++ FN_ENTER; ++ ++#if (ACX_IO_WIDTH==32) ++ printk("acx: compiled to use 32bit I/O access. " ++ "I/O timing issues might occur, such as " ++ "non-working firmware upload. Report them\n"); ++#else ++ printk("acx: compiled to use 16bit I/O access only " ++ "(compatibility mode)\n"); ++#endif ++ ++#ifdef __LITTLE_ENDIAN ++#define ENDIANNESS_STRING "running on a little-endian CPU\n" ++#else ++#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n" ++#endif ++ log(L_INIT, ++ ENDIANNESS_STRING ++ "PCI module " ACX_RELEASE " initialized, " ++ "waiting for cards to probe...\n" ++ ); ++ ++ res = platform_driver_register (&acxmem_drv_id); ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acxmem_e_cleanup_module ++** ++** Called at module unload time. This is our last chance to ++** clean up after ourselves. ++*/ ++void __exit ++acxmem_e_cleanup_module(void) ++{ ++ FN_ENTER; ++ ++ printk ("cleanup_module\n"); ++ platform_driver_unregister( &acxmem_drv_id ); ++ ++ FN_EXIT0; ++} ++ ++void acxmem_e_release(struct device *dev) { ++} ++ ++MODULE_AUTHOR( "Todd Blumer " ); ++MODULE_DESCRIPTION( "ACX Slave Memory Driver" ); ++MODULE_LICENSE( "GPL" ); ++ +Index: linux-2.6.23/drivers/net/wireless/acx/pci.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/pci.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,4234 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++#define ACX_PCI 1 ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++ ++/* Linux 2.6.18+ uses */ ++#ifndef UTS_RELEASE ++#include ++#endif ++ ++#include /* required for Lx 2.6.8 ?? */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx.h" ++ ++ ++/*********************************************************************** ++*/ ++#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE) ++#define PCI_ACX100_REGION1 0x01 ++#define PCI_ACX100_REGION1_SIZE 0x1000 /* Memory size - 4K bytes */ ++#define PCI_ACX100_REGION2 0x02 ++#define PCI_ACX100_REGION2_SIZE 0x10000 /* Memory size - 64K bytes */ ++ ++#define PCI_ACX111_REGION1 0x00 ++#define PCI_ACX111_REGION1_SIZE 0x2000 /* Memory size - 8K bytes */ ++#define PCI_ACX111_REGION2 0x01 ++#define PCI_ACX111_REGION2_SIZE 0x20000 /* Memory size - 128K bytes */ ++ ++/* Texas Instruments Vendor ID */ ++#define PCI_VENDOR_ID_TI 0x104c ++ ++/* ACX100 22Mb/s WLAN controller */ ++#define PCI_DEVICE_ID_TI_TNETW1100A 0x8400 ++#define PCI_DEVICE_ID_TI_TNETW1100B 0x8401 ++ ++/* ACX111 54Mb/s WLAN controller */ ++#define PCI_DEVICE_ID_TI_TNETW1130 0x9066 ++ ++/* PCI Class & Sub-Class code, Network-'Other controller' */ ++#define PCI_CLASS_NETWORK_OTHERS 0x0280 ++ ++#define CARD_EEPROM_ID_SIZE 6 ++ ++#ifndef PCI_D0 ++/* From include/linux/pci.h */ ++#define PCI_D0 0 ++#define PCI_D1 1 ++#define PCI_D2 2 ++#define PCI_D3hot 3 ++#define PCI_D3cold 4 ++#define PCI_UNKNOWN 5 ++#define PCI_POWER_ERROR -1 ++#endif ++ ++ ++/*********************************************************************** ++*/ ++static void acxpci_i_tx_timeout(struct net_device *ndev); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id); ++#else ++static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs); ++#endif ++static void acxpci_i_set_multicast_list(struct net_device *ndev); ++ ++static int acxpci_e_open(struct net_device *ndev); ++static int acxpci_e_close(struct net_device *ndev); ++static void acxpci_s_up(struct net_device *ndev); ++static void acxpci_s_down(struct net_device *ndev); ++ ++ ++/*********************************************************************** ++** Register access ++*/ ++ ++/* Pick one */ ++/* #define INLINE_IO static */ ++#define INLINE_IO static inline ++ ++INLINE_IO u32 ++read_reg32(acx_device_t *adev, unsigned int offset) ++{ ++#if ACX_IO_WIDTH == 32 ++ return readl((u8 *)adev->iobase + adev->io[offset]); ++#else ++ return readw((u8 *)adev->iobase + adev->io[offset]) ++ + (readw((u8 *)adev->iobase + adev->io[offset] + 2) << 16); ++#endif ++} ++ ++INLINE_IO u16 ++read_reg16(acx_device_t *adev, unsigned int offset) ++{ ++ return readw((u8 *)adev->iobase + adev->io[offset]); ++} ++ ++INLINE_IO u8 ++read_reg8(acx_device_t *adev, unsigned int offset) ++{ ++ return readb((u8 *)adev->iobase + adev->io[offset]); ++} ++ ++INLINE_IO void ++write_reg32(acx_device_t *adev, unsigned int offset, u32 val) ++{ ++#if ACX_IO_WIDTH == 32 ++ writel(val, (u8 *)adev->iobase + adev->io[offset]); ++#else ++ writew(val & 0xffff, (u8 *)adev->iobase + adev->io[offset]); ++ writew(val >> 16, (u8 *)adev->iobase + adev->io[offset] + 2); ++#endif ++} ++ ++INLINE_IO void ++write_reg16(acx_device_t *adev, unsigned int offset, u16 val) ++{ ++ writew(val, (u8 *)adev->iobase + adev->io[offset]); ++} ++ ++INLINE_IO void ++write_reg8(acx_device_t *adev, unsigned int offset, u8 val) ++{ ++ writeb(val, (u8 *)adev->iobase + adev->io[offset]); ++} ++ ++/* Handle PCI posting properly: ++ * Make sure that writes reach the adapter in case they require to be executed ++ * *before* the next write, by reading a random (and safely accessible) register. ++ * This call has to be made if there is no read following (which would flush the data ++ * to the adapter), yet the written data has to reach the adapter immediately. */ ++INLINE_IO void ++write_flush(acx_device_t *adev) ++{ ++ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */ ++ /* faster version (accesses the first register, IO_ACX_SOFT_RESET, ++ * which should also be safe): */ ++ readb(adev->iobase); ++} ++ ++INLINE_IO int ++adev_present(acx_device_t *adev) ++{ ++ /* fast version (accesses the first register, IO_ACX_SOFT_RESET, ++ * which should be safe): */ ++ return readl(adev->iobase) != 0xffffffff; ++} ++ ++ ++/*********************************************************************** ++*/ ++static inline txdesc_t* ++get_txdesc(acx_device_t *adev, int index) ++{ ++ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size); ++} ++ ++static inline txdesc_t* ++advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc) ++{ ++ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size); ++} ++ ++static txhostdesc_t* ++get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ return &adev->txhostdesc_start[index*2]; ++} ++ ++static inline client_t* ++get_txc(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return NULL; ++ } ++ return adev->txc[index]; ++} ++ ++static inline u16 ++get_txr(acx_device_t *adev, txdesc_t* txdesc) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ index /= adev->txdesc_size; ++ return adev->txr[index]; ++} ++ ++static inline void ++put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111) ++{ ++ int index = (u8*)txdesc - (u8*)adev->txdesc_start; ++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return; ++ } ++ index /= adev->txdesc_size; ++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) { ++ printk("bad txdesc ptr %p\n", txdesc); ++ return; ++ } ++ adev->txc[index] = c; ++ adev->txr[index] = r111; ++} ++ ++ ++/*********************************************************************** ++** EEPROM and PHY read/write helpers ++*/ ++/*********************************************************************** ++** acxpci_read_eeprom_byte ++** ++** Function called to read an octet in the EEPROM. ++** ++** This function is used by acxpci_e_probe to check if the ++** connected card is a legal one or not. ++** ++** Arguments: ++** adev ptr to acx_device structure ++** addr address to read in the EEPROM ++** charbuf ptr to a char. This is where the read octet ++** will be stored ++*/ ++int ++acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf) ++{ ++ int result; ++ int count; ++ ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for EEPROM read\n", ++ adev->ndev->name); ++ result = NOT_OK; ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA); ++ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf); ++ result = OK; ++ ++fail: ++ return result; ++} ++ ++ ++/*********************************************************************** ++** We don't lock hw accesses here since we never r/w eeprom in IRQ ++** Note: this function sleeps only because of GFP_KERNEL alloc ++*/ ++#ifdef UNUSED ++int ++acxpci_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf) ++{ ++ u8 *data_verify = NULL; ++ unsigned long flags; ++ int count, i; ++ int result = NOT_OK; ++ u16 gpio_orig; ++ ++ printk("acx: WARNING! I would write to EEPROM now. " ++ "Since I really DON'T want to unless you know " ++ "what you're doing (THIS CODE WILL PROBABLY " ++ "NOT WORK YET!), I will abort that now. And " ++ "definitely make sure to make a " ++ "/proc/driver/acx_wlan0_eeprom backup copy first!!! " ++ "(the EEPROM content includes the PCI config header!! " ++ "If you kill important stuff, then you WILL " ++ "get in trouble and people DID get in trouble already)\n"); ++ return OK; ++ ++ FN_ENTER; ++ ++ data_verify = kmalloc(len, GFP_KERNEL); ++ if (!data_verify) { ++ goto end; ++ } ++ ++ /* first we need to enable the OE (EEPROM Output Enable) GPIO line ++ * to be able to write to the EEPROM. ++ * NOTE: an EEPROM writing success has been reported, ++ * but you probably have to modify GPIO_OUT, too, ++ * and you probably need to activate a different GPIO ++ * line instead! */ ++ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE); ++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1); ++ write_flush(adev); ++ ++ /* ok, now start writing the data out */ ++ for (i = 0; i < len; i++) { ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i); ++ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i)); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 1); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ if (unlikely(!--count)) { ++ printk("WARNING, DANGER!!! " ++ "Timeout waiting for EEPROM write\n"); ++ goto end; ++ } ++ cpu_relax(); ++ } ++ } ++ ++ /* disable EEPROM writing */ ++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig); ++ write_flush(adev); ++ ++ /* now start a verification run */ ++ for (i = 0; i < len; i++) { ++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0); ++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) { ++ if (unlikely(!--count)) { ++ printk("timeout waiting for EEPROM read\n"); ++ goto end; ++ } ++ cpu_relax(); ++ } ++ ++ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA); ++ } ++ ++ if (0 == memcmp(charbuf, data_verify, len)) ++ result = OK; /* read data matches, success */ ++ ++end: ++ kfree(data_verify); ++ FN_EXIT1(result); ++ return result; ++} ++#endif /* UNUSED */ ++ ++ ++/*********************************************************************** ++** acxpci_s_read_phy_reg ++** ++** Messing with rx/tx disabling and enabling here ++** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic ++*/ ++int ++acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf) ++{ ++ int result = NOT_OK; ++ int count; ++ ++ FN_ENTER; ++ ++ write_reg32(adev, IO_ACX_PHY_ADDR, reg); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_PHY_CTL, 2); ++ ++ count = 0xffff; ++ while (read_reg32(adev, IO_ACX_PHY_CTL)) { ++ /* scheduling away instead of CPU burning loop ++ * doesn't seem to work here at all: ++ * awful delay, sometimes also failure. ++ * Doesn't matter anyway (only small delay). */ ++ if (unlikely(!--count)) { ++ printk("%s: timeout waiting for phy read\n", ++ adev->ndev->name); ++ *charbuf = 0; ++ goto fail; ++ } ++ cpu_relax(); ++ } ++ ++ log(L_DEBUG, "count was %u\n", count); ++ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA); ++ ++ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg); ++ result = OK; ++ goto fail; /* silence compiler warning */ ++fail: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value) ++{ ++ FN_ENTER; ++ ++ /* mprusko said that 32bit accesses result in distorted sensitivity ++ * on his card. Unconfirmed, looks like it's not true (most likely since we ++ * now properly flush writes). */ ++ write_reg32(adev, IO_ACX_PHY_DATA, value); ++ write_reg32(adev, IO_ACX_PHY_ADDR, reg); ++ write_flush(adev); ++ write_reg32(adev, IO_ACX_PHY_CTL, 1); ++ write_flush(adev); ++ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg); ++ ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++#define NO_AUTO_INCREMENT 1 ++ ++/*********************************************************************** ++** acxpci_s_write_fw ++** ++** Write the firmware image into the card. ++** ++** Arguments: ++** adev wlan device structure ++** fw_image firmware image. ++** ++** Returns: ++** 1 firmware image corrupted ++** 0 success ++*/ ++static int ++acxpci_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset) ++{ ++ int len, size; ++ u32 sum, v32; ++ /* we skip the first four bytes which contain the control sum */ ++ const u8 *p = (u8*)fw_image + 4; ++ ++ /* start the image checksum by adding the image size value */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0); ++ ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */ ++#else ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */ ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */ ++ write_flush(adev); ++#endif ++ ++ len = 0; ++ size = le32_to_cpu(fw_image->size) & (~3); ++ ++ while (likely(len < size)) { ++ v32 = be32_to_cpu(*(u32*)p); ++ sum += p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ len += 4; ++ ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4); ++ write_flush(adev); ++#endif ++ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32); ++ } ++ ++ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n", ++ size, sum, le32_to_cpu(fw_image->chksum)); ++ ++ /* compare our checksum with the stored image checksum */ ++ return (sum != le32_to_cpu(fw_image->chksum)); ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_validate_fw ++** ++** Compare the firmware image given with ++** the firmware image written into the card. ++** ++** Arguments: ++** adev wlan device structure ++** fw_image firmware image. ++** ++** Returns: ++** NOT_OK firmware image corrupted or not correctly written ++** OK success ++*/ ++static int ++acxpci_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image, ++ u32 offset) ++{ ++ u32 sum, v32, w32; ++ int len, size; ++ int result = OK; ++ /* we skip the first four bytes which contain the control sum */ ++ const u8 *p = (u8*)fw_image + 4; ++ ++ /* start the image checksum by adding the image size value */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0); ++ ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */ ++#else ++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */ ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */ ++#endif ++ ++ len = 0; ++ size = le32_to_cpu(fw_image->size) & (~3); ++ ++ while (likely(len < size)) { ++ v32 = be32_to_cpu(*(u32*)p); ++ p += 4; ++ len += 4; ++ ++#if NO_AUTO_INCREMENT ++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4); ++#endif ++ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA); ++ ++ if (unlikely(w32 != v32)) { ++ printk("acx: FATAL: firmware upload: " ++ "data parts at offset %d don't match (0x%08X vs. 0x%08X)! " ++ "I/O timing issues or defective memory, with DWL-xx0+? " ++ "ACX_IO_WIDTH=16 may help. Please report\n", ++ len, v32, w32); ++ result = NOT_OK; ++ break; ++ } ++ ++ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24); ++ } ++ ++ /* sum control verification */ ++ if (result != NOT_OK) { ++ if (sum != le32_to_cpu(fw_image->chksum)) { ++ printk("acx: FATAL: firmware upload: " ++ "checksums don't match!\n"); ++ result = NOT_OK; ++ } ++ } ++ ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_upload_fw ++** ++** Called from acx_reset_dev ++*/ ++static int ++acxpci_s_upload_fw(acx_device_t *adev) ++{ ++ firmware_image_t *fw_image = NULL; ++ int res = NOT_OK; ++ int try; ++ u32 file_size; ++ char filename[sizeof("tiacx1NNcNN")]; ++ ++ FN_ENTER; ++ ++ /* print exact chipset and radio ID to make sure people really get a clue on which files exactly they are supposed to provide, ++ * since firmware loading is the biggest enduser PITA with these chipsets. ++ * Not printing radio ID in 0xHEX in order to not confuse them into wrong file naming */ ++ printk( "acx: need to load firmware for acx1%02d chipset with radio ID %02x, please provide via firmware hotplug:\n" ++ "acx: either one file only (ombined firmware image file, radio-specific) or two files (radio-less base image file *plus* separate adio-specific extension file)\n", ++ IS_ACX111(adev)*11, adev->radio_type); ++ ++ /* Try combined, then main image */ ++ adev->need_radio_fw = 0; ++ snprintf(filename, sizeof(filename), "tiacx1%02dc%02X", ++ IS_ACX111(adev)*11, adev->radio_type); ++ ++ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size); ++ if (!fw_image) { ++ adev->need_radio_fw = 1; ++ filename[sizeof("tiacx1NN")-1] = '\0'; ++ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size); ++ if (!fw_image) { ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++ } ++ } ++ ++ for (try = 1; try <= 5; try++) { ++ res = acxpci_s_write_fw(adev, fw_image, 0); ++ log(L_DEBUG|L_INIT, "acx_write_fw (main/combined): %d\n", res); ++ if (OK == res) { ++ res = acxpci_s_validate_fw(adev, fw_image, 0); ++ log(L_DEBUG|L_INIT, "acx_validate_fw " ++ "(main/combined): %d\n", res); ++ } ++ ++ if (OK == res) { ++ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED); ++ break; ++ } ++ printk("acx: firmware upload attempt #%d FAILED, " ++ "retrying...\n", try); ++ acx_s_msleep(1000); /* better wait for a while... */ ++ } ++ ++ vfree(fw_image); ++ ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_upload_radio ++** ++** Uploads the appropriate radio module firmware into the card. ++*/ ++int ++acxpci_s_upload_radio(acx_device_t *adev) ++{ ++ acx_ie_memmap_t mm; ++ firmware_image_t *radio_image; ++ acx_cmd_radioinit_t radioinit; ++ int res = NOT_OK; ++ int try; ++ u32 offset; ++ u32 size; ++ char filename[sizeof("tiacx1NNrNN")]; ++ ++ if (!adev->need_radio_fw) return OK; ++ ++ FN_ENTER; ++ ++ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP); ++ offset = le32_to_cpu(mm.CodeEnd); ++ ++ snprintf(filename, sizeof(filename), "tiacx1%02dr%02X", ++ IS_ACX111(adev)*11, ++ adev->radio_type); ++ radio_image = acx_s_read_fw(&adev->pdev->dev, filename, &size); ++ if (!radio_image) { ++ printk("acx: can't load radio module '%s'\n", filename); ++ goto fail; ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0); ++ ++ for (try = 1; try <= 5; try++) { ++ res = acxpci_s_write_fw(adev, radio_image, offset); ++ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res); ++ if (OK == res) { ++ res = acxpci_s_validate_fw(adev, radio_image, offset); ++ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res); ++ } ++ ++ if (OK == res) ++ break; ++ printk("acx: radio firmware upload attempt #%d FAILED, " ++ "retrying...\n", try); ++ acx_s_msleep(1000); /* better wait for a while... */ ++ } ++ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0); ++ radioinit.offset = cpu_to_le32(offset); ++ /* no endian conversion needed, remains in card CPU area: */ ++ radioinit.len = radio_image->size; ++ ++ vfree(radio_image); ++ ++ if (OK != res) ++ goto fail; ++ ++ /* will take a moment so let's have a big timeout */ ++ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT, ++ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000)); ++ ++ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP); ++fail: ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acxpci_l_reset_mac ++** ++** MAC will be reset ++** Call context: reset_dev ++*/ ++static void ++acxpci_l_reset_mac(acx_device_t *adev) ++{ ++ u16 temp; ++ ++ FN_ENTER; ++ ++ /* halt eCPU */ ++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1; ++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp); ++ ++ /* now do soft reset of eCPU, set bit */ ++ temp = read_reg16(adev, IO_ACX_SOFT_RESET) | 0x1; ++ log(L_DEBUG, "%s: enable soft reset...\n", __func__); ++ write_reg16(adev, IO_ACX_SOFT_RESET, temp); ++ write_flush(adev); ++ ++ /* now clear bit again: deassert eCPU reset */ ++ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__); ++ write_reg16(adev, IO_ACX_SOFT_RESET, temp & ~0x1); ++ ++ /* now start a burst read from initial EEPROM */ ++ temp = read_reg16(adev, IO_ACX_EE_START) | 0x1; ++ write_reg16(adev, IO_ACX_EE_START, temp); ++ write_flush(adev); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_verify_init ++*/ ++static int ++acxpci_s_verify_init(acx_device_t *adev) ++{ ++ int result = NOT_OK; ++ unsigned long timeout; ++ ++ FN_ENTER; ++ ++ timeout = jiffies + 2*HZ; ++ for (;;) { ++ u16 irqstat = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES); ++ if (irqstat & HOST_INT_FCS_THRESHOLD) { ++ result = OK; ++ write_reg16(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD); ++ break; ++ } ++ if (time_after(jiffies, timeout)) ++ break; ++ /* Init may take up to ~0.5 sec total */ ++ acx_s_msleep(50); ++ } ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** A few low-level helpers ++** ++** Note: these functions are not protected by lock ++** and thus are never allowed to be called from IRQ. ++** Also they must not race with fw upload which uses same hw regs ++*/ ++ ++/*********************************************************************** ++** acxpci_write_cmd_type_status ++*/ ++ ++static inline void ++acxpci_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status) ++{ ++ writel(type | (status << 16), adev->cmd_area); ++ write_flush(adev); ++} ++ ++ ++/*********************************************************************** ++** acxpci_read_cmd_type_status ++*/ ++static u32 ++acxpci_read_cmd_type_status(acx_device_t *adev) ++{ ++ u32 cmd_type, cmd_status; ++ ++ cmd_type = readl(adev->cmd_area); ++ cmd_status = (cmd_type >> 16); ++ cmd_type = (u16)cmd_type; ++ ++ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n", ++ cmd_type, cmd_status, ++ acx_cmd_status_str(cmd_status)); ++ ++ return cmd_status; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_reset_dev ++** ++** Arguments: ++** netdevice that contains the adev variable ++** Returns: ++** NOT_OK on fail ++** OK on success ++** Side effects: ++** device is hard reset ++** Call context: ++** acxpci_e_probe ++** Comment: ++** This resets the device using low level hardware calls ++** as well as uploads and verifies the firmware to the card ++*/ ++ ++static inline void ++init_mboxes(acx_device_t *adev) ++{ ++ u32 cmd_offs, info_offs; ++ ++ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS); ++ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS); ++ adev->cmd_area = (u8 *)adev->iobase2 + cmd_offs; ++ adev->info_area = (u8 *)adev->iobase2 + info_offs; ++ log(L_DEBUG, "iobase2=%p\n" ++ "cmd_mbox_offset=%X cmd_area=%p\n" ++ "info_mbox_offset=%X info_area=%p\n", ++ adev->iobase2, ++ cmd_offs, adev->cmd_area, ++ info_offs, adev->info_area); ++} ++ ++ ++static inline void ++read_eeprom_area(acx_device_t *adev) ++{ ++#if ACX_DEBUG > 1 ++ int offs; ++ u8 tmp; ++ ++ for (offs = 0x8c; offs < 0xb9; offs++) ++ acxpci_read_eeprom_byte(adev, offs, &tmp); ++#endif ++} ++ ++ ++static int ++acxpci_s_reset_dev(acx_device_t *adev) ++{ ++ const char* msg = ""; ++ unsigned long flags; ++ int result = NOT_OK; ++ u16 hardware_info; ++ u16 ecpu_ctrl; ++ int count; ++ ++ FN_ENTER; ++ ++ /* reset the device to make sure the eCPU is stopped ++ * to upload the firmware correctly */ ++ ++ acx_lock(adev, flags); ++ ++ acxpci_l_reset_mac(adev); ++ ++ ecpu_ctrl = read_reg16(adev, IO_ACX_ECPU_CTRL) & 1; ++ if (!ecpu_ctrl) { ++ msg = "eCPU is already running. "; ++ goto end_unlock; ++ } ++ ++#ifdef WE_DONT_NEED_THAT_DO_WE ++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) { ++ /* eCPU most likely means "embedded CPU" */ ++ msg = "eCPU did not start after boot from flash. "; ++ goto end_unlock; ++ } ++ ++ /* check sense on reset flags */ ++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) { ++ printk("%s: eCPU did not start after boot (SOR), " ++ "is this fatal?\n", adev->ndev->name); ++ } ++#endif ++ /* scan, if any, is stopped now, setting corresponding IRQ bit */ ++ adev->irq_status |= HOST_INT_SCAN_COMPLETE; ++ ++ acx_unlock(adev, flags); ++ ++ /* need to know radio type before fw load */ ++ /* Need to wait for arrival of this information in a loop, ++ * most probably since eCPU runs some init code from EEPROM ++ * (started burst read in reset_mac()) which also ++ * sets the radio type ID */ ++ ++ count = 0xffff; ++ do { ++ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION); ++ if (!--count) { ++ msg = "eCPU didn't indicate radio type"; ++ goto end_fail; ++ } ++ cpu_relax(); ++ } while (!(hardware_info & 0xff00)); /* radio type still zero? */ ++ ++ /* printk("DEBUG: count %d\n", count); */ ++ adev->form_factor = hardware_info & 0xff; ++ adev->radio_type = hardware_info >> 8; ++ ++ /* load the firmware */ ++ if (OK != acxpci_s_upload_fw(adev)) ++ goto end_fail; ++ ++ /* acx_s_msleep(10); this one really shouldn't be required */ ++ ++ /* now start eCPU by clearing bit */ ++ write_reg16(adev, IO_ACX_ECPU_CTRL, ecpu_ctrl & ~0x1); ++ log(L_DEBUG, "booted eCPU up and waiting for completion...\n"); ++ ++ /* wait for eCPU bootup */ ++ if (OK != acxpci_s_verify_init(adev)) { ++ msg = "timeout waiting for eCPU. "; ++ goto end_fail; ++ } ++ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n"); ++ ++ init_mboxes(adev); ++ acxpci_write_cmd_type_status(adev, 0, 0); ++ ++ /* test that EEPROM is readable */ ++ read_eeprom_area(adev); ++ ++ result = OK; ++ goto end; ++ ++/* Finish error message. Indicate which function failed */ ++end_unlock: ++ acx_unlock(adev, flags); ++end_fail: ++ printk("acx: %sreset_dev() FAILED\n", msg); ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_issue_cmd_timeo ++** ++** Sends command to fw, extract result ++** ++** NB: we do _not_ take lock inside, so be sure to not touch anything ++** which may interfere with IRQ handler operation ++** ++** TODO: busy wait is a bit silly, so: ++** 1) stop doing many iters - go to sleep after first ++** 2) go to waitqueue based approach: wait, not poll! ++*/ ++#undef FUNC ++#define FUNC "issue_cmd" ++ ++#if !ACX_DEBUG ++int ++acxpci_s_issue_cmd_timeo( ++ acx_device_t *adev, ++ unsigned int cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned cmd_timeout) ++{ ++#else ++int ++acxpci_s_issue_cmd_timeo_debug( ++ acx_device_t *adev, ++ unsigned cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned cmd_timeout, ++ const char* cmdstr) ++{ ++ unsigned long start = jiffies; ++#endif ++ const char *devname; ++ unsigned counter; ++ u16 irqtype; ++ u16 cmd_status; ++ unsigned long timeout; ++ ++ FN_ENTER; ++ ++ devname = adev->ndev->name; ++ if (!devname || !devname[0] || devname[4]=='%') ++ devname = "acx"; ++ ++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n", ++ cmdstr, buflen, cmd_timeout, ++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1); ++ ++ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) { ++ printk("%s: "FUNC"(): firmware is not loaded yet, " ++ "cannot execute commands!\n", devname); ++ goto bad; ++ } ++ ++ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) { ++ printk("input buffer (len=%u):\n", buflen); ++ acx_dump_bytes(buffer, buflen); ++ } ++ ++ /* wait for firmware to become idle for our command submission */ ++ timeout = HZ/5; ++ counter = (timeout * 1000 / HZ) - 1; /* in ms */ ++ timeout += jiffies; ++ do { ++ cmd_status = acxpci_read_cmd_type_status(adev); ++ /* Test for IDLE state */ ++ if (!cmd_status) ++ break; ++ if (counter % 8 == 0) { ++ if (time_after(jiffies, timeout)) { ++ counter = 0; ++ break; ++ } ++ /* we waited 8 iterations, no luck. Sleep 8 ms */ ++ acx_s_msleep(8); ++ } ++ } while (likely(--counter)); ++ ++ if (!counter) { ++ /* the card doesn't get idle, we're in trouble */ ++ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n", ++ devname, cmd_status); ++ goto bad; ++ } else if (counter < 190) { /* if waited >10ms... */ ++ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. " ++ "Please report\n", 199 - counter); ++ } ++ ++ /* now write the parameters of the command if needed */ ++ if (buffer && buflen) { ++ /* if it's an INTERROGATE command, just pass the length ++ * of parameters to read, as data */ ++#if CMD_DISCOVERY ++ if (cmd == ACX1xx_CMD_INTERROGATE) ++ memset_io(adev->cmd_area + 4, 0xAA, buflen); ++#endif ++ /* adev->cmd_area points to PCI device's memory, not to RAM! */ ++ memcpy_toio(adev->cmd_area + 4, buffer, ++ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen); ++ } ++ /* now write the actual command type */ ++ acxpci_write_cmd_type_status(adev, cmd, 0); ++ /* execute command */ ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD); ++ write_flush(adev); ++ ++ /* wait for firmware to process command */ ++ ++ /* Ensure nonzero and not too large timeout. ++ ** Also converts e.g. 100->99, 200->199 ++ ** which is nice but not essential */ ++ cmd_timeout = (cmd_timeout-1) | 1; ++ if (unlikely(cmd_timeout > 1199)) ++ cmd_timeout = 1199; ++ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */ ++ adev->irq_status &= ~HOST_INT_CMD_COMPLETE; ++ ++ /* we schedule away sometimes (timeout can be large) */ ++ counter = cmd_timeout; ++ timeout = jiffies + cmd_timeout * HZ / 1000; ++ do { ++ if (!adev->irqs_active) { /* IRQ disabled: poll */ ++ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES); ++ if (irqtype & HOST_INT_CMD_COMPLETE) { ++ write_reg16(adev, IO_ACX_IRQ_ACK, ++ HOST_INT_CMD_COMPLETE); ++ break; ++ } ++ } else { /* Wait when IRQ will set the bit */ ++ irqtype = adev->irq_status; ++ if (irqtype & HOST_INT_CMD_COMPLETE) ++ break; ++ } ++ ++ if (counter % 8 == 0) { ++ if (time_after(jiffies, timeout)) { ++ counter = 0; ++ break; ++ } ++ /* we waited 8 iterations, no luck. Sleep 8 ms */ ++ acx_s_msleep(8); ++ } ++ } while (likely(--counter)); ++ ++ /* save state for debugging */ ++ cmd_status = acxpci_read_cmd_type_status(adev); ++ ++ /* put the card in IDLE state */ ++ acxpci_write_cmd_type_status(adev, 0, 0); ++ ++ if (!counter) { /* timed out! */ ++ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. " ++ "irq bits:0x%04X irq_status:0x%04X timeout:%dms " ++ "cmd_status:%d (%s)\n", ++ devname, (adev->irqs_active) ? "waiting" : "polling", ++ irqtype, adev->irq_status, cmd_timeout, ++ cmd_status, acx_cmd_status_str(cmd_status)); ++ goto bad; ++ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */ ++ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. " ++ "count:%d. Please report\n", ++ (adev->irqs_active) ? "waited" : "polled", ++ cmd_timeout - counter, counter); ++ } ++ ++ if (1 != cmd_status) { /* it is not a 'Success' */ ++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). " ++ "Took %dms of %d\n", ++ devname, cmd_status, acx_cmd_status_str(cmd_status), ++ cmd_timeout - counter, cmd_timeout); ++ /* zero out result buffer ++ * WARNING: this will trash stack in case of illegally large input ++ * length! */ ++ if (buffer && buflen) ++ memset(buffer, 0, buflen); ++ goto bad; ++ } ++ ++ /* read in result parameters if needed */ ++ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) { ++ /* adev->cmd_area points to PCI device's memory, not to RAM! */ ++ memcpy_fromio(buffer, adev->cmd_area + 4, buflen); ++ if (acx_debug & L_DEBUG) { ++ printk("output buffer (len=%u): ", buflen); ++ acx_dump_bytes(buffer, buflen); ++ } ++ } ++/* ok: */ ++ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n", ++ cmdstr, jiffies - start); ++ FN_EXIT1(OK); ++ return OK; ++ ++bad: ++ /* Give enough info so that callers can avoid ++ ** printing their own diagnostic messages */ ++#if ACX_DEBUG ++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr); ++#else ++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd); ++#endif ++ dump_stack(); ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++#ifdef NONESSENTIAL_FEATURES ++typedef struct device_id { ++ unsigned char id[6]; ++ char *descr; ++ char *type; ++} device_id_t; ++ ++static const device_id_t ++device_ids[] = ++{ ++ { ++ {'G', 'l', 'o', 'b', 'a', 'l'}, ++ NULL, ++ NULL, ++ }, ++ { ++ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, ++ "uninitialized", ++ "SpeedStream SS1021 or Gigafast WF721-AEX" ++ }, ++ { ++ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85}, ++ "non-standard", ++ "DrayTek Vigor 520" ++ }, ++ { ++ {'?', '?', '?', '?', '?', '?'}, ++ "non-standard", ++ "Level One WPC-0200" ++ }, ++ { ++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ++ "empty", ++ "DWL-650+ variant" ++ } ++}; ++ ++static void ++acx_show_card_eeprom_id(acx_device_t *adev) ++{ ++ unsigned char buffer[CARD_EEPROM_ID_SIZE]; ++ int i; ++ ++ memset(&buffer, 0, CARD_EEPROM_ID_SIZE); ++ /* use direct EEPROM access */ ++ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) { ++ if (OK != acxpci_read_eeprom_byte(adev, ++ ACX100_EEPROM_ID_OFFSET + i, ++ &buffer[i])) { ++ printk("acx: reading EEPROM FAILED\n"); ++ break; ++ } ++ } ++ ++ for (i = 0; i < VEC_SIZE(device_ids); i++) { ++ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) { ++ if (device_ids[i].descr) { ++ printk("acx: EEPROM card ID string check " ++ "found %s card ID: is this %s?\n", ++ device_ids[i].descr, device_ids[i].type); ++ } ++ break; ++ } ++ } ++ if (i == VEC_SIZE(device_ids)) { ++ printk("acx: EEPROM card ID string check found " ++ "unknown card: expected 'Global', got '%.*s\'. " ++ "Please report\n", CARD_EEPROM_ID_SIZE, buffer); ++ } ++} ++#endif /* NONESSENTIAL_FEATURES */ ++ ++ ++/*********************************************************************** ++** acxpci_free_desc_queues ++** ++** Releases the queues that have been allocated, the ++** others have been initialised to NULL so this ++** function can be used if only part of the queues were allocated. ++*/ ++ ++static inline void ++free_coherent(struct pci_dev *hwdev, size_t size, ++ void *vaddr, dma_addr_t dma_handle) ++{ ++ dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, ++ size, vaddr, dma_handle); ++} ++ ++void ++acxpci_free_desc_queues(acx_device_t *adev) ++{ ++#define ACX_FREE_QUEUE(size, ptr, phyaddr) \ ++ if (ptr) { \ ++ free_coherent(0, size, ptr, phyaddr); \ ++ ptr = NULL; \ ++ size = 0; \ ++ } ++ ++ FN_ENTER; ++ ++ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy); ++ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy); ++ ++ adev->txdesc_start = NULL; ++ ++ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy); ++ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy); ++ ++ adev->rxdesc_start = NULL; ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_delete_dma_regions ++*/ ++static void ++acxpci_s_delete_dma_regions(acx_device_t *adev) ++{ ++ unsigned long flags; ++ ++ FN_ENTER; ++ /* disable radio Tx/Rx. Shouldn't we use the firmware commands ++ * here instead? Or are we that much down the road that it's no ++ * longer possible here? */ ++ write_reg16(adev, IO_ACX_ENABLE, 0); ++ ++ acx_s_msleep(100); ++ ++ acx_lock(adev, flags); ++ acxpci_free_desc_queues(adev); ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_e_probe ++** ++** Probe routine called when a PCI device w/ matching ID is found. ++** Here's the sequence: ++** - Allocate the PCI resources. ++** - Read the PCMCIA attribute memory to make sure we have a WLAN card ++** - Reset the MAC ++** - Initialize the dev and wlan data ++** - Initialize the MAC ++** ++** pdev - ptr to pci device structure containing info about pci configuration ++** id - ptr to the device id entry that matched this device ++*/ ++static const u16 ++IO_ACX100[] = ++{ ++ 0x0000, /* IO_ACX_SOFT_RESET */ ++ ++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */ ++ 0x0018, /* IO_ACX_SLV_MEM_DATA */ ++ 0x001c, /* IO_ACX_SLV_MEM_CTL */ ++ 0x0020, /* IO_ACX_SLV_END_CTL */ ++ ++ 0x0034, /* IO_ACX_FEMR */ ++ ++ 0x007c, /* IO_ACX_INT_TRIG */ ++ 0x0098, /* IO_ACX_IRQ_MASK */ ++ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */ ++ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */ ++ 0x00ac, /* IO_ACX_IRQ_ACK */ ++ 0x00b0, /* IO_ACX_HINT_TRIG */ ++ ++ 0x0104, /* IO_ACX_ENABLE */ ++ ++ 0x0250, /* IO_ACX_EEPROM_CTL */ ++ 0x0254, /* IO_ACX_EEPROM_ADDR */ ++ 0x0258, /* IO_ACX_EEPROM_DATA */ ++ 0x025c, /* IO_ACX_EEPROM_CFG */ ++ ++ 0x0268, /* IO_ACX_PHY_ADDR */ ++ 0x026c, /* IO_ACX_PHY_DATA */ ++ 0x0270, /* IO_ACX_PHY_CTL */ ++ ++ 0x0290, /* IO_ACX_GPIO_OE */ ++ ++ 0x0298, /* IO_ACX_GPIO_OUT */ ++ ++ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */ ++ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */ ++ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */ ++ ++ 0x02d0, /* IO_ACX_EE_START */ ++ 0x02d4, /* IO_ACX_SOR_CFG */ ++ 0x02d8 /* IO_ACX_ECPU_CTRL */ ++}; ++ ++static const u16 ++IO_ACX111[] = ++{ ++ 0x0000, /* IO_ACX_SOFT_RESET */ ++ ++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */ ++ 0x0018, /* IO_ACX_SLV_MEM_DATA */ ++ 0x001c, /* IO_ACX_SLV_MEM_CTL */ ++ 0x0020, /* IO_ACX_SLV_END_CTL */ ++ ++ 0x0034, /* IO_ACX_FEMR */ ++ ++ 0x00b4, /* IO_ACX_INT_TRIG */ ++ 0x00d4, /* IO_ACX_IRQ_MASK */ ++ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */ ++ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */ ++ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */ ++ 0x00e8, /* IO_ACX_IRQ_ACK */ ++ 0x00ec, /* IO_ACX_HINT_TRIG */ ++ ++ 0x01d0, /* IO_ACX_ENABLE */ ++ ++ 0x0338, /* IO_ACX_EEPROM_CTL */ ++ 0x033c, /* IO_ACX_EEPROM_ADDR */ ++ 0x0340, /* IO_ACX_EEPROM_DATA */ ++ 0x0344, /* IO_ACX_EEPROM_CFG */ ++ ++ 0x0350, /* IO_ACX_PHY_ADDR */ ++ 0x0354, /* IO_ACX_PHY_DATA */ ++ 0x0358, /* IO_ACX_PHY_CTL */ ++ ++ 0x0374, /* IO_ACX_GPIO_OE */ ++ ++ 0x037c, /* IO_ACX_GPIO_OUT */ ++ ++ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */ ++ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */ ++ 0x0390, /* IO_ACX_EEPROM_INFORMATION */ ++ ++ 0x0100, /* IO_ACX_EE_START */ ++ 0x0104, /* IO_ACX_SOR_CFG */ ++ 0x0108, /* IO_ACX_ECPU_CTRL */ ++}; ++ ++static void ++dummy_netdev_init(struct net_device *ndev) {} ++ ++static int __devinit ++acxpci_e_probe(struct pci_dev *pdev, const struct pci_device_id *id) ++{ ++ acx111_ie_configoption_t co; ++ unsigned long mem_region1 = 0; ++ unsigned long mem_region2 = 0; ++ unsigned long mem_region1_size; ++ unsigned long mem_region2_size; ++ unsigned long phymem1; ++ unsigned long phymem2; ++ void *mem1 = NULL; ++ void *mem2 = NULL; ++ acx_device_t *adev = NULL; ++ struct net_device *ndev = NULL; ++ const char *chip_name; ++ int result = -EIO; ++ int err; ++ u8 chip_type; ++ ++ FN_ENTER; ++ ++ /* Enable the PCI device */ ++ if (pci_enable_device(pdev)) { ++ printk("acx: pci_enable_device() FAILED\n"); ++ result = -ENODEV; ++ goto fail_pci_enable_device; ++ } ++ ++ /* enable busmastering (required for CardBus) */ ++ pci_set_master(pdev); ++ ++ /* FIXME: prism54 calls pci_set_mwi() here, ++ * should we do/support the same? */ ++ ++ /* chiptype is u8 but id->driver_data is ulong ++ ** Works for now (possible values are 1 and 2) */ ++ chip_type = (u8)id->driver_data; ++ /* acx100 and acx111 have different PCI memory regions */ ++ if (chip_type == CHIPTYPE_ACX100) { ++ chip_name = "ACX100"; ++ mem_region1 = PCI_ACX100_REGION1; ++ mem_region1_size = PCI_ACX100_REGION1_SIZE; ++ ++ mem_region2 = PCI_ACX100_REGION2; ++ mem_region2_size = PCI_ACX100_REGION2_SIZE; ++ } else if (chip_type == CHIPTYPE_ACX111) { ++ chip_name = "ACX111"; ++ mem_region1 = PCI_ACX111_REGION1; ++ mem_region1_size = PCI_ACX111_REGION1_SIZE; ++ ++ mem_region2 = PCI_ACX111_REGION2; ++ mem_region2_size = PCI_ACX111_REGION2_SIZE; ++ } else { ++ printk("acx: unknown chip type 0x%04X\n", chip_type); ++ goto fail_unknown_chiptype; ++ } ++ ++ /* Figure out our resources */ ++ phymem1 = pci_resource_start(pdev, mem_region1); ++ phymem2 = pci_resource_start(pdev, mem_region2); ++ if (!request_mem_region(phymem1, pci_resource_len(pdev, mem_region1), "acx_1")) { ++ printk("acx: cannot reserve PCI memory region 1 (are you sure " ++ "you have CardBus support in kernel?)\n"); ++ goto fail_request_mem_region1; ++ } ++ if (!request_mem_region(phymem2, pci_resource_len(pdev, mem_region2), "acx_2")) { ++ printk("acx: cannot reserve PCI memory region 2\n"); ++ goto fail_request_mem_region2; ++ } ++ ++ /* this used to be ioremap(), but ioremap_nocache() ++ * is much less risky, right? (and slower?) ++ * FIXME: we may want to go back to cached variant if it's ++ * certain that our code really properly handles ++ * cached operation (memory barriers, volatile?, ...) ++ * (but always keep this comment here regardless!) ++ * Possibly make this a driver config setting? */ ++ ++ mem1 = ioremap_nocache(phymem1, mem_region1_size); ++ if (!mem1) { ++ printk("acx: ioremap() FAILED\n"); ++ goto fail_ioremap1; ++ } ++ mem2 = ioremap_nocache(phymem2, mem_region2_size); ++ if (!mem2) { ++ printk("acx: ioremap() #2 FAILED\n"); ++ goto fail_ioremap2; ++ } ++ ++ printk("acx: found %s-based wireless network card at %s, irq:%d, " ++ "phymem1:0x%lX, phymem2:0x%lX, mem1:0x%p, mem1_size:%ld, " ++ "mem2:0x%p, mem2_size:%ld\n", ++ chip_name, pci_name(pdev), pdev->irq, phymem1, phymem2, ++ mem1, mem_region1_size, ++ mem2, mem_region2_size); ++ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug); ++ ++ if (0 == pdev->irq) { ++ printk("acx: can't use IRQ 0\n"); ++ goto fail_irq; ++ } ++ ++ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init); ++ /* (NB: memsets to 0 entire area) */ ++ if (!ndev) { ++ printk("acx: no memory for netdevice struct\n"); ++ goto fail_alloc_netdev; ++ } ++ ++ ether_setup(ndev); ++ ndev->open = &acxpci_e_open; ++ ndev->stop = &acxpci_e_close; ++ ndev->hard_start_xmit = &acx_i_start_xmit; ++ ndev->get_stats = &acx_e_get_stats; ++#if IW_HANDLER_VERSION <= 5 ++ ndev->get_wireless_stats = &acx_e_get_wireless_stats; ++#endif ++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def; ++ ndev->set_multicast_list = &acxpci_i_set_multicast_list; ++ ndev->tx_timeout = &acxpci_i_tx_timeout; ++ ndev->change_mtu = &acx_e_change_mtu; ++ ndev->watchdog_timeo = 4 * HZ; ++ ndev->irq = pdev->irq; ++ ndev->base_addr = pci_resource_start(pdev, 0); ++ ++ adev = ndev2adev(ndev); ++ spin_lock_init(&adev->lock); /* initial state: unlocked */ ++ /* We do not start with downed sem: we want PARANOID_LOCKING to work */ ++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */ ++ /* since nobody can see new netdev yet, we can as well ++ ** just _presume_ that we're under sem (instead of actually taking it): */ ++ /* acx_sem_lock(adev); */ ++ adev->pdev = pdev; ++ adev->ndev = ndev; ++ adev->dev_type = DEVTYPE_PCI; ++ adev->chip_type = chip_type; ++ adev->chip_name = chip_name; ++ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111; ++ adev->membase = phymem1; ++ adev->iobase = mem1; ++ adev->membase2 = phymem2; ++ adev->iobase2 = mem2; ++ /* to find crashes due to weird driver access ++ * to unconfigured interface (ifup) */ ++ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead; ++ ++#ifdef NONESSENTIAL_FEATURES ++ acx_show_card_eeprom_id(adev); ++#endif /* NONESSENTIAL_FEATURES */ ++ ++#ifdef SET_MODULE_OWNER ++ SET_MODULE_OWNER(ndev); ++#endif ++ SET_NETDEV_DEV(ndev, &pdev->dev); ++ ++ log(L_IRQ|L_INIT, "using IRQ %d\n", pdev->irq); ++ ++ /* need to be able to restore PCI state after a suspend */ ++ pci_save_state(pdev); ++ pci_set_drvdata(pdev, ndev); ++ ++ /* ok, pci setup is finished, now start initializing the card */ ++ ++ /* NB: read_reg() reads may return bogus data before reset_dev(), ++ * since the firmware which directly controls large parts of the I/O ++ * registers isn't initialized yet. ++ * acx100 seems to be more affected than acx111 */ ++ if (OK != acxpci_s_reset_dev(adev)) ++ goto fail_reset; ++ ++ if (IS_ACX100(adev)) { ++ /* ACX100: configopt struct in cmd mailbox - directly after reset */ ++ memcpy_fromio(&co, adev->cmd_area, sizeof(co)); ++ } ++ ++ if (OK != acx_s_init_mac(adev)) ++ goto fail_init_mac; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111: configopt struct needs to be queried after full init */ ++ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS); ++ } ++ ++/* TODO: merge them into one function, they are called just once and are the same for pci & usb */ ++ if (OK != acxpci_read_eeprom_byte(adev, 0x05, &adev->eeprom_version)) ++ goto fail_read_eeprom_version; ++ ++ acx_s_parse_configoption(adev, &co); ++ acx_s_set_defaults(adev); ++ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */ ++ acx_display_hardware_details(adev); ++ ++ /* Register the card, AFTER everything else has been set up, ++ * since otherwise an ioctl could step on our feet due to ++ * firmware operations happening in parallel or uninitialized data */ ++ err = register_netdev(ndev); ++ if (OK != err) { ++ printk("acx: register_netdev() FAILED: %d\n", err); ++ goto fail_register_netdev; ++ } ++ ++ acx_proc_register_entries(ndev); ++ ++ /* Now we have our device, so make sure the kernel doesn't try ++ * to send packets even though we're not associated to a network yet */ ++ acx_stop_queue(ndev, "on probe"); ++ acx_carrier_off(ndev, "on probe"); ++ ++ /* after register_netdev() userspace may start working with dev ++ * (in particular, on other CPUs), we only need to up the sem */ ++ /* acx_sem_unlock(adev); */ ++ ++ printk("acx "ACX_RELEASE": net device %s, driver compiled " ++ "against wireless extensions %d and Linux %s\n", ++ ndev->name, WIRELESS_EXT, UTS_RELEASE); ++ ++#if CMD_DISCOVERY ++ great_inquisitor(adev); ++#endif ++ ++ result = OK; ++ goto done; ++ ++ /* error paths: undo everything in reverse order... */ ++ ++fail_register_netdev: ++ ++ acxpci_s_delete_dma_regions(adev); ++ pci_set_drvdata(pdev, NULL); ++ ++fail_init_mac: ++fail_read_eeprom_version: ++fail_reset: ++ ++ free_netdev(ndev); ++fail_alloc_netdev: ++fail_irq: ++ ++ iounmap(mem2); ++fail_ioremap2: ++ ++ iounmap(mem1); ++fail_ioremap1: ++ ++ release_mem_region(pci_resource_start(pdev, mem_region2), ++ pci_resource_len(pdev, mem_region2)); ++fail_request_mem_region2: ++ ++ release_mem_region(pci_resource_start(pdev, mem_region1), ++ pci_resource_len(pdev, mem_region1)); ++fail_request_mem_region1: ++fail_unknown_chiptype: ++ ++ pci_disable_device(pdev); ++fail_pci_enable_device: ++ ++ pci_set_power_state(pdev, PCI_D3hot); ++ ++done: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxpci_e_remove ++** ++** Shut device down (if not hot unplugged) ++** and deallocate PCI resources for the acx chip. ++** ++** pdev - ptr to PCI device structure containing info about pci configuration ++*/ ++static void __devexit ++acxpci_e_remove(struct pci_dev *pdev) ++{ ++ struct net_device *ndev; ++ acx_device_t *adev; ++ unsigned long mem_region1, mem_region2; ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ ndev = (struct net_device*) pci_get_drvdata(pdev); ++ if (!ndev) { ++ log(L_DEBUG, "%s: card is unused. Skipping any release code\n", ++ __func__); ++ goto end; ++ } ++ ++ adev = ndev2adev(ndev); ++ ++ /* If device wasn't hot unplugged... */ ++ if (adev_present(adev)) { ++ ++ acx_sem_lock(adev); ++ ++ /* disable both Tx and Rx to shut radio down properly */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0); ++ ++#ifdef REDUNDANT ++ /* put the eCPU to sleep to save power ++ * Halting is not possible currently, ++ * since not supported by all firmware versions */ ++ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0); ++#endif ++ acx_lock(adev, flags); ++ /* disable power LED to save power :-) */ ++ log(L_INIT, "switching off power LED to save power\n"); ++ acxpci_l_power_led(adev, 0); ++ /* stop our eCPU */ ++ if (IS_ACX111(adev)) { ++ /* FIXME: does this actually keep halting the eCPU? ++ * I don't think so... ++ */ ++ acxpci_l_reset_mac(adev); ++ } else { ++ u16 temp; ++ /* halt eCPU */ ++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1; ++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp); ++ write_flush(adev); ++ } ++ acx_unlock(adev, flags); ++ ++ acx_sem_unlock(adev); ++ } ++ ++ /* unregister the device to not let the kernel ++ * (e.g. ioctls) access a half-deconfigured device ++ * NB: this will cause acxpci_e_close() to be called, ++ * thus we shouldn't call it under sem! */ ++ log(L_INIT, "removing device %s\n", ndev->name); ++ unregister_netdev(ndev); ++ ++ /* unregister_netdev ensures that no references to us left. ++ * For paranoid reasons we continue to follow the rules */ ++ acx_sem_lock(adev); ++ ++ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) { ++ acxpci_s_down(ndev); ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ } ++ ++ acx_proc_unregister_entries(ndev); ++ ++ if (IS_ACX100(adev)) { ++ mem_region1 = PCI_ACX100_REGION1; ++ mem_region2 = PCI_ACX100_REGION2; ++ } else { ++ mem_region1 = PCI_ACX111_REGION1; ++ mem_region2 = PCI_ACX111_REGION2; ++ } ++ ++ /* finally, clean up PCI bus state */ ++ acxpci_s_delete_dma_regions(adev); ++ if (adev->iobase) iounmap(adev->iobase); ++ if (adev->iobase2) iounmap(adev->iobase2); ++ release_mem_region(pci_resource_start(pdev, mem_region1), ++ pci_resource_len(pdev, mem_region1)); ++ release_mem_region(pci_resource_start(pdev, mem_region2), ++ pci_resource_len(pdev, mem_region2)); ++ pci_disable_device(pdev); ++ ++ /* remove dev registration */ ++ pci_set_drvdata(pdev, NULL); ++ ++ acx_sem_unlock(adev); ++ ++ /* Free netdev (quite late, ++ * since otherwise we might get caught off-guard ++ * by a netdev timeout handler execution ++ * expecting to see a working dev...) */ ++ free_netdev(ndev); ++ ++ /* put device into ACPI D3 mode (shutdown) */ ++ pci_set_power_state(pdev, PCI_D3hot); ++ ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** TODO: PM code needs to be fixed / debugged / tested. ++*/ ++#ifdef CONFIG_PM ++static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++acxpci_e_suspend(struct pci_dev *pdev, pm_message_t state) ++#else ++acxpci_e_suspend(struct pci_dev *pdev, u32 state) ++#endif ++{ ++ struct net_device *ndev = pci_get_drvdata(pdev); ++ acx_device_t *adev; ++ ++ FN_ENTER; ++ printk("acx: suspend handler is experimental!\n"); ++ printk("sus: dev %p\n", ndev); ++ ++ if (!netif_running(ndev)) ++ goto end; ++ ++ adev = ndev2adev(ndev); ++ printk("sus: adev %p\n", adev); ++ ++ acx_sem_lock(adev); ++ ++ netif_device_detach(ndev); /* this one cannot sleep */ ++ acxpci_s_down(ndev); ++ /* down() does not set it to 0xffff, but here we really want that */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ acxpci_s_delete_dma_regions(adev); ++ pci_save_state(pdev); ++ pci_set_power_state(pdev, PCI_D3hot); ++ ++ acx_sem_unlock(adev); ++end: ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++static int ++acxpci_e_resume(struct pci_dev *pdev) ++{ ++ struct net_device *ndev = pci_get_drvdata(pdev); ++ acx_device_t *adev; ++ ++ FN_ENTER; ++ ++ printk("acx: resume handler is experimental!\n"); ++ printk("rsm: got dev %p\n", ndev); ++ ++ if (!netif_running(ndev)) ++ goto end; ++ ++ adev = ndev2adev(ndev); ++ printk("rsm: got adev %p\n", adev); ++ ++ acx_sem_lock(adev); ++ ++ pci_set_power_state(pdev, PCI_D0); ++ printk("rsm: power state PCI_D0 set\n"); ++ pci_restore_state(pdev); ++ printk("rsm: PCI state restored\n"); ++ ++ if (OK != acxpci_s_reset_dev(adev)) ++ goto end_unlock; ++ printk("rsm: device reset done\n"); ++ if (OK != acx_s_init_mac(adev)) ++ goto end_unlock; ++ printk("rsm: init MAC done\n"); ++ ++ acxpci_s_up(ndev); ++ printk("rsm: acx up done\n"); ++ ++ /* now even reload all card parameters as they were before suspend, ++ * and possibly be back in the network again already :-) */ ++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) { ++ adev->set_mask = GETSET_ALL; ++ acx_s_update_card_settings(adev); ++ printk("rsm: settings updated\n"); ++ } ++ netif_device_attach(ndev); ++ printk("rsm: device attached\n"); ++ ++end_unlock: ++ acx_sem_unlock(adev); ++end: ++ /* we need to return OK here anyway, right? */ ++ FN_EXIT0; ++ return OK; ++} ++#endif /* CONFIG_PM */ ++ ++ ++/*********************************************************************** ++** acxpci_s_up ++** ++** This function is called by acxpci_e_open (when ifconfig sets the device as up) ++** ++** Side effects: ++** - Enables on-card interrupt requests ++** - calls acx_s_start ++*/ ++ ++static void ++enable_acx_irq(acx_device_t *adev) ++{ ++ FN_ENTER; ++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask); ++ write_reg16(adev, IO_ACX_FEMR, 0x8000); ++ adev->irqs_active = 1; ++ FN_EXIT0; ++} ++ ++static void ++acxpci_s_up(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ enable_acx_irq(adev); ++ acx_unlock(adev, flags); ++ ++ /* acx fw < 1.9.3.e has a hardware timer, and older drivers ++ ** used to use it. But we don't do that anymore, our OS ++ ** has reliable software timers */ ++ init_timer(&adev->mgmt_timer); ++ adev->mgmt_timer.function = acx_i_timer; ++ adev->mgmt_timer.data = (unsigned long)adev; ++ ++ /* Need to set ACX_STATE_IFACE_UP first, or else ++ ** timer won't be started by acx_set_status() */ ++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_2_STA: ++ /* actual scan cmd will happen in start() */ ++ acx_set_status(adev, ACX_STATUS_1_SCANNING); break; ++ case ACX_MODE_3_AP: ++ case ACX_MODE_MONITOR: ++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break; ++ } ++ ++ acx_s_start(adev); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_down ++** ++** NB: device may be already hot unplugged if called from acxpci_e_remove() ++** ++** Disables on-card interrupt request, stops softirq and timer, stops queue, ++** sets status == STOPPED ++*/ ++ ++static void ++disable_acx_irq(acx_device_t *adev) ++{ ++ FN_ENTER; ++ ++ /* I guess mask is not 0xffff because acx100 won't signal ++ ** cmd completion then (needed for ifup). ++ ** Someone with acx100 please confirm */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ adev->irqs_active = 0; ++ FN_EXIT0; ++} ++ ++static void ++acxpci_s_down(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ /* Disable IRQs first, so that IRQs cannot race with us */ ++ /* then wait until interrupts have finished executing on other CPUs */ ++ acx_lock(adev, flags); ++ disable_acx_irq(adev); ++ synchronize_irq(adev->pdev->irq); ++ acx_unlock(adev, flags); ++ ++ /* we really don't want to have an asynchronous tasklet disturb us ++ ** after something vital for its job has been shut down, so ++ ** end all remaining work now. ++ ** ++ ** NB: carrier_off (done by set_status below) would lead to ++ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK(). ++ ** That's why we do FLUSH first. ++ ** ++ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK() ++ ** waits for acx_e_after_interrupt_task to complete if it is running ++ ** on another CPU, but acx_e_after_interrupt_task ++ ** will sleep on sem forever, because it is taken by us! ++ ** Work around that by temporary sem unlock. ++ ** This will fail miserably if we'll be hit by concurrent ++ ** iwconfig or something in between. TODO! */ ++ acx_sem_unlock(adev); ++ FLUSH_SCHEDULED_WORK(); ++ acx_sem_lock(adev); ++ ++ /* This is possible: ++ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task -> ++ ** -> set_status(ASSOCIATED) -> wake_queue() ++ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK ++ ** lock/unlock is just paranoia, maybe not needed */ ++ acx_lock(adev, flags); ++ acx_stop_queue(ndev, "on ifdown"); ++ acx_set_status(adev, ACX_STATUS_0_STOPPED); ++ acx_unlock(adev, flags); ++ ++ /* kernel/timer.c says it's illegal to del_timer_sync() ++ ** a timer which restarts itself. We guarantee this cannot ++ ** ever happen because acx_i_timer() never does this if ++ ** status is ACX_STATUS_0_STOPPED */ ++ del_timer_sync(&adev->mgmt_timer); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_e_open ++** ++** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP ++** from clear to set. In other words: ifconfig up. ++** ++** Returns: ++** 0 success ++** >0 f/w reported error ++** <0 driver reported error ++*/ ++static int ++acxpci_e_open(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ int result = OK; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ acx_init_task_scheduler(adev); ++ ++/* TODO: pci_set_power_state(pdev, PCI_D0); ? */ ++ ++ /* request shared IRQ handler */ ++ if (request_irq(ndev->irq, acxpci_i_interrupt, SA_SHIRQ, ndev->name, ndev)) { ++ printk("%s: request_irq FAILED\n", ndev->name); ++ result = -EAGAIN; ++ goto done; ++ } ++ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq); ++ ++ /* ifup device */ ++ acxpci_s_up(ndev); ++ ++ /* We don't currently have to do anything else. ++ * The setup of the MAC should be subsequently completed via ++ * the mlme commands. ++ * Higher layers know we're ready from dev->start==1 and ++ * dev->tbusy==0. Our rx path knows to pass up received/ ++ * frames because of dev->flags&IFF_UP is true. ++ */ ++done: ++ acx_sem_unlock(adev); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxpci_e_close ++** ++** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP ++** from set to clear. I.e. called by "ifconfig DEV down" ++** ++** Returns: ++** 0 success ++** >0 f/w reported error ++** <0 driver reported error ++*/ ++static int ++acxpci_e_close(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* ifdown device */ ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ if (netif_device_present(ndev)) { ++ acxpci_s_down(ndev); ++ } ++ ++ /* disable all IRQs, release shared IRQ handler */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ write_reg16(adev, IO_ACX_FEMR, 0x0); ++ free_irq(ndev->irq, ndev); ++ ++/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */ ++ ++ /* We currently don't have to do anything else. ++ * Higher layers know we're not ready from dev->start==0 and ++ * dev->tbusy==1. Our rx path knows to not pass up received ++ * frames because of dev->flags&IFF_UP is false. ++ */ ++ acx_sem_unlock(adev); ++ ++ log(L_INIT, "closed device\n"); ++ FN_EXIT0; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acxpci_i_tx_timeout ++** ++** Called from network core. Must not sleep! ++*/ ++static void ++acxpci_i_tx_timeout(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ unsigned int tx_num_cleaned; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ /* clean processed tx descs, they may have been completely full */ ++ tx_num_cleaned = acxpci_l_clean_txdesc(adev); ++ ++ /* nothing cleaned, yet (almost) no free buffers available? ++ * --> clean all tx descs, no matter which status!! ++ * Note that I strongly suspect that doing emergency cleaning ++ * may confuse the firmware. This is a last ditch effort to get ++ * ANYTHING to work again... ++ * ++ * TODO: it's best to simply reset & reinit hw from scratch... ++ */ ++ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) { ++ printk("%s: FAILED to free any of the many full tx buffers. " ++ "Switching to emergency freeing. " ++ "Please report!\n", ndev->name); ++ acxpci_l_clean_txdesc_emergency(adev); ++ } ++ ++ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status)) ++ acx_wake_queue(ndev, "after tx timeout"); ++ ++ /* stall may have happened due to radio drift, so recalib radio */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ ++ /* do unimportant work last */ ++ printk("%s: tx timeout!\n", ndev->name); ++ adev->stats.tx_errors++; ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_i_set_multicast_list ++** FIXME: most likely needs refinement ++*/ ++static void ++acxpci_i_set_multicast_list(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ ++ /* firmwares don't have allmulti capability, ++ * so just use promiscuous mode instead in this case. */ ++ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) { ++ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS); ++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI); ++ SET_BIT(adev->set_mask, SET_RXCONFIG); ++ /* let kernel know in case *we* needed to set promiscuous */ ++ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI); ++ } else { ++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS); ++ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI); ++ SET_BIT(adev->set_mask, SET_RXCONFIG); ++ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI); ++ } ++ ++ /* cannot update card settings directly here, atomic context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG); ++ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxpci_l_process_rxdesc ++** ++** Called directly and only from the IRQ handler ++*/ ++ ++#if !ACX_DEBUG ++static inline void log_rxbuffer(const acx_device_t *adev) {} ++#else ++static void ++log_rxbuffer(const acx_device_t *adev) ++{ ++ register const struct rxhostdesc *rxhostdesc; ++ int i; ++ /* no FN_ENTER here, we don't want that */ ++ ++ rxhostdesc = adev->rxhostdesc_start; ++ if (unlikely(!rxhostdesc)) return; ++ for (i = 0; i < RX_CNT; i++) { ++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN)) ++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL))) ++ printk("rx: buf %d full\n", i); ++ rxhostdesc++; ++ } ++} ++#endif ++ ++static void ++acxpci_l_process_rxdesc(acx_device_t *adev) ++{ ++ register rxhostdesc_t *hostdesc; ++ unsigned count, tail; ++ ++ FN_ENTER; ++ ++ if (unlikely(acx_debug & L_BUFR)) ++ log_rxbuffer(adev); ++ ++ /* First, have a loop to determine the first descriptor that's ++ * full, just in case there's a mismatch between our current ++ * rx_tail and the full descriptor we're supposed to handle. */ ++ tail = adev->rx_tail; ++ count = RX_CNT; ++ while (1) { ++ hostdesc = &adev->rxhostdesc_start[tail]; ++ /* advance tail regardless of outcome of the below test */ ++ tail = (tail + 1) % RX_CNT; ++ ++ if ((hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN)) ++ && (hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL))) ++ break; /* found it! */ ++ ++ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */ ++ goto end; ++ } ++ ++ /* now process descriptors, starting with the first we figured out */ ++ while (1) { ++ log(L_BUFR, "rx: tail=%u Ctl_16=%04X Status=%08X\n", ++ tail, hostdesc->Ctl_16, hostdesc->Status); ++ ++ acx_l_process_rxbuf(adev, hostdesc->data); ++ ++ hostdesc->Status = 0; ++ /* flush all writes before adapter sees CTL_HOSTOWN change */ ++ wmb(); ++ /* Host no longer owns this, needs to be LAST */ ++ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN)); ++ ++ /* ok, descriptor is handled, now check the next descriptor */ ++ hostdesc = &adev->rxhostdesc_start[tail]; ++ ++ /* if next descriptor is empty, then bail out */ ++ if (!(hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN)) ++ || !(hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL))) ++ break; ++ ++ tail = (tail + 1) % RX_CNT; ++ } ++end: ++ adev->rx_tail = tail; ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_i_interrupt ++** ++** IRQ handler (atomic context, must not sleep, blah, blah) ++*/ ++ ++/* scan is complete. all frames now on the receive queue are valid */ ++#define INFO_SCAN_COMPLETE 0x0001 ++#define INFO_WEP_KEY_NOT_FOUND 0x0002 ++/* hw has been reset as the result of a watchdog timer timeout */ ++#define INFO_WATCH_DOG_RESET 0x0003 ++/* failed to send out NULL frame from PS mode notification to AP */ ++/* recommended action: try entering 802.11 PS mode again */ ++#define INFO_PS_FAIL 0x0004 ++/* encryption/decryption process on a packet failed */ ++#define INFO_IV_ICV_FAILURE 0x0005 ++ ++/* Info mailbox format: ++2 bytes: type ++2 bytes: status ++more bytes may follow ++ rumors say about status: ++ 0x0000 info available (set by hw) ++ 0x0001 information received (must be set by host) ++ 0x1000 info available, mailbox overflowed (messages lost) (set by hw) ++ but in practice we've seen: ++ 0x9000 when we did not set status to 0x0001 on prev message ++ 0x1001 when we did set it ++ 0x0000 was never seen ++ conclusion: this is really a bitfield: ++ 0x1000 is 'info available' bit ++ 'mailbox overflowed' bit is 0x8000, not 0x1000 ++ value of 0x0000 probably means that there are no messages at all ++ P.S. I dunno how in hell hw is supposed to notice that messages are lost - ++ it does NOT clear bit 0x0001, and this bit will probably stay forever set ++ after we set it once. Let's hope this will be fixed in firmware someday ++*/ ++ ++static void ++handle_info_irq(acx_device_t *adev) ++{ ++#if ACX_DEBUG ++ static const char * const info_type_msg[] = { ++ "(unknown)", ++ "scan complete", ++ "WEP key not found", ++ "internal watchdog reset was done", ++ "failed to send powersave (NULL frame) notification to AP", ++ "encrypt/decrypt on a packet has failed", ++ "TKIP tx keys disabled", ++ "TKIP rx keys disabled", ++ "TKIP rx: key ID not found", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "???", ++ "TKIP IV value exceeds thresh" ++ }; ++#endif ++ u32 info_type, info_status; ++ ++ info_type = readl(adev->info_area); ++ info_status = (info_type >> 16); ++ info_type = (u16)info_type; ++ ++ /* inform fw that we have read this info message */ ++ writel(info_type | 0x00010000, adev->info_area); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK); ++ write_flush(adev); ++ ++ log(L_CTL, "info_type:%04X info_status:%04X\n", ++ info_type, info_status); ++ ++ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n", ++ info_status, info_type, ++ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ? ++ 0 : info_type] ++ ); ++} ++ ++ ++static void ++log_unusual_irq(u16 irqtype) { ++ /* ++ if (!printk_ratelimit()) ++ return; ++ */ ++ ++ printk("acx: got"); ++ if (irqtype & HOST_INT_RX_DATA) { ++ printk(" Rx_Data"); ++ } ++ /* HOST_INT_TX_COMPLETE */ ++ if (irqtype & HOST_INT_TX_XFER) { ++ printk(" Tx_Xfer"); ++ } ++ /* HOST_INT_RX_COMPLETE */ ++ if (irqtype & HOST_INT_DTIM) { ++ printk(" DTIM"); ++ } ++ if (irqtype & HOST_INT_BEACON) { ++ printk(" Beacon"); ++ } ++ if (irqtype & HOST_INT_TIMER) { ++ log(L_IRQ, " Timer"); ++ } ++ if (irqtype & HOST_INT_KEY_NOT_FOUND) { ++ printk(" Key_Not_Found"); ++ } ++ if (irqtype & HOST_INT_IV_ICV_FAILURE) { ++ printk(" IV_ICV_Failure (crypto)"); ++ } ++ /* HOST_INT_CMD_COMPLETE */ ++ /* HOST_INT_INFO */ ++ if (irqtype & HOST_INT_OVERFLOW) { ++ printk(" Overflow"); ++ } ++ if (irqtype & HOST_INT_PROCESS_ERROR) { ++ printk(" Process_Error"); ++ } ++ /* HOST_INT_SCAN_COMPLETE */ ++ if (irqtype & HOST_INT_FCS_THRESHOLD) { ++ printk(" FCS_Threshold"); ++ } ++ if (irqtype & HOST_INT_UNKNOWN) { ++ printk(" Unknown"); ++ } ++ printk(" IRQ(s)\n"); ++} ++ ++ ++static void ++update_link_quality_led(acx_device_t *adev) ++{ ++ int qual; ++ ++ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise); ++ if (qual > adev->brange_max_quality) ++ qual = adev->brange_max_quality; ++ ++ if (time_after(jiffies, adev->brange_time_last_state_change + ++ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) { ++ acxpci_l_power_led(adev, (adev->brange_last_state == 0)); ++ adev->brange_last_state ^= 1; /* toggle */ ++ adev->brange_time_last_state_change = jiffies; ++ } ++} ++ ++ ++#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */ ++ ++static irqreturn_t ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++acxpci_i_interrupt(int irq, void *dev_id) ++#else ++acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++#endif ++{ ++ acx_device_t *adev; ++ unsigned long flags; ++ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY; ++ register u16 irqtype; ++ u16 unmasked; ++ ++ adev = ndev2adev((struct net_device*)dev_id); ++ ++ /* LOCKING: can just spin_lock() since IRQs are disabled anyway. ++ * I am paranoid */ ++ acx_lock(adev, flags); ++ ++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR); ++ if (unlikely(0xffff == unmasked)) { ++ /* 0xffff value hints at missing hardware, ++ * so don't do anything. ++ * Not very clean, but other drivers do the same... */ ++ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n"); ++ goto none; ++ } ++ ++ /* We will check only "interesting" IRQ types */ ++ irqtype = unmasked & ~adev->irq_mask; ++ if (!irqtype) { ++ /* We are on a shared IRQ line and it wasn't our IRQ */ ++ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n", ++ unmasked, adev->irq_mask); ++ goto none; ++ } ++ ++ /* Done here because IRQ_NONEs taking three lines of log ++ ** drive me crazy */ ++ FN_ENTER; ++ ++#define IRQ_ITERATE 1 ++#if IRQ_ITERATE ++if (jiffies != adev->irq_last_jiffies) { ++ adev->irq_loops_this_jiffy = 0; ++ adev->irq_last_jiffies = jiffies; ++} ++ ++/* safety condition; we'll normally abort loop below ++ * in case no IRQ type occurred */ ++while (likely(--irqcount)) { ++#endif ++ /* ACK all IRQs ASAP */ ++ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff); ++ ++ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n", ++ unmasked, adev->irq_mask, irqtype); ++ ++ /* Handle most important IRQ types first */ ++ if (irqtype & HOST_INT_RX_COMPLETE) { ++ log(L_IRQ, "got Rx_Complete IRQ\n"); ++ acxpci_l_process_rxdesc(adev); ++ } ++ if (irqtype & HOST_INT_TX_COMPLETE) { ++ log(L_IRQ, "got Tx_Complete IRQ\n"); ++ /* don't clean up on each Tx complete, wait a bit ++ * unless we're going towards full, in which case ++ * we do it immediately, too (otherwise we might lockup ++ * with a full Tx buffer if we go into ++ * acxpci_l_clean_txdesc() at a time when we won't wakeup ++ * the net queue in there for some reason...) */ ++ if (adev->tx_free <= TX_START_CLEAN) { ++#if TX_CLEANUP_IN_SOFTIRQ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP); ++#else ++ acxpci_l_clean_txdesc(adev); ++#endif ++ } ++ } ++ ++ /* Less frequent ones */ ++ if (irqtype & (0 ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ | HOST_INT_SCAN_COMPLETE ++ )) { ++ if (irqtype & HOST_INT_CMD_COMPLETE) { ++ log(L_IRQ, "got Command_Complete IRQ\n"); ++ /* save the state for the running issue_cmd() */ ++ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE); ++ } ++ if (irqtype & HOST_INT_INFO) { ++ handle_info_irq(adev); ++ } ++ if (irqtype & HOST_INT_SCAN_COMPLETE) { ++ log(L_IRQ, "got Scan_Complete IRQ\n"); ++ /* need to do that in process context */ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN); ++ /* remember that fw is not scanning anymore */ ++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE); ++ } ++ } ++ ++ /* These we just log, but either they happen rarely ++ * or we keep them masked out */ ++ if (irqtype & (0 ++ | HOST_INT_RX_DATA ++ /* | HOST_INT_TX_COMPLETE */ ++ | HOST_INT_TX_XFER ++ /* | HOST_INT_RX_COMPLETE */ ++ | HOST_INT_DTIM ++ | HOST_INT_BEACON ++ | HOST_INT_TIMER ++ | HOST_INT_KEY_NOT_FOUND ++ | HOST_INT_IV_ICV_FAILURE ++ /* | HOST_INT_CMD_COMPLETE */ ++ /* | HOST_INT_INFO */ ++ | HOST_INT_OVERFLOW ++ | HOST_INT_PROCESS_ERROR ++ /* | HOST_INT_SCAN_COMPLETE */ ++ | HOST_INT_FCS_THRESHOLD ++ | HOST_INT_UNKNOWN ++ )) { ++ log_unusual_irq(irqtype); ++ } ++ ++#if IRQ_ITERATE ++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR); ++ irqtype = unmasked & ~adev->irq_mask; ++ /* Bail out if no new IRQ bits or if all are masked out */ ++ if (!irqtype) ++ break; ++ ++ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) { ++ printk(KERN_ERR "acx: too many interrupts per jiffy!\n"); ++ /* Looks like card floods us with IRQs! Try to stop that */ ++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); ++ /* This will short-circuit all future attempts to handle IRQ. ++ * We cant do much more... */ ++ adev->irq_mask = 0; ++ break; ++ } ++} ++#endif ++ /* Routine to perform blink with range */ ++ if (unlikely(adev->led_power == 2)) ++ update_link_quality_led(adev); ++ ++/* handled: */ ++ /* write_flush(adev); - not needed, last op was read anyway */ ++ acx_unlock(adev, flags); ++ FN_EXIT0; ++ return IRQ_HANDLED; ++ ++none: ++ acx_unlock(adev, flags); ++ return IRQ_NONE; ++} ++ ++ ++/*********************************************************************** ++** acxpci_l_power_led ++*/ ++void ++acxpci_l_power_led(acx_device_t *adev, int enable) ++{ ++ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800; ++ ++ /* A hack. Not moving message rate limiting to adev->xxx ++ * (it's only a debug message after all) */ ++ static int rate_limit = 0; ++ ++ if (rate_limit++ < 3) ++ log(L_IOCTL, "Please report in case toggling the power " ++ "LED doesn't work for your card!\n"); ++ if (enable) ++ write_reg16(adev, IO_ACX_GPIO_OUT, ++ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled); ++ else ++ write_reg16(adev, IO_ACX_GPIO_OUT, ++ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled); ++} ++ ++ ++/*********************************************************************** ++** Ioctls ++*/ ++ ++/*********************************************************************** ++*/ ++int ++acx111pci_ioctl_info( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++#if ACX_DEBUG > 1 ++ acx_device_t *adev = ndev2adev(ndev); ++ rxdesc_t *rxdesc; ++ txdesc_t *txdesc; ++ rxhostdesc_t *rxhostdesc; ++ txhostdesc_t *txhostdesc; ++ struct acx111_ie_memoryconfig memconf; ++ struct acx111_ie_queueconfig queueconf; ++ unsigned long flags; ++ int i; ++ char memmap[0x34]; ++ char rxconfig[0x8]; ++ char fcserror[0x8]; ++ char ratefallback[0x5]; ++ ++ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) ) ++ return OK; ++ /* using printk() since we checked debug flag already */ ++ ++ acx_sem_lock(adev); ++ ++ if (!IS_ACX111(adev)) { ++ printk("acx111-specific function called " ++ "with non-acx111 chip, aborting\n"); ++ goto end_ok; ++ } ++ ++ /* get Acx111 Memory Configuration */ ++ memset(&memconf, 0, sizeof(memconf)); ++ /* BTW, fails with 12 (Write only) error code. ++ ** Retained for easy testing of issue_cmd error handling :) */ ++ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG); ++ ++ /* get Acx111 Queue Configuration */ ++ memset(&queueconf, 0, sizeof(queueconf)); ++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS); ++ ++ /* get Acx111 Memory Map */ ++ memset(memmap, 0, sizeof(memmap)); ++ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP); ++ ++ /* get Acx111 Rx Config */ ++ memset(rxconfig, 0, sizeof(rxconfig)); ++ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG); ++ ++ /* get Acx111 fcs error count */ ++ memset(fcserror, 0, sizeof(fcserror)); ++ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT); ++ ++ /* get Acx111 rate fallback */ ++ memset(ratefallback, 0, sizeof(ratefallback)); ++ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK); ++ ++ /* force occurrence of a beacon interrupt */ ++ /* TODO: comment why is this necessary */ ++ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON); ++ ++ /* dump Acx111 Mem Configuration */ ++ printk("dump mem config:\n" ++ "data read: %d, struct size: %d\n" ++ "Number of stations: %1X\n" ++ "Memory block size: %1X\n" ++ "tx/rx memory block allocation: %1X\n" ++ "count rx: %X / tx: %X queues\n" ++ "options %1X\n" ++ "fragmentation %1X\n" ++ "Rx Queue 1 Count Descriptors: %X\n" ++ "Rx Queue 1 Host Memory Start: %X\n" ++ "Tx Queue 1 Count Descriptors: %X\n" ++ "Tx Queue 1 Attributes: %X\n", ++ memconf.len, (int) sizeof(memconf), ++ memconf.no_of_stations, ++ memconf.memory_block_size, ++ memconf.tx_rx_memory_block_allocation, ++ memconf.count_rx_queues, memconf.count_tx_queues, ++ memconf.options, ++ memconf.fragmentation, ++ memconf.rx_queue1_count_descs, ++ acx2cpu(memconf.rx_queue1_host_rx_start), ++ memconf.tx_queue1_count_descs, ++ memconf.tx_queue1_attributes); ++ ++ /* dump Acx111 Queue Configuration */ ++ printk("dump queue head:\n" ++ "data read: %d, struct size: %d\n" ++ "tx_memory_block_address (from card): %X\n" ++ "rx_memory_block_address (from card): %X\n" ++ "rx1_queue address (from card): %X\n" ++ "tx1_queue address (from card): %X\n" ++ "tx1_queue attributes (from card): %X\n", ++ queueconf.len, (int) sizeof(queueconf), ++ queueconf.tx_memory_block_address, ++ queueconf.rx_memory_block_address, ++ queueconf.rx1_queue_address, ++ queueconf.tx1_queue_address, ++ queueconf.tx1_attributes); ++ ++ /* dump Acx111 Mem Map */ ++ printk("dump mem map:\n" ++ "data read: %d, struct size: %d\n" ++ "Code start: %X\n" ++ "Code end: %X\n" ++ "WEP default key start: %X\n" ++ "WEP default key end: %X\n" ++ "STA table start: %X\n" ++ "STA table end: %X\n" ++ "Packet template start: %X\n" ++ "Packet template end: %X\n" ++ "Queue memory start: %X\n" ++ "Queue memory end: %X\n" ++ "Packet memory pool start: %X\n" ++ "Packet memory pool end: %X\n" ++ "iobase: %p\n" ++ "iobase2: %p\n", ++ *((u16 *)&memmap[0x02]), (int) sizeof(memmap), ++ *((u32 *)&memmap[0x04]), ++ *((u32 *)&memmap[0x08]), ++ *((u32 *)&memmap[0x0C]), ++ *((u32 *)&memmap[0x10]), ++ *((u32 *)&memmap[0x14]), ++ *((u32 *)&memmap[0x18]), ++ *((u32 *)&memmap[0x1C]), ++ *((u32 *)&memmap[0x20]), ++ *((u32 *)&memmap[0x24]), ++ *((u32 *)&memmap[0x28]), ++ *((u32 *)&memmap[0x2C]), ++ *((u32 *)&memmap[0x30]), ++ adev->iobase, ++ adev->iobase2); ++ ++ /* dump Acx111 Rx Config */ ++ printk("dump rx config:\n" ++ "data read: %d, struct size: %d\n" ++ "rx config: %X\n" ++ "rx filter config: %X\n", ++ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig), ++ *((u16 *)&rxconfig[0x04]), ++ *((u16 *)&rxconfig[0x06])); ++ ++ /* dump Acx111 fcs error */ ++ printk("dump fcserror:\n" ++ "data read: %d, struct size: %d\n" ++ "fcserrors: %X\n", ++ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror), ++ *((u32 *)&fcserror[0x04])); ++ ++ /* dump Acx111 rate fallback */ ++ printk("dump rate fallback:\n" ++ "data read: %d, struct size: %d\n" ++ "ratefallback: %X\n", ++ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback), ++ *((u8 *)&ratefallback[0x04])); ++ ++ /* protect against IRQ */ ++ acx_lock(adev, flags); ++ ++ /* dump acx111 internal rx descriptor ring buffer */ ++ rxdesc = adev->rxdesc_start; ++ ++ /* loop over complete receive pool */ ++ if (rxdesc) for (i = 0; i < RX_CNT; i++) { ++ printk("\ndump internal rxdesc %d:\n" ++ "mem pos %p\n" ++ "next 0x%X\n" ++ "acx mem pointer (dynamic) 0x%X\n" ++ "CTL (dynamic) 0x%X\n" ++ "Rate (dynamic) 0x%X\n" ++ "RxStatus (dynamic) 0x%X\n" ++ "Mod/Pre (dynamic) 0x%X\n", ++ i, ++ rxdesc, ++ acx2cpu(rxdesc->pNextDesc), ++ acx2cpu(rxdesc->ACXMemPtr), ++ rxdesc->Ctl_8, ++ rxdesc->rate, ++ rxdesc->error, ++ rxdesc->SNR); ++ rxdesc++; ++ } ++ ++ /* dump host rx descriptor ring buffer */ ++ ++ rxhostdesc = adev->rxhostdesc_start; ++ ++ /* loop over complete receive pool */ ++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) { ++ printk("\ndump host rxdesc %d:\n" ++ "mem pos %p\n" ++ "buffer mem pos 0x%X\n" ++ "buffer mem offset 0x%X\n" ++ "CTL 0x%X\n" ++ "Length 0x%X\n" ++ "next 0x%X\n" ++ "Status 0x%X\n", ++ i, ++ rxhostdesc, ++ acx2cpu(rxhostdesc->data_phy), ++ rxhostdesc->data_offset, ++ le16_to_cpu(rxhostdesc->Ctl_16), ++ le16_to_cpu(rxhostdesc->length), ++ acx2cpu(rxhostdesc->desc_phy_next), ++ rxhostdesc->Status); ++ rxhostdesc++; ++ } ++ ++ /* dump acx111 internal tx descriptor ring buffer */ ++ txdesc = adev->txdesc_start; ++ ++ /* loop over complete transmit pool */ ++ if (txdesc) for (i = 0; i < TX_CNT; i++) { ++ printk("\ndump internal txdesc %d:\n" ++ "size 0x%X\n" ++ "mem pos %p\n" ++ "next 0x%X\n" ++ "acx mem pointer (dynamic) 0x%X\n" ++ "host mem pointer (dynamic) 0x%X\n" ++ "length (dynamic) 0x%X\n" ++ "CTL (dynamic) 0x%X\n" ++ "CTL2 (dynamic) 0x%X\n" ++ "Status (dynamic) 0x%X\n" ++ "Rate (dynamic) 0x%X\n", ++ i, ++ (int) sizeof(struct txdesc), ++ txdesc, ++ acx2cpu(txdesc->pNextDesc), ++ acx2cpu(txdesc->AcxMemPtr), ++ acx2cpu(txdesc->HostMemPtr), ++ le16_to_cpu(txdesc->total_length), ++ txdesc->Ctl_8, ++ txdesc->Ctl2_8, txdesc->error, ++ txdesc->u.r1.rate); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ ++ /* dump host tx descriptor ring buffer */ ++ ++ txhostdesc = adev->txhostdesc_start; ++ ++ /* loop over complete host send pool */ ++ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) { ++ printk("\ndump host txdesc %d:\n" ++ "mem pos %p\n" ++ "buffer mem pos 0x%X\n" ++ "buffer mem offset 0x%X\n" ++ "CTL 0x%X\n" ++ "Length 0x%X\n" ++ "next 0x%X\n" ++ "Status 0x%X\n", ++ i, ++ txhostdesc, ++ acx2cpu(txhostdesc->data_phy), ++ txhostdesc->data_offset, ++ le16_to_cpu(txhostdesc->Ctl_16), ++ le16_to_cpu(txhostdesc->length), ++ acx2cpu(txhostdesc->desc_phy_next), ++ le32_to_cpu(txhostdesc->Status)); ++ txhostdesc++; ++ } ++ ++ /* write_reg16(adev, 0xb4, 0x4); */ ++ ++ acx_unlock(adev, flags); ++end_ok: ++ ++ acx_sem_unlock(adev); ++#endif /* ACX_DEBUG */ ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx100pci_ioctl_set_phy_amp_bias( ++ struct net_device *ndev, ++ struct iw_request_info *info, ++ struct iw_param *vwrq, ++ char *extra) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ u16 gpio_old; ++ ++ if (!IS_ACX100(adev)) { ++ /* WARNING!!! ++ * Removing this check *might* damage ++ * hardware, since we're tweaking GPIOs here after all!!! ++ * You've been warned... ++ * WARNING!!! */ ++ printk("acx: sorry, setting bias level for non-acx100 " ++ "is not supported yet\n"); ++ return OK; ++ } ++ ++ if (*extra > 7) { ++ printk("acx: invalid bias parameter, range is 0-7\n"); ++ return -EINVAL; ++ } ++ ++ acx_sem_lock(adev); ++ ++ /* Need to lock accesses to [IO_ACX_GPIO_OUT]: ++ * IRQ handler uses it to update LED */ ++ acx_lock(adev, flags); ++ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT); ++ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8)); ++ acx_unlock(adev, flags); ++ ++ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old); ++ printk("%s: PHY power amplifier bias: old:%d, new:%d\n", ++ ndev->name, ++ (gpio_old & 0x0700) >> 8, (unsigned char)*extra); ++ ++ acx_sem_unlock(adev); ++ ++ return OK; ++} ++ ++ ++/*************************************************************** ++** acxpci_l_alloc_tx ++** Actually returns a txdesc_t* ptr ++** ++** FIXME: in case of fragments, should allocate multiple descrs ++** after figuring out how many we need and whether we still have ++** sufficiently many. ++*/ ++tx_t* ++acxpci_l_alloc_tx(acx_device_t *adev) ++{ ++ struct txdesc *txdesc; ++ unsigned head; ++ u8 ctl8; ++ ++ FN_ENTER; ++ ++ if (unlikely(!adev->tx_free)) { ++ printk("acx: BUG: no free txdesc left\n"); ++ txdesc = NULL; ++ goto end; ++ } ++ ++ head = adev->tx_head; ++ txdesc = get_txdesc(adev, head); ++ ctl8 = txdesc->Ctl_8; ++ ++ /* 2005-10-11: there were several bug reports on this happening ++ ** but now cause seems to be understood & fixed */ ++ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_ACXDONE_HOSTOWN))) { ++ /* whoops, descr at current index is not free, so probably ++ * ring buffer already full */ ++ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find " ++ "free txdesc\n", head, ctl8); ++ txdesc = NULL; ++ goto end; ++ } ++ ++ /* Needed in case txdesc won't be eventually submitted for tx */ ++ txdesc->Ctl_8 = DESC_CTL_ACXDONE_HOSTOWN; ++ ++ adev->tx_free--; ++ log(L_BUFT, "tx: got desc %u, %u remain\n", ++ head, adev->tx_free); ++ /* Keep a few free descs between head and tail of tx ring. ++ ** It is not absolutely needed, just feels safer */ ++ if (adev->tx_free < TX_STOP_QUEUE) { ++ log(L_BUF, "stop queue (%u tx desc left)\n", ++ adev->tx_free); ++ acx_stop_queue(adev->ndev, NULL); ++ } ++ ++ /* returning current descriptor, so advance to next free one */ ++ adev->tx_head = (head + 1) % TX_CNT; ++end: ++ FN_EXIT0; ++ ++ return (tx_t*)txdesc; ++} ++ ++ ++/*********************************************************************** ++*/ ++void* ++acxpci_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque) ++{ ++ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data; ++} ++ ++ ++/*********************************************************************** ++** acxpci_l_tx_data ++** ++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx). ++** Can be called from acx_i_start_xmit (data frames from net core). ++** ++** FIXME: in case of fragments, should loop over the number of ++** pre-allocated tx descrs, properly setting up transfer data and ++** CTL_xxx flags according to fragment number. ++*/ ++void ++acxpci_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len) ++{ ++ txdesc_t *txdesc = (txdesc_t*)tx_opaque; ++ txhostdesc_t *hostdesc1, *hostdesc2; ++ client_t *clt; ++ u16 rate_cur; ++ u8 Ctl_8, Ctl2_8; ++ ++ FN_ENTER; ++ ++ /* fw doesn't tx such packets anyhow */ ++ if (unlikely(len < WLAN_HDR_A3_LEN)) ++ goto end; ++ ++ hostdesc1 = get_txhostdesc(adev, txdesc); ++ /* modify flag status in separate variable to be able to write it back ++ * in one big swoop later (also in order to have less device memory ++ * accesses) */ ++ Ctl_8 = txdesc->Ctl_8; ++ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */ ++ ++ hostdesc2 = hostdesc1 + 1; ++ ++ /* DON'T simply set Ctl field to 0 here globally, ++ * it needs to maintain a consistent flag status (those are state flags!!), ++ * otherwise it may lead to severe disruption. Only set or reset particular ++ * flags at the exact moment this is needed... */ ++ ++ /* let chip do RTS/CTS handshaking before sending ++ * in case packet size exceeds threshold */ ++ if (len > adev->rts_threshold) ++ SET_BIT(Ctl2_8, DESC_CTL2_RTS); ++ else ++ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS); ++ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_3_AP: ++ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1); ++ break; ++ case ACX_MODE_2_STA: ++ clt = adev->ap_client; ++ break; ++#if 0 ++/* testing was done on acx111: */ ++ case ACX_MODE_MONITOR: ++ SET_BIT(Ctl2_8, 0 ++/* sends CTS to self before packet */ ++ + DESC_CTL2_SEQ /* don't increase sequence field */ ++/* not working (looks like good fcs is still added) */ ++ + DESC_CTL2_FCS /* don't add the FCS */ ++/* not tested */ ++ + DESC_CTL2_MORE_FRAG ++/* not tested */ ++ + DESC_CTL2_RETRY /* don't increase retry field */ ++/* not tested */ ++ + DESC_CTL2_POWER /* don't increase power mgmt. field */ ++/* no effect */ ++ + DESC_CTL2_WEP /* encrypt this frame */ ++/* not tested */ ++ + DESC_CTL2_DUR /* don't increase duration field */ ++ ); ++ /* fallthrough */ ++#endif ++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */ ++ clt = NULL; ++ break; ++ } ++ ++ rate_cur = clt ? clt->rate_cur : adev->rate_bcast; ++ if (unlikely(!rate_cur)) { ++ printk("acx: driver bug! bad ratemask\n"); ++ goto end; ++ } ++ ++ /* used in tx cleanup routine for auto rate and accounting: */ ++ put_txcr(adev, txdesc, clt, rate_cur); ++ ++ txdesc->total_length = cpu_to_le16(len); ++ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN); ++ if (IS_ACX111(adev)) { ++ /* note that if !txdesc->do_auto, txrate->cur ++ ** has only one nonzero bit */ ++ txdesc->u.r2.rate111 = cpu_to_le16( ++ rate_cur ++ /* WARNING: I was never able to make it work with prism54 AP. ++ ** It was falling down to 1Mbit where shortpre is not applicable, ++ ** and not working at all at "5,11 basic rates only" setting. ++ ** I even didn't see tx packets in radio packet capture. ++ ** Disabled for now --vda */ ++ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */ ++ ); ++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS ++ /* should add this to rate111 above as necessary */ ++ | (clt->pbcc511 ? RATE111_PBCC511 : 0) ++#endif ++ hostdesc1->length = cpu_to_le16(len); ++ } else { /* ACX100 */ ++ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100; ++ txdesc->u.r1.rate = rate_100; ++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS ++ if (clt->pbcc511) { ++ if (n == RATE100_5 || n == RATE100_11) ++ n |= RATE100_PBCC511; ++ } ++ ++ if (clt->shortpre && (clt->cur != RATE111_1)) ++ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */ ++#endif ++ /* set autodma and reclaim and 1st mpdu */ ++ SET_BIT(Ctl_8, DESC_CTL_AUTODMA | DESC_CTL_RECLAIM | DESC_CTL_FIRSTFRAG); ++#if ACX_FRAGMENTATION ++ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */ ++#endif ++ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN); ++ } ++ /* don't need to clean ack/rts statistics here, already ++ * done on descr cleanup */ ++ ++ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors ++ * are now owned by the acx100; do this as LAST operation */ ++ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN); ++ /* flush writes before we release hostdesc to the adapter here */ ++ wmb(); ++ CLEAR_BIT(hostdesc1->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN)); ++ CLEAR_BIT(hostdesc2->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN)); ++ ++ /* write back modified flags */ ++ txdesc->Ctl2_8 = Ctl2_8; ++ txdesc->Ctl_8 = Ctl_8; ++ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */ ++ ++ /* flush writes before we tell the adapter that it's its turn now */ ++ mmiowb(); ++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC); ++ write_flush(adev); ++ ++ /* log the packet content AFTER sending it, ++ * in order to not delay sending any further than absolutely needed ++ * Do separate logs for acx100/111 to have human-readable rates */ ++ if (unlikely(acx_debug & (L_XFER|L_DATA))) { ++ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc; ++ if (IS_ACX111(adev)) ++ printk("tx: pkt (%s): len %d " ++ "rate %04X%s status %u\n", ++ acx_get_packet_type_string(le16_to_cpu(fc)), len, ++ le16_to_cpu(txdesc->u.r2.rate111), ++ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "", ++ adev->status); ++ else ++ printk("tx: pkt (%s): len %d rate %03u%s status %u\n", ++ acx_get_packet_type_string(fc), len, ++ txdesc->u.r1.rate, ++ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "", ++ adev->status); ++ ++ if (acx_debug & L_DATA) { ++ printk("tx: 802.11 [%d]: ", len); ++ acx_dump_bytes(hostdesc1->data, len); ++ } ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_l_clean_txdesc ++** ++** This function resets the txdescs' status when the ACX100 ++** signals the TX done IRQ (txdescs have been processed), starting with ++** the pool index of the descriptor which we would use next, ++** in order to make sure that we can be as fast as possible ++** in filling new txdescs. ++** Everytime we get called we know where the next packet to be cleaned is. ++*/ ++ ++#if !ACX_DEBUG ++static inline void log_txbuffer(const acx_device_t *adev) {} ++#else ++static void ++log_txbuffer(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ int i; ++ ++ /* no FN_ENTER here, we don't want that */ ++ /* no locks here, since it's entirely non-critical code */ ++ txdesc = adev->txdesc_start; ++ if (unlikely(!txdesc)) return; ++ printk("tx: desc->Ctl8's:"); ++ for (i = 0; i < TX_CNT; i++) { ++ printk(" %02X", txdesc->Ctl_8); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ printk("\n"); ++} ++#endif ++ ++ ++static void ++handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger) ++{ ++ const char *err = "unknown error"; ++ ++ /* hmm, should we handle this as a mask ++ * of *several* bits? ++ * For now I think only caring about ++ * individual bits is ok... */ ++ switch (error) { ++ case 0x01: ++ err = "no Tx due to error in other fragment"; ++ adev->wstats.discard.fragment++; ++ break; ++ case 0x02: ++ err = "Tx aborted"; ++ adev->stats.tx_aborted_errors++; ++ break; ++ case 0x04: ++ err = "Tx desc wrong parameters"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x08: ++ err = "WEP key not found"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x10: ++ err = "MSDU lifetime timeout? - try changing " ++ "'iwconfig retry lifetime XXX'"; ++ adev->wstats.discard.misc++; ++ break; ++ case 0x20: ++ err = "excessive Tx retries due to either distance " ++ "too high or unable to Tx or Tx frame error - " ++ "try changing 'iwconfig txpower XXX' or " ++ "'sens'itivity or 'retry'"; ++ adev->wstats.discard.retries++; ++ /* Tx error 0x20 also seems to occur on ++ * overheating, so I'm not sure whether we ++ * actually want to do aggressive radio recalibration, ++ * since people maybe won't notice then that their hardware ++ * is slowly getting cooked... ++ * Or is it still a safe long distance from utter ++ * radio non-functionality despite many radio recalibs ++ * to final destructive overheating of the hardware? ++ * In this case we really should do recalib here... ++ * I guess the only way to find out is to do a ++ * potentially fatal self-experiment :-\ ++ * Or maybe only recalib in case we're using Tx ++ * rate auto (on errors switching to lower speed ++ * --> less heat?) or 802.11 power save mode? ++ * ++ * ok, just do it. */ ++ if (++adev->retry_errors_msg_ratelimit % 4 == 0) { ++ if (adev->retry_errors_msg_ratelimit <= 20) { ++ printk("%s: several excessive Tx " ++ "retry errors occurred, attempting " ++ "to recalibrate radio. Radio " ++ "drift might be caused by increasing " ++ "card temperature, please check the card " ++ "before it's too late!\n", ++ adev->ndev->name); ++ if (adev->retry_errors_msg_ratelimit == 20) ++ printk("disabling above message\n"); ++ } ++ ++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB); ++ } ++ break; ++ case 0x40: ++ err = "Tx buffer overflow"; ++ adev->stats.tx_fifo_errors++; ++ break; ++ case 0x80: ++ /* possibly ACPI C-state powersaving related!!! ++ * (DMA timeout due to excessively high wakeup ++ * latency after C-state activation!?) ++ * Disable C-State powersaving and try again, ++ * then PLEASE REPORT, I'm VERY interested in ++ * whether my theory is correct that this is ++ * actually the problem here. ++ * In that case, use new Linux idle wakeup latency ++ * requirements kernel API to prevent this issue. */ ++ err = "DMA error"; ++ adev->wstats.discard.misc++; ++ break; ++ } ++ adev->stats.tx_errors++; ++ if (adev->stats.tx_errors <= 20) ++ printk("%s: tx error 0x%02X, buf %02u! (%s)\n", ++ adev->ndev->name, error, finger, err); ++ else ++ printk("%s: tx error 0x%02X, buf %02u!\n", ++ adev->ndev->name, error, finger); ++} ++ ++ ++unsigned int ++acxpci_l_clean_txdesc(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ unsigned finger; ++ int num_cleaned; ++ u16 r111; ++ u8 error, ack_failures, rts_failures, rts_ok, r100; ++ ++ FN_ENTER; ++ ++ if (unlikely(acx_debug & L_DEBUG)) ++ log_txbuffer(adev); ++ ++ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail); ++ ++ /* We know first descr which is not free yet. We advance it as far ++ ** as we see correct bits set in following descs (if next desc ++ ** is NOT free, we shouldn't advance at all). We know that in ++ ** front of tx_tail may be "holes" with isolated free descs. ++ ** We will catch up when all intermediate descs will be freed also */ ++ ++ finger = adev->tx_tail; ++ num_cleaned = 0; ++ while (likely(finger != adev->tx_head)) { ++ txdesc = get_txdesc(adev, finger); ++ ++ /* If we allocated txdesc on tx path but then decided ++ ** to NOT use it, then it will be left as a free "bubble" ++ ** in the "allocated for tx" part of the ring. ++ ** We may meet it on the next ring pass here. */ ++ ++ /* stop if not marked as "tx finished" and "host owned" */ ++ if ((txdesc->Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN) ++ != DESC_CTL_ACXDONE_HOSTOWN) { ++ if (unlikely(!num_cleaned)) { /* maybe remove completely */ ++ log(L_BUFT, "clean_txdesc: tail isn't free. " ++ "tail:%d head:%d\n", ++ adev->tx_tail, adev->tx_head); ++ } ++ break; ++ } ++ ++ /* remember desc values... */ ++ error = txdesc->error; ++ ack_failures = txdesc->ack_failures; ++ rts_failures = txdesc->rts_failures; ++ rts_ok = txdesc->rts_ok; ++ r100 = txdesc->u.r1.rate; ++ r111 = le16_to_cpu(txdesc->u.r2.rate111); ++ ++ /* need to check for certain error conditions before we ++ * clean the descriptor: we still need valid descr data here */ ++ if (unlikely(0x30 & error)) { ++ /* only send IWEVTXDROP in case of retry or lifetime exceeded; ++ * all other errors mean we screwed up locally */ ++ union iwreq_data wrqu; ++ wlan_hdr_t *hdr; ++ txhostdesc_t *hostdesc; ++ ++ hostdesc = get_txhostdesc(adev, txdesc); ++ hdr = (wlan_hdr_t *)hostdesc->data; ++ MAC_COPY(wrqu.addr.sa_data, hdr->a1); ++ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL); ++ } ++ ++ /* ...and free the desc */ ++ txdesc->error = 0; ++ txdesc->ack_failures = 0; ++ txdesc->rts_failures = 0; ++ txdesc->rts_ok = 0; ++ /* signal host owning it LAST, since ACX already knows that this ++ ** descriptor is finished since it set Ctl_8 accordingly. */ ++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN; ++ ++ adev->tx_free++; ++ num_cleaned++; ++ ++ if ((adev->tx_free >= TX_START_QUEUE) ++ && (adev->status == ACX_STATUS_4_ASSOCIATED) ++ && (acx_queue_stopped(adev->ndev)) ++ ) { ++ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n", ++ adev->tx_free); ++ acx_wake_queue(adev->ndev, NULL); ++ } ++ ++ /* do error checking, rate handling and logging ++ * AFTER having done the work, it's faster */ ++ ++ /* do rate handling */ ++ if (adev->rate_auto) { ++ struct client *clt = get_txc(adev, txdesc); ++ if (clt) { ++ u16 cur = get_txr(adev, txdesc); ++ if (clt->rate_cur == cur) { ++ acx_l_handle_txrate_auto(adev, clt, ++ cur, /* intended rate */ ++ r100, r111, /* actually used rate */ ++ (error & 0x30), /* was there an error? */ ++ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free); ++ } ++ } ++ } ++ ++ if (unlikely(error)) ++ handle_tx_error(adev, error, finger); ++ ++ if (IS_ACX111(adev)) ++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n", ++ finger, ack_failures, rts_failures, rts_ok, r111); ++ else ++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n", ++ finger, ack_failures, rts_failures, rts_ok, r100); ++ ++ /* update pointer for descr to be cleaned next */ ++ finger = (finger + 1) % TX_CNT; ++ } ++ ++ /* remember last position */ ++ adev->tx_tail = finger; ++/* end: */ ++ FN_EXIT1(num_cleaned); ++ return num_cleaned; ++} ++ ++/* clean *all* Tx descriptors, and regardless of their previous state. ++ * Used for brute-force reset handling. */ ++void ++acxpci_l_clean_txdesc_emergency(acx_device_t *adev) ++{ ++ txdesc_t *txdesc; ++ int i; ++ ++ FN_ENTER; ++ ++ for (i = 0; i < TX_CNT; i++) { ++ txdesc = get_txdesc(adev, i); ++ ++ /* free it */ ++ txdesc->ack_failures = 0; ++ txdesc->rts_failures = 0; ++ txdesc->rts_ok = 0; ++ txdesc->error = 0; ++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN; ++ } ++ ++ adev->tx_free = TX_CNT; ++ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxpci_s_create_tx_host_desc_queue ++*/ ++ ++static void* ++allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg) ++{ ++ void *ptr; ++ ++ ptr = dma_alloc_coherent(adev->pdev ? &adev->pdev->dev : NULL, ++ size, phy, GFP_KERNEL); ++ ++ if (ptr) { ++ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n", ++ msg, (int)size, ptr, (unsigned long long)*phy); ++ memset(ptr, 0, size); ++ return ptr; ++ } ++ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n", ++ msg, (int)size); ++ return NULL; ++} ++ ++ ++static int ++acxpci_s_create_tx_host_desc_queue(acx_device_t *adev) ++{ ++ txhostdesc_t *hostdesc; ++ u8 *txbuf; ++ dma_addr_t hostdesc_phy; ++ dma_addr_t txbuf_phy; ++ int i; ++ ++ FN_ENTER; ++ ++ /* allocate TX buffer */ ++ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS; ++ adev->txbuf_start = allocate(adev, adev->txbuf_area_size, ++ &adev->txbuf_startphy, "txbuf_start"); ++ if (!adev->txbuf_start) ++ goto fail; ++ ++ /* allocate the TX host descriptor queue pool */ ++ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc); ++ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size, ++ &adev->txhostdesc_startphy, "txhostdesc_start"); ++ if (!adev->txhostdesc_start) ++ goto fail; ++ /* check for proper alignment of TX host descriptor pool */ ++ if ((long) adev->txhostdesc_start & 3) { ++ printk("acx: driver bug: dma alloc returns unaligned address\n"); ++ goto fail; ++ } ++ ++ hostdesc = adev->txhostdesc_start; ++ hostdesc_phy = adev->txhostdesc_startphy; ++ txbuf = adev->txbuf_start; ++ txbuf_phy = adev->txbuf_startphy; ++ ++#if 0 ++/* Each tx buffer is accessed by hardware via ++** txdesc -> txhostdesc(s) -> txbuffer(s). ++** We use only one txhostdesc per txdesc, but it looks like ++** acx111 is buggy: it accesses second txhostdesc ++** (via hostdesc.desc_phy_next field) even if ++** txdesc->length == hostdesc->length and thus ++** entire packet was placed into first txhostdesc. ++** Due to this bug acx111 hangs unless second txhostdesc ++** has le16_to_cpu(hostdesc.length) = 3 (or larger) ++** Storing NULL into hostdesc.desc_phy_next ++** doesn't seem to help. ++** ++** Update: although it worked on Xterasys XN-2522g ++** with len=3 trick, WG311v2 is even more bogus, doesn't work. ++** Keeping this code (#ifdef'ed out) for documentational purposes. ++*/ ++ for (i = 0; i < TX_CNT*2; i++) { ++ hostdesc_phy += sizeof(*hostdesc); ++ if (!(i & 1)) { ++ hostdesc->data_phy = cpu2acx(txbuf_phy); ++ /* hostdesc->data_offset = ... */ ++ /* hostdesc->reserved = ... */ ++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN); ++ /* hostdesc->length = ... */ ++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy); ++ hostdesc->pNext = ptr2acx(NULL); ++ /* hostdesc->Status = ... */ ++ /* below: non-hardware fields */ ++ hostdesc->data = txbuf; ++ ++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS; ++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS; ++ } else { ++ /* hostdesc->data_phy = ... */ ++ /* hostdesc->data_offset = ... */ ++ /* hostdesc->reserved = ... */ ++ /* hostdesc->Ctl_16 = ... */ ++ hostdesc->length = cpu_to_le16(3); /* bug workaround */ ++ /* hostdesc->desc_phy_next = ... */ ++ /* hostdesc->pNext = ... */ ++ /* hostdesc->Status = ... */ ++ /* below: non-hardware fields */ ++ /* hostdesc->data = ... */ ++ } ++ hostdesc++; ++ } ++#endif ++/* We initialize two hostdescs so that they point to adjacent ++** memory areas. Thus txbuf is really just a contiguous memory area */ ++ for (i = 0; i < TX_CNT*2; i++) { ++ hostdesc_phy += sizeof(*hostdesc); ++ ++ hostdesc->data_phy = cpu2acx(txbuf_phy); ++ /* done by memset(0): hostdesc->data_offset = 0; */ ++ /* hostdesc->reserved = ... */ ++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN); ++ /* hostdesc->length = ... */ ++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy); ++ /* done by memset(0): hostdesc->pNext = ptr2acx(NULL); */ ++ /* hostdesc->Status = ... */ ++ /* ->data is a non-hardware field: */ ++ hostdesc->data = txbuf; ++ ++ if (!(i & 1)) { ++ txbuf += WLAN_HDR_A3_LEN; ++ txbuf_phy += WLAN_HDR_A3_LEN; ++ } else { ++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN; ++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN; ++ } ++ hostdesc++; ++ } ++ hostdesc--; ++ hostdesc->desc_phy_next = cpu2acx(adev->txhostdesc_startphy); ++ ++ FN_EXIT1(OK); ++ return OK; ++fail: ++ printk("acx: create_tx_host_desc_queue FAILED\n"); ++ /* dealloc will be done by free function on error case */ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*************************************************************** ++** acxpci_s_create_rx_host_desc_queue ++*/ ++/* the whole size of a data buffer (header plus data body) ++ * plus 32 bytes safety offset at the end */ ++#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32) ++ ++static int ++acxpci_s_create_rx_host_desc_queue(acx_device_t *adev) ++{ ++ rxhostdesc_t *hostdesc; ++ rxbuffer_t *rxbuf; ++ dma_addr_t hostdesc_phy; ++ dma_addr_t rxbuf_phy; ++ int i; ++ ++ FN_ENTER; ++ ++ /* allocate the RX host descriptor queue pool */ ++ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc); ++ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size, ++ &adev->rxhostdesc_startphy, "rxhostdesc_start"); ++ if (!adev->rxhostdesc_start) ++ goto fail; ++ /* check for proper alignment of RX host descriptor pool */ ++ if ((long) adev->rxhostdesc_start & 3) { ++ printk("acx: driver bug: dma alloc returns unaligned address\n"); ++ goto fail; ++ } ++ ++ /* allocate Rx buffer pool which will be used by the acx ++ * to store the whole content of the received frames in it */ ++ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE; ++ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size, ++ &adev->rxbuf_startphy, "rxbuf_start"); ++ if (!adev->rxbuf_start) ++ goto fail; ++ ++ rxbuf = adev->rxbuf_start; ++ rxbuf_phy = adev->rxbuf_startphy; ++ hostdesc = adev->rxhostdesc_start; ++ hostdesc_phy = adev->rxhostdesc_startphy; ++ ++ /* don't make any popular C programming pointer arithmetic mistakes ++ * here, otherwise I'll kill you... ++ * (and don't dare asking me why I'm warning you about that...) */ ++ for (i = 0; i < RX_CNT; i++) { ++ hostdesc->data = rxbuf; ++ hostdesc->data_phy = cpu2acx(rxbuf_phy); ++ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE); ++ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN)); ++ rxbuf++; ++ rxbuf_phy += sizeof(*rxbuf); ++ hostdesc_phy += sizeof(*hostdesc); ++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy); ++ hostdesc++; ++ } ++ hostdesc--; ++ hostdesc->desc_phy_next = cpu2acx(adev->rxhostdesc_startphy); ++ FN_EXIT1(OK); ++ return OK; ++fail: ++ printk("acx: create_rx_host_desc_queue FAILED\n"); ++ /* dealloc will be done by free function on error case */ ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*************************************************************** ++** acxpci_s_create_hostdesc_queues ++*/ ++int ++acxpci_s_create_hostdesc_queues(acx_device_t *adev) ++{ ++ int result; ++ result = acxpci_s_create_tx_host_desc_queue(adev); ++ if (OK != result) return result; ++ result = acxpci_s_create_rx_host_desc_queue(adev); ++ return result; ++} ++ ++ ++/*************************************************************** ++** acxpci_create_tx_desc_queue ++*/ ++static void ++acxpci_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start) ++{ ++ txdesc_t *txdesc; ++ txhostdesc_t *hostdesc; ++ dma_addr_t hostmemptr; ++ u32 mem_offs; ++ int i; ++ ++ FN_ENTER; ++ ++ if (IS_ACX100(adev)) ++ adev->txdesc_size = sizeof(*txdesc); ++ else ++ /* the acx111 txdesc is 4 bytes larger */ ++ adev->txdesc_size = sizeof(*txdesc) + 4; ++ ++ adev->txdesc_start = (txdesc_t *) (adev->iobase2 + tx_queue_start); ++ ++ log(L_DEBUG, "adev->iobase2=%p\n" ++ "tx_queue_start=%08X\n" ++ "adev->txdesc_start=%p\n", ++ adev->iobase2, ++ tx_queue_start, ++ adev->txdesc_start); ++ ++ adev->tx_free = TX_CNT; ++ /* done by memset: adev->tx_head = 0; */ ++ /* done by memset: adev->tx_tail = 0; */ ++ txdesc = adev->txdesc_start; ++ mem_offs = tx_queue_start; ++ hostmemptr = adev->txhostdesc_startphy; ++ hostdesc = adev->txhostdesc_start; ++ ++ if (IS_ACX111(adev)) { ++ /* ACX111 has a preinitialized Tx buffer! */ ++ /* loop over whole send pool */ ++ /* FIXME: do we have to do the hostmemptr stuff here?? */ ++ for (i = 0; i < TX_CNT; i++) { ++ txdesc->HostMemPtr = ptr2acx(hostmemptr); ++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN; ++ /* reserve two (hdr desc and payload desc) */ ++ hostdesc += 2; ++ hostmemptr += 2 * sizeof(*hostdesc); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ } else { ++ /* ACX100 Tx buffer needs to be initialized by us */ ++ /* clear whole send pool. sizeof is safe here (we are acx100) */ ++ memset(adev->txdesc_start, 0, TX_CNT * sizeof(*txdesc)); ++ ++ /* loop over whole send pool */ ++ for (i = 0; i < TX_CNT; i++) { ++ log(L_DEBUG, "configure card tx descriptor: 0x%p, " ++ "size: 0x%X\n", txdesc, adev->txdesc_size); ++ ++ /* pointer to hostdesc memory */ ++ txdesc->HostMemPtr = ptr2acx(hostmemptr); ++ /* initialise ctl */ ++ txdesc->Ctl_8 = ( DESC_CTL_HOSTOWN | DESC_CTL_RECLAIM ++ | DESC_CTL_AUTODMA | DESC_CTL_FIRSTFRAG); ++ /* done by memset(0): txdesc->Ctl2_8 = 0; */ ++ /* point to next txdesc */ ++ txdesc->pNextDesc = cpu2acx(mem_offs + adev->txdesc_size); ++ /* reserve two (hdr desc and payload desc) */ ++ hostdesc += 2; ++ hostmemptr += 2 * sizeof(*hostdesc); ++ /* go to the next one */ ++ mem_offs += adev->txdesc_size; ++ /* ++ is safe here (we are acx100) */ ++ txdesc++; ++ } ++ /* go back to the last one */ ++ txdesc--; ++ /* and point to the first making it a ring buffer */ ++ txdesc->pNextDesc = cpu2acx(tx_queue_start); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxpci_create_rx_desc_queue ++*/ ++static void ++acxpci_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start) ++{ ++ rxdesc_t *rxdesc; ++ u32 mem_offs; ++ int i; ++ ++ FN_ENTER; ++ ++ /* done by memset: adev->rx_tail = 0; */ ++ ++ /* ACX111 doesn't need any further config: preconfigures itself. ++ * Simply print ring buffer for debugging */ ++ if (IS_ACX111(adev)) { ++ /* rxdesc_start already set here */ ++ ++ adev->rxdesc_start = (rxdesc_t *) ((u8 *)adev->iobase2 + rx_queue_start); ++ ++ rxdesc = adev->rxdesc_start; ++ for (i = 0; i < RX_CNT; i++) { ++ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc); ++ rxdesc = adev->rxdesc_start = (rxdesc_t *) ++ (adev->iobase2 + acx2cpu(rxdesc->pNextDesc)); ++ } ++ } else { ++ /* we didn't pre-calculate rxdesc_start in case of ACX100 */ ++ /* rxdesc_start should be right AFTER Tx pool */ ++ adev->rxdesc_start = (rxdesc_t *) ++ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t))); ++ /* NB: sizeof(txdesc_t) above is valid because we know ++ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere! ++ ** acx111's txdesc is larger! */ ++ ++ memset(adev->rxdesc_start, 0, RX_CNT * sizeof(*rxdesc)); ++ ++ /* loop over whole receive pool */ ++ rxdesc = adev->rxdesc_start; ++ mem_offs = rx_queue_start; ++ for (i = 0; i < RX_CNT; i++) { ++ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc); ++ rxdesc->Ctl_8 = DESC_CTL_RECLAIM | DESC_CTL_AUTODMA; ++ /* point to next rxdesc */ ++ rxdesc->pNextDesc = cpu2acx(mem_offs + sizeof(*rxdesc)); ++ /* go to the next one */ ++ mem_offs += sizeof(*rxdesc); ++ rxdesc++; ++ } ++ /* go to the last one */ ++ rxdesc--; ++ ++ /* and point to the first making it a ring buffer */ ++ rxdesc->pNextDesc = cpu2acx(rx_queue_start); ++ } ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxpci_create_desc_queues ++*/ ++void ++acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start) ++{ ++ acxpci_create_tx_desc_queue(adev, tx_queue_start); ++ acxpci_create_rx_desc_queue(adev, rx_queue_start); ++} ++ ++ ++/*************************************************************** ++** acxpci_s_proc_diag_output ++*/ ++char* ++acxpci_s_proc_diag_output(char *p, acx_device_t *adev) ++{ ++ const char *rtl, *thd, *ttl; ++ rxhostdesc_t *rxhostdesc; ++ txdesc_t *txdesc; ++ int i; ++ ++ FN_ENTER; ++ ++ p += sprintf(p, "** Rx buf **\n"); ++ rxhostdesc = adev->rxhostdesc_start; ++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) { ++ rtl = (i == adev->rx_tail) ? " [tail]" : ""; ++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN)) ++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)) ) ++ p += sprintf(p, "%02u FULL%s\n", i, rtl); ++ else ++ p += sprintf(p, "%02u empty%s\n", i, rtl); ++ rxhostdesc++; ++ } ++ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free, ++ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running"); ++ txdesc = adev->txdesc_start; ++ if (txdesc) for (i = 0; i < TX_CNT; i++) { ++ thd = (i == adev->tx_head) ? " [head]" : ""; ++ ttl = (i == adev->tx_tail) ? " [tail]" : ""; ++ if (txdesc->Ctl_8 & DESC_CTL_ACXDONE) ++ p += sprintf(p, "%02u free (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl); ++ else ++ p += sprintf(p, "%02u tx (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl); ++ txdesc = advance_txdesc(adev, txdesc, 1); ++ } ++ p += sprintf(p, ++ "\n" ++ "** PCI data **\n" ++ "txbuf_start %p, txbuf_area_size %u, txbuf_startphy %08llx\n" ++ "txdesc_size %u, txdesc_start %p\n" ++ "txhostdesc_start %p, txhostdesc_area_size %u, txhostdesc_startphy %08llx\n" ++ "rxdesc_start %p\n" ++ "rxhostdesc_start %p, rxhostdesc_area_size %u, rxhostdesc_startphy %08llx\n" ++ "rxbuf_start %p, rxbuf_area_size %u, rxbuf_startphy %08llx\n", ++ adev->txbuf_start, adev->txbuf_area_size, ++ (unsigned long long)adev->txbuf_startphy, ++ adev->txdesc_size, adev->txdesc_start, ++ adev->txhostdesc_start, adev->txhostdesc_area_size, ++ (unsigned long long)adev->txhostdesc_startphy, ++ adev->rxdesc_start, ++ adev->rxhostdesc_start, adev->rxhostdesc_area_size, ++ (unsigned long long)adev->rxhostdesc_startphy, ++ adev->rxbuf_start, adev->rxbuf_area_size, ++ (unsigned long long)adev->rxbuf_startphy); ++ ++ FN_EXIT0; ++ return p; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxpci_proc_eeprom_output(char *buf, acx_device_t *adev) ++{ ++ char *p = buf; ++ int i; ++ ++ FN_ENTER; ++ ++ for (i = 0; i < 0x400; i++) { ++ acxpci_read_eeprom_byte(adev, i, p++); ++ } ++ ++ FN_EXIT1(p - buf); ++ return p - buf; ++} ++ ++ ++/*********************************************************************** ++*/ ++void ++acxpci_set_interrupt_mask(acx_device_t *adev) ++{ ++ if (IS_ACX111(adev)) { ++ adev->irq_mask = (u16) ~(0 ++ /* | HOST_INT_RX_DATA */ ++ | HOST_INT_TX_COMPLETE ++ /* | HOST_INT_TX_XFER */ ++ | HOST_INT_RX_COMPLETE ++ /* | HOST_INT_DTIM */ ++ /* | HOST_INT_BEACON */ ++ /* | HOST_INT_TIMER */ ++ /* | HOST_INT_KEY_NOT_FOUND */ ++ | HOST_INT_IV_ICV_FAILURE ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ /* | HOST_INT_OVERFLOW */ ++ /* | HOST_INT_PROCESS_ERROR */ ++ | HOST_INT_SCAN_COMPLETE ++ | HOST_INT_FCS_THRESHOLD ++ /* | HOST_INT_UNKNOWN */ ++ ); ++ /* Or else acx100 won't signal cmd completion, right? */ ++ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */ ++ } else { ++ adev->irq_mask = (u16) ~(0 ++ /* | HOST_INT_RX_DATA */ ++ | HOST_INT_TX_COMPLETE ++ /* | HOST_INT_TX_XFER */ ++ | HOST_INT_RX_COMPLETE ++ /* | HOST_INT_DTIM */ ++ /* | HOST_INT_BEACON */ ++ /* | HOST_INT_TIMER */ ++ /* | HOST_INT_KEY_NOT_FOUND */ ++ /* | HOST_INT_IV_ICV_FAILURE */ ++ | HOST_INT_CMD_COMPLETE ++ | HOST_INT_INFO ++ /* | HOST_INT_OVERFLOW */ ++ /* | HOST_INT_PROCESS_ERROR */ ++ | HOST_INT_SCAN_COMPLETE ++ /* | HOST_INT_FCS_THRESHOLD */ ++ /* | HOST_INT_UNKNOWN */ ++ ); ++ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */ ++ } ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm) ++{ ++ /* since it can be assumed that at least the Maxim radio has a ++ * maximum power output of 20dBm and since it also can be ++ * assumed that these values drive the DAC responsible for ++ * setting the linear Tx level, I'd guess that these values ++ * should be the corresponding linear values for a dBm value, ++ * in other words: calculate the values from that formula: ++ * Y [dBm] = 10 * log (X [mW]) ++ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm) ++ * and you're done... ++ * Hopefully that's ok, but you never know if we're actually ++ * right... (especially since Windows XP doesn't seem to show ++ * actual Tx dBm values :-P) */ ++ ++ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the ++ * values are EXACTLY mW!!! Not sure about RFMD and others, ++ * though... */ ++ static const u8 dbm2val_maxim[21] = { ++ 63, 63, 63, 62, ++ 61, 61, 60, 60, ++ 59, 58, 57, 55, ++ 53, 50, 47, 43, ++ 38, 31, 23, 13, ++ 0 ++ }; ++ static const u8 dbm2val_rfmd[21] = { ++ 0, 0, 0, 1, ++ 2, 2, 3, 3, ++ 4, 5, 6, 8, ++ 10, 13, 16, 20, ++ 25, 32, 41, 50, ++ 63 ++ }; ++ const u8 *table; ++ ++ switch (adev->radio_type) { ++ case RADIO_MAXIM_0D: ++ table = &dbm2val_maxim[0]; ++ break; ++ case RADIO_RFMD_11: ++ case RADIO_RALINK_15: ++ table = &dbm2val_rfmd[0]; ++ break; ++ default: ++ printk("%s: unknown/unsupported radio type, " ++ "cannot modify tx power level yet!\n", ++ adev->ndev->name); ++ return NOT_OK; ++ } ++ printk("%s: changing radio power level to %u dBm (%u)\n", ++ adev->ndev->name, level_dbm, table[level_dbm]); ++ acxpci_s_write_phy_reg(adev, 0x11, table[level_dbm]); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** Data for init_module/cleanup_module ++*/ ++static const struct pci_device_id ++acxpci_id_tbl[] __devinitdata = { ++ { ++ .vendor = PCI_VENDOR_ID_TI, ++ .device = PCI_DEVICE_ID_TI_TNETW1100A, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .driver_data = CHIPTYPE_ACX100, ++ }, ++ { ++ .vendor = PCI_VENDOR_ID_TI, ++ .device = PCI_DEVICE_ID_TI_TNETW1100B, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .driver_data = CHIPTYPE_ACX100, ++ }, ++ { ++ .vendor = PCI_VENDOR_ID_TI, ++ .device = PCI_DEVICE_ID_TI_TNETW1130, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .driver_data = CHIPTYPE_ACX111, ++ }, ++ { ++ .vendor = 0, ++ .device = 0, ++ .subvendor = 0, ++ .subdevice = 0, ++ .driver_data = 0, ++ } ++}; ++ ++MODULE_DEVICE_TABLE(pci, acxpci_id_tbl); ++ ++/* FIXME: checks should be removed once driver is included in the kernel */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11) ++/* pci_name() got introduced at start of 2.6.x, ++ * got mandatory (slot_name member removed) in 2.6.11-bk1 */ ++#define pci_name(x) x->slot_name ++#endif ++ ++static struct pci_driver ++acxpci_drv_id = { ++ .name = "acx_pci", ++ .id_table = acxpci_id_tbl, ++ .probe = acxpci_e_probe, ++ .remove = __devexit_p(acxpci_e_remove), ++#ifdef CONFIG_PM ++ .suspend = acxpci_e_suspend, ++ .resume = acxpci_e_resume ++#endif /* CONFIG_PM */ ++}; ++ ++ ++/*********************************************************************** ++** acxpci_e_init_module ++** ++** Module initialization routine, called once at module load time ++*/ ++int __init ++acxpci_e_init_module(void) ++{ ++ int res; ++ ++ FN_ENTER; ++ ++#if (ACX_IO_WIDTH==32) ++ printk("acx: compiled to use 32bit I/O access. " ++ "I/O timing issues might occur, such as " ++ "non-working firmware upload. Report them\n"); ++#else ++ printk("acx: compiled to use 16bit I/O access only " ++ "(compatibility mode)\n"); ++#endif ++ ++#ifdef __LITTLE_ENDIAN ++#define ENDIANNESS_STRING "running on a little-endian CPU\n" ++#else ++#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n" ++#endif ++ log(L_INIT, ++ ENDIANNESS_STRING ++ "PCI module " ACX_RELEASE " initialized, " ++ "waiting for cards to probe...\n" ++ ); ++ ++ res = pci_register_driver(&acxpci_drv_id); ++ FN_EXIT1(res); ++ return res; ++} ++ ++ ++/*********************************************************************** ++** acxpci_e_cleanup_module ++** ++** Called at module unload time. This is our last chance to ++** clean up after ourselves. ++*/ ++void __exit ++acxpci_e_cleanup_module(void) ++{ ++ FN_ENTER; ++ ++ pci_unregister_driver(&acxpci_drv_id); ++ ++ FN_EXIT0; ++} +Index: linux-2.6.23/drivers/net/wireless/acx/rx3000_acx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/rx3000_acx.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,110 @@ ++/* ++ * WLAN (TI TNETW1100B) support in the HP iPAQ RX3000 ++ * ++ * Copyright (c) 2006 SDG Systems, LLC ++ * Copyright (c) 2006 Roman Moravcik ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * Based on hx4700_acx.c ++ */ ++ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx_hw.h" ++ ++extern struct platform_device s3c_device_asic3; ++ ++static int rx3000_wlan_start(void) ++{ ++ DPM_DEBUG("rx3000_acx: Turning on\n"); ++ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3); ++ mdelay(20); ++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, ASIC3_GPC13); ++ mdelay(20); ++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, ASIC3_GPC11); ++ mdelay(100); ++ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3); ++ mdelay(20); ++ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_nGCS4); ++ mdelay(100); ++ s3c2410_gpio_setpin(S3C2410_GPA11, 0); ++ mdelay(50); ++ s3c2410_gpio_setpin(S3C2410_GPA11, 1); ++ led_trigger_event_shared(rx3000_radio_trig, LED_FULL); ++ return 0; ++} ++ ++static int rx3000_wlan_stop(void) ++{ ++ DPM_DEBUG("rx3000_acx: Turning off\n"); ++ s3c2410_gpio_setpin(S3C2410_GPA15, 1); ++ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_OUT); ++ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, 0); ++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, 0); ++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, 0); ++ led_trigger_event_shared(rx3000_radio_trig, LED_OFF); ++ return 0; ++} ++ ++static struct resource acx_resources[] = { ++ [0] = { ++ .start = RX3000_PA_WLAN, ++ .end = RX3000_PA_WLAN + 0x20, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = IRQ_EINT16, ++ .end = IRQ_EINT16, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct acx_hardware_data acx_data = { ++ .start_hw = rx3000_wlan_start, ++ .stop_hw = rx3000_wlan_stop, ++}; ++ ++static struct platform_device acx_device = { ++ .name = "acx-mem", ++ .dev = { ++ .platform_data = &acx_data, ++ }, ++ .num_resources = ARRAY_SIZE(acx_resources), ++ .resource = acx_resources, ++}; ++ ++static int __init rx3000_wlan_init(void) ++{ ++ printk("rx3000_wlan_init: acx-mem platform_device_register\n"); ++ return platform_device_register(&acx_device); ++} ++ ++ ++static void __exit rx3000_wlan_exit(void) ++{ ++ platform_device_unregister(&acx_device); ++} ++ ++module_init(rx3000_wlan_init); ++module_exit(rx3000_wlan_exit); ++ ++MODULE_AUTHOR("Todd Blumer , Roman Moravcik "); ++MODULE_DESCRIPTION("WLAN driver for HP iPAQ RX3000"); ++MODULE_LICENSE("GPL"); ++ +Index: linux-2.6.23/drivers/net/wireless/acx/setrate.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/setrate.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,213 @@ ++/* TODO: stop #including, move into wireless.c ++ * until then, keep in sync copies in prism54/ and acx/ dirs ++ * code+data size: less than 1k */ ++ ++enum { ++ DOT11_RATE_1, ++ DOT11_RATE_2, ++ DOT11_RATE_5, ++ DOT11_RATE_11, ++ DOT11_RATE_22, ++ DOT11_RATE_33, ++ DOT11_RATE_6, ++ DOT11_RATE_9, ++ DOT11_RATE_12, ++ DOT11_RATE_18, ++ DOT11_RATE_24, ++ DOT11_RATE_36, ++ DOT11_RATE_48, ++ DOT11_RATE_54 ++}; ++enum { ++ DOT11_MOD_DBPSK, ++ DOT11_MOD_DQPSK, ++ DOT11_MOD_CCK, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_CCKOFDM, ++ DOT11_MOD_PBCC ++}; ++static const u8 ratelist[] = { 1,2,5,11,22,33,6,9,12,18,24,36,48,54 }; ++static const u8 dot11ratebyte[] = { 1*2,2*2,11,11*2,22*2,33*2,6*2,9*2,12*2,18*2,24*2,36*2,48*2,54*2 }; ++static const u8 default_modulation[] = { ++ DOT11_MOD_DBPSK, ++ DOT11_MOD_DQPSK, ++ DOT11_MOD_CCK, ++ DOT11_MOD_CCK, ++ DOT11_MOD_PBCC, ++ DOT11_MOD_PBCC, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM, ++ DOT11_MOD_OFDM ++}; ++ ++static /* TODO: remove 'static' when moved to wireless.c */ ++int ++rate_mbit2enum(int n) { ++ int i=0; ++ while(i=DOT11_RATE_6) return DOT11_MOD_OFDM; */ ++ return default_modulation[r_enum]; ++ } ++ if(suffix=='c') { ++ if(r_enumDOT11_RATE_11) return -EINVAL; ++ return DOT11_MOD_CCK; ++ } ++ if(suffix=='p') { ++ if(r_enumDOT11_RATE_33) return -EINVAL; ++ return DOT11_MOD_PBCC; ++ } ++ if(suffix=='o') { ++ if(r_enumINT_MAX) return -EINVAL; ++ ++ rate_enum = rate_mbit2enum(rate_mbit); ++ if(rate_enum<0) return rate_enum; ++ ++ c = *str; ++ mod = get_modulation(rate_enum, c); ++ if(mod<0) return mod; ++ ++ if(c>='a' && c<='z') c = *++str; ++ if(c!=',' && c!=' ' && c!='\0') return -EINVAL; ++ ++ if(supported) { ++ int r = supported(rate_mbit, mod, opaque); ++ if(r) return r; ++ } ++ ++ *vector++ = dot11ratebyte[rate_enum] | or_mask; ++ ++ size--; ++ str++; ++ } while(size>0 && c==','); ++ ++ if(size<1) return -E2BIG; ++ *vector=0; /* TODO: sort, remove dups? */ ++ ++ *pstr = str-1; ++ return 0; ++} ++ ++static /* TODO: remove 'static' when moved to wireless.c */ ++int ++fill_ratevectors(const char *str, u8 *brate, u8 *orate, int size, ++ int (*supported)(int mbit, int mod, void *opaque), void *opaque) ++{ ++ int r; ++ ++ r = fill_ratevector(&str, brate, size, supported, opaque, 0x80); ++ if(r) return r; ++ ++ orate[0] = 0; ++ if(*str==' ') { ++ str++; ++ r = fill_ratevector(&str, orate, size, supported, opaque, 0); ++ if(r) return r; ++ /* TODO: sanitize, e.g. remove/error on rates already in basic rate set? */ ++ } ++ if(*str) ++ return -EINVAL; ++ ++ return 0; ++} ++#endif ++ ++/* TODO: use u64 masks? */ ++ ++static int ++fill_ratemask(const char **pstr, u32* mask, ++ int (*supported)(int mbit, int mod,void *opaque), ++ u32 (*gen_mask)(int mbit, int mod,void *opaque), ++ void *opaque) ++{ ++ unsigned long rate_mbit; ++ int rate_enum,mod; ++ u32 m = 0; ++ const char *str = *pstr; ++ char c; ++ ++ do { ++ rate_mbit = simple_strtoul(str, (char**)&str, 10); ++ if(rate_mbit>INT_MAX) return -EINVAL; ++ ++ rate_enum = rate_mbit2enum(rate_mbit); ++ if(rate_enum<0) return rate_enum; ++ ++ c = *str; ++ mod = get_modulation(rate_enum, c); ++ if(mod<0) return mod; ++ ++ if(c>='a' && c<='z') c = *++str; ++ if(c!=',' && c!=' ' && c!='\0') return -EINVAL; ++ ++ if(supported) { ++ int r = supported(rate_mbit, mod, opaque); ++ if(r) return r; ++ } ++ ++ m |= gen_mask(rate_mbit, mod, opaque); ++ str++; ++ } while(c==','); ++ ++ *pstr = str-1; ++ *mask |= m; ++ return 0; ++} ++ ++static /* TODO: remove 'static' when moved to wireless.c */ ++int ++fill_ratemasks(const char *str, u32 *bmask, u32 *omask, ++ int (*supported)(int mbit, int mod,void *opaque), ++ u32 (*gen_mask)(int mbit, int mod,void *opaque), ++ void *opaque) ++{ ++ int r; ++ ++ r = fill_ratemask(&str, bmask, supported, gen_mask, opaque); ++ if(r) return r; ++ ++ if(*str==' ') { ++ str++; ++ r = fill_ratemask(&str, omask, supported, gen_mask, opaque); ++ if(r) return r; ++ } ++ if(*str) ++ return -EINVAL; ++ return 0; ++} +Index: linux-2.6.23/drivers/net/wireless/acx/usb.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/usb.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,1922 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++/*********************************************************************** ++** USB support for TI ACX100 based devices. Many parts are taken from ++** the PCI driver. ++** ++** Authors: ++** Martin Wawro ++** Andreas Mohr ++** ++** LOCKING ++** callback functions called by USB core are running in interrupt context ++** and thus have names with _i_. ++*/ ++#define ACX_USB 1 ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "acx.h" ++ ++ ++/*********************************************************************** ++*/ ++/* number of endpoints of an interface */ ++#define NUM_EP(intf) (intf)->altsetting[0].desc.bNumEndpoints ++#define EP(intf, nr) (intf)->altsetting[0].endpoint[(nr)].desc ++#define GET_DEV(udev) usb_get_dev((udev)) ++#define PUT_DEV(udev) usb_put_dev((udev)) ++#define SET_NETDEV_OWNER(ndev, owner) /* not needed anymore ??? */ ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) ++/* removed in 2.6.14. We will use fake value for now */ ++#define URB_ASYNC_UNLINK 0 ++#endif ++ ++ ++/*********************************************************************** ++*/ ++/* ACX100 (TNETW1100) USB device: D-Link DWL-120+ */ ++#define ACX100_VENDOR_ID 0x2001 ++#define ACX100_PRODUCT_ID_UNBOOTED 0x3B01 ++#define ACX100_PRODUCT_ID_BOOTED 0x3B00 ++ ++/* TNETW1450 USB devices */ ++#define VENDOR_ID_DLINK 0x07b8 /* D-Link Corp. */ ++#define PRODUCT_ID_WUG2400 0xb21a /* AboCom WUG2400 or SafeCom SWLUT-54125 */ ++#define VENDOR_ID_AVM_GMBH 0x057c ++#define PRODUCT_ID_AVM_WLAN_USB 0x5601 ++#define PRODUCT_ID_AVM_WLAN_USB_si 0x6201 /* "self install" named Version: driver kills kernel on inbound scans from fritz box ??? */ ++#define VENDOR_ID_ZCOM 0x0cde ++#define PRODUCT_ID_ZCOM_XG750 0x0017 /* not tested yet */ ++#define VENDOR_ID_TI 0x0451 ++#define PRODUCT_ID_TI_UNKNOWN 0x60c5 /* not tested yet */ ++ ++#define ACX_USB_CTRL_TIMEOUT 5500 /* steps in ms */ ++ ++/* Buffer size for fw upload, same for both ACX100 USB and TNETW1450 */ ++#define USB_RWMEM_MAXLEN 2048 ++ ++/* The number of bulk URBs to use */ ++#define ACX_TX_URB_CNT 8 ++#define ACX_RX_URB_CNT 2 ++ ++/* Should be sent to the bulkout endpoint */ ++#define ACX_USB_REQ_UPLOAD_FW 0x10 ++#define ACX_USB_REQ_ACK_CS 0x11 ++#define ACX_USB_REQ_CMD 0x12 ++ ++/*********************************************************************** ++** Prototypes ++*/ ++static int acxusb_e_probe(struct usb_interface *, const struct usb_device_id *); ++static void acxusb_e_disconnect(struct usb_interface *); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++static void acxusb_i_complete_tx(struct urb *); ++static void acxusb_i_complete_rx(struct urb *); ++#else ++static void acxusb_i_complete_tx(struct urb *, struct pt_regs *); ++static void acxusb_i_complete_rx(struct urb *, struct pt_regs *); ++#endif ++static int acxusb_e_open(struct net_device *); ++static int acxusb_e_close(struct net_device *); ++static void acxusb_i_set_rx_mode(struct net_device *); ++static int acxusb_boot(struct usb_device *, int is_tnetw1450, int *radio_type); ++ ++static void acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx); ++ ++static void acxusb_i_tx_timeout(struct net_device *); ++ ++/* static void dump_device(struct usb_device *); */ ++/* static void dump_device_descriptor(struct usb_device_descriptor *); */ ++/* static void dump_config_descriptor(struct usb_config_descriptor *); */ ++ ++/*********************************************************************** ++** Module Data ++*/ ++#define TXBUFSIZE sizeof(usb_txbuffer_t) ++/* ++ * Now, this is just plain lying, but the device insists in giving us ++ * huge packets. We supply extra space after rxbuffer. Need to understand ++ * it better... ++ */ ++#define RXBUFSIZE (sizeof(rxbuffer_t) + \ ++ (sizeof(usb_rx_t) - sizeof(struct usb_rx_plain))) ++ ++static const struct usb_device_id ++acxusb_ids[] = { ++ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_BOOTED) }, ++ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_UNBOOTED) }, ++ { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_WUG2400) }, ++ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB) }, ++ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB_si) }, ++ { USB_DEVICE(VENDOR_ID_ZCOM, PRODUCT_ID_ZCOM_XG750) }, ++ { USB_DEVICE(VENDOR_ID_TI, PRODUCT_ID_TI_UNKNOWN) }, ++ {} ++}; ++ ++MODULE_DEVICE_TABLE(usb, acxusb_ids); ++ ++/* USB driver data structure as required by the kernel's USB core */ ++static struct usb_driver ++acxusb_driver = { ++ .name = "acx_usb", ++ .probe = acxusb_e_probe, ++ .disconnect = acxusb_e_disconnect, ++ .id_table = acxusb_ids ++}; ++ ++ ++/*********************************************************************** ++** USB helper ++** ++** ldd3 ch13 says: ++** When the function is usb_kill_urb, the urb lifecycle is stopped. This ++** function is usually used when the device is disconnected from the system, ++** in the disconnect callback. For some drivers, the usb_unlink_urb function ++** should be used to tell the USB core to stop an urb. This function does not ++** wait for the urb to be fully stopped before returning to the caller. ++** This is useful for stoppingthe urb while in an interrupt handler or when ++** a spinlock is held, as waiting for a urb to fully stop requires the ability ++** for the USB core to put the calling process to sleep. This function requires ++** that the URB_ASYNC_UNLINK flag value be set in the urb that is being asked ++** to be stopped in order to work properly. ++** ++** (URB_ASYNC_UNLINK is obsolete, usb_unlink_urb will always be ++** asynchronous while usb_kill_urb is synchronous and should be called ++** directly (drivers/usb/core/urb.c)) ++** ++** In light of this, timeout is just for paranoid reasons... ++* ++* Actually, it's useful for debugging. If we reach timeout, we're doing ++* something wrong with the urbs. ++*/ ++static void ++acxusb_unlink_urb(struct urb* urb) ++{ ++ if (!urb) ++ return; ++ ++ if (urb->status == -EINPROGRESS) { ++ int timeout = 10; ++ ++ usb_unlink_urb(urb); ++ while (--timeout && urb->status == -EINPROGRESS) { ++ mdelay(1); ++ } ++ if (!timeout) { ++ printk("acx_usb: urb unlink timeout!\n"); ++ } ++ } ++} ++ ++ ++/*********************************************************************** ++** EEPROM and PHY read/write helpers ++*/ ++/*********************************************************************** ++** acxusb_s_read_phy_reg ++*/ ++int ++acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf) ++{ ++ /* mem_read_write_t mem; */ ++ ++ FN_ENTER; ++ ++ printk("%s doesn't seem to work yet, disabled.\n", __func__); ++ ++ /* ++ mem.addr = cpu_to_le16(reg); ++ mem.type = cpu_to_le16(0x82); ++ mem.len = cpu_to_le32(4); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_READ, &mem, sizeof(mem)); ++ *charbuf = mem.data; ++ log(L_DEBUG, "read radio PHY[0x%04X]=0x%02X\n", reg, *charbuf); ++ */ ++ ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++*/ ++int ++acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value) ++{ ++ mem_read_write_t mem; ++ ++ FN_ENTER; ++ ++ mem.addr = cpu_to_le16(reg); ++ mem.type = cpu_to_le16(0x82); ++ mem.len = cpu_to_le32(4); ++ mem.data = value; ++ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_WRITE, &mem, sizeof(mem)); ++ log(L_DEBUG, "write radio PHY[0x%04X]=0x%02X\n", reg, value); ++ ++ FN_EXIT1(OK); ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acxusb_s_issue_cmd_timeo ++** Excecutes a command in the command mailbox ++** ++** buffer = a pointer to the data. ++** The data must not include 4 byte command header ++*/ ++ ++/* TODO: ideally we shall always know how much we need ++** and this shall be 0 */ ++#define BOGUS_SAFETY_PADDING 0x40 ++ ++#undef FUNC ++#define FUNC "issue_cmd" ++ ++#if !ACX_DEBUG ++int ++acxusb_s_issue_cmd_timeo( ++ acx_device_t *adev, ++ unsigned cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned timeout) ++{ ++#else ++int ++acxusb_s_issue_cmd_timeo_debug( ++ acx_device_t *adev, ++ unsigned cmd, ++ void *buffer, ++ unsigned buflen, ++ unsigned timeout, ++ const char* cmdstr) ++{ ++#endif ++ /* USB ignores timeout param */ ++ ++ struct usb_device *usbdev; ++ struct { ++ u16 cmd; ++ u16 status; ++ u8 data[1]; ++ } ACX_PACKED *loc; ++ const char *devname; ++ int acklen, blocklen, inpipe, outpipe; ++ int cmd_status; ++ int result; ++ ++ FN_ENTER; ++ ++ devname = adev->ndev->name; ++ /* no "wlan%%d: ..." please */ ++ if (!devname || !devname[0] || devname[4]=='%') ++ devname = "acx"; ++ ++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,type:0x%04X)\n", ++ cmdstr, buflen, ++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1); ++ ++ loc = kmalloc(buflen + 4 + BOGUS_SAFETY_PADDING, GFP_KERNEL); ++ if (!loc) { ++ printk("%s: "FUNC"(): no memory for data buffer\n", devname); ++ goto bad; ++ } ++ ++ /* get context from acx_device */ ++ usbdev = adev->usbdev; ++ ++ /* check which kind of command was issued */ ++ loc->cmd = cpu_to_le16(cmd); ++ loc->status = 0; ++ ++/* NB: buflen == frmlen + 4 ++** ++** Interrogate: write 8 bytes: (cmd,status,rid,frmlen), then ++** read (cmd,status,rid,frmlen,data[frmlen]) back ++** ++** Configure: write (cmd,status,rid,frmlen,data[frmlen]) ++** ++** Possibly bogus special handling of ACX1xx_IE_SCAN_STATUS removed ++*/ ++ ++ /* now write the parameters of the command if needed */ ++ acklen = buflen + 4 + BOGUS_SAFETY_PADDING; ++ blocklen = buflen; ++ if (buffer && buflen) { ++ /* if it's an INTERROGATE command, just pass the length ++ * of parameters to read, as data */ ++ if (cmd == ACX1xx_CMD_INTERROGATE) { ++ blocklen = 4; ++ acklen = buflen + 4; ++ } ++ memcpy(loc->data, buffer, blocklen); ++ } ++ blocklen += 4; /* account for cmd,status */ ++ ++ /* obtain the I/O pipes */ ++ outpipe = usb_sndctrlpipe(usbdev, 0); ++ inpipe = usb_rcvctrlpipe(usbdev, 0); ++ log(L_CTL, "ctrl inpipe=0x%X outpipe=0x%X\n", inpipe, outpipe); ++ log(L_CTL, "sending USB control msg (out) (blocklen=%d)\n", blocklen); ++ if (acx_debug & L_DATA) ++ acx_dump_bytes(loc, blocklen); ++ ++ result = usb_control_msg(usbdev, outpipe, ++ ACX_USB_REQ_CMD, /* request */ ++ USB_TYPE_VENDOR|USB_DIR_OUT, /* requesttype */ ++ 0, /* value */ ++ 0, /* index */ ++ loc, /* dataptr */ ++ blocklen, /* size */ ++ ACX_USB_CTRL_TIMEOUT /* timeout in ms */ ++ ); ++ ++ if (result == -ENODEV) { ++ log(L_CTL, "no device present (unplug?)\n"); ++ goto good; ++ } ++ ++ log(L_CTL, "wrote %d bytes\n", result); ++ if (result < 0) { ++ goto bad; ++ } ++ ++ /* check for device acknowledge */ ++ log(L_CTL, "sending USB control msg (in) (acklen=%d)\n", acklen); ++ loc->status = 0; /* delete old status flag -> set to IDLE */ ++ /* shall we zero out the rest? */ ++ result = usb_control_msg(usbdev, inpipe, ++ ACX_USB_REQ_CMD, /* request */ ++ USB_TYPE_VENDOR|USB_DIR_IN, /* requesttype */ ++ 0, /* value */ ++ 0, /* index */ ++ loc, /* dataptr */ ++ acklen, /* size */ ++ ACX_USB_CTRL_TIMEOUT /* timeout in ms */ ++ ); ++ if (result < 0) { ++ printk("%s: "FUNC"(): USB read error %d\n", devname, result); ++ goto bad; ++ } ++ if (acx_debug & L_CTL) { ++ printk("read %d bytes: ", result); ++ acx_dump_bytes(loc, result); ++ } ++ ++/* ++ check for result==buflen+4? Was seen: ++ ++interrogate(type:ACX100_IE_DOT11_ED_THRESHOLD,len:4) ++issue_cmd(cmd:ACX1xx_CMD_INTERROGATE,buflen:8,type:4111) ++ctrl inpipe=0x80000280 outpipe=0x80000200 ++sending USB control msg (out) (blocklen=8) ++01 00 00 00 0F 10 04 00 ++wrote 8 bytes ++sending USB control msg (in) (acklen=12) sizeof(loc->data ++read 4 bytes <==== MUST BE 12!! ++*/ ++ ++ cmd_status = le16_to_cpu(loc->status); ++ if (cmd_status != 1) { ++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s)\n", ++ devname, cmd_status, acx_cmd_status_str(cmd_status)); ++ /* TODO: goto bad; ? */ ++ } ++ if ((cmd == ACX1xx_CMD_INTERROGATE) && buffer && buflen) { ++ memcpy(buffer, loc->data, buflen); ++ log(L_CTL, "response frame: cmd=0x%04X status=%d\n", ++ le16_to_cpu(loc->cmd), ++ cmd_status); ++ } ++good: ++ kfree(loc); ++ FN_EXIT1(OK); ++ return OK; ++bad: ++ /* Give enough info so that callers can avoid ++ ** printing their own diagnostic messages */ ++#if ACX_DEBUG ++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr); ++#else ++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd); ++#endif ++ dump_stack(); ++ kfree(loc); ++ FN_EXIT1(NOT_OK); ++ return NOT_OK; ++} ++ ++ ++/*********************************************************************** ++** acxusb_boot() ++** Inputs: ++** usbdev -> Pointer to kernel's usb_device structure ++** ++** Returns: ++** (int) Errorcode or 0 on success ++** ++** This function triggers the loading of the firmware image from harddisk ++** and then uploads the firmware to the USB device. After uploading the ++** firmware and transmitting the checksum, the device resets and appears ++** as a new device on the USB bus (the device we can finally deal with) ++*/ ++static inline int ++acxusb_fw_needs_padding(firmware_image_t *fw_image, unsigned int usb_maxlen) ++{ ++ unsigned int num_xfers = ((fw_image->size - 1) / usb_maxlen) + 1; ++ ++ return ((num_xfers % 2) == 0); ++} ++ ++static int ++acxusb_boot(struct usb_device *usbdev, int is_tnetw1450, int *radio_type) ++{ ++ char filename[sizeof("tiacx1NNusbcRR")]; ++ ++ firmware_image_t *fw_image = NULL; ++ char *usbbuf; ++ unsigned int offset; ++ unsigned int blk_len, inpipe, outpipe; ++ u32 num_processed; ++ u32 img_checksum, sum; ++ u32 file_size; ++ int result = -EIO; ++ int i; ++ ++ FN_ENTER; ++ ++ /* dump_device(usbdev); */ ++ ++ usbbuf = kmalloc(USB_RWMEM_MAXLEN, GFP_KERNEL); ++ if (!usbbuf) { ++ printk(KERN_ERR "acx: no memory for USB transfer buffer (%d bytes)\n", USB_RWMEM_MAXLEN); ++ result = -ENOMEM; ++ goto end; ++ } ++ if (is_tnetw1450) { ++ /* Obtain the I/O pipes */ ++ outpipe = usb_sndbulkpipe(usbdev, 1); ++ inpipe = usb_rcvbulkpipe(usbdev, 2); ++ ++ printk(KERN_DEBUG "wait for device ready\n"); ++ for (i = 0; i <= 2; i++) { ++ result = usb_bulk_msg(usbdev, inpipe, ++ usbbuf, ++ USB_RWMEM_MAXLEN, ++ &num_processed, ++ 2000 ++ ); ++ ++ if ((*(u32 *)&usbbuf[4] == 0x40000001) ++ && (*(u16 *)&usbbuf[2] == 0x1) ++ && ((*(u16 *)usbbuf & 0x3fff) == 0) ++ && ((*(u16 *)usbbuf & 0xc000) == 0xc000)) ++ break; ++ msleep(10); ++ } ++ if (i == 2) ++ goto fw_end; ++ ++ *radio_type = usbbuf[8]; ++ } else { ++ /* Obtain the I/O pipes */ ++ outpipe = usb_sndctrlpipe(usbdev, 0); ++ inpipe = usb_rcvctrlpipe(usbdev, 0); ++ ++ /* FIXME: shouldn't be hardcoded */ ++ *radio_type = RADIO_MAXIM_0D; ++ } ++ ++ snprintf(filename, sizeof(filename), "tiacx1%02dusbc%02X", ++ is_tnetw1450 * 11, *radio_type); ++ ++ fw_image = acx_s_read_fw(&usbdev->dev, filename, &file_size); ++ if (!fw_image) { ++ result = -EIO; ++ goto end; ++ } ++ log(L_INIT, "firmware size: %d bytes\n", file_size); ++ ++ img_checksum = le32_to_cpu(fw_image->chksum); ++ ++ if (is_tnetw1450) { ++ u8 cmdbuf[20]; ++ const u8 *p; ++ u8 need_padding; ++ u32 tmplen, val; ++ ++ memset(cmdbuf, 0, 16); ++ ++ need_padding = acxusb_fw_needs_padding(fw_image, USB_RWMEM_MAXLEN); ++ tmplen = need_padding ? file_size-4 : file_size-8; ++ *(u16 *)&cmdbuf[0] = 0xc000; ++ *(u16 *)&cmdbuf[2] = 0x000b; ++ *(u32 *)&cmdbuf[4] = tmplen; ++ *(u32 *)&cmdbuf[8] = file_size-8; ++ *(u32 *)&cmdbuf[12] = img_checksum; ++ ++ result = usb_bulk_msg(usbdev, outpipe, cmdbuf, 16, &num_processed, HZ); ++ if (result < 0) ++ goto fw_end; ++ ++ p = (const u8 *)&fw_image->size; ++ ++ /* first calculate checksum for image size part */ ++ sum = p[0]+p[1]+p[2]+p[3]; ++ p += 4; ++ ++ /* now continue checksum for firmware data part */ ++ tmplen = le32_to_cpu(fw_image->size); ++ for (i = 0; i < tmplen /* image size */; i++) { ++ sum += *p++; ++ } ++ ++ if (sum != le32_to_cpu(fw_image->chksum)) { ++ printk("acx: FATAL: firmware upload: " ++ "checksums don't match! " ++ "(0x%08x vs. 0x%08x)\n", ++ sum, fw_image->chksum); ++ goto fw_end; ++ } ++ ++ offset = 8; ++ while (offset < file_size) { ++ blk_len = file_size - offset; ++ if (blk_len > USB_RWMEM_MAXLEN) { ++ blk_len = USB_RWMEM_MAXLEN; ++ } ++ ++ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n", ++ blk_len, offset); ++ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len); ++ ++ p = usbbuf; ++ for (i = 0; i < blk_len; i += 4) { ++ *(u32 *)p = be32_to_cpu(*(u32 *)p); ++ p += 4; ++ } ++ ++ result = usb_bulk_msg(usbdev, outpipe, usbbuf, blk_len, &num_processed, HZ); ++ if ((result < 0) || (num_processed != blk_len)) ++ goto fw_end; ++ offset += blk_len; ++ } ++ if (need_padding) { ++ printk(KERN_DEBUG "send padding\n"); ++ memset(usbbuf, 0, 4); ++ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ); ++ if ((result < 0) || (num_processed != 4)) ++ goto fw_end; ++ } ++ printk(KERN_DEBUG "read firmware upload result\n"); ++ memset(cmdbuf, 0, 20); /* additional memset */ ++ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000); ++ if (result < 0) ++ goto fw_end; ++ if (*(u32 *)&cmdbuf[4] == 0x40000003) ++ goto fw_end; ++ if (*(u32 *)&cmdbuf[4]) ++ goto fw_end; ++ if (*(u16 *)&cmdbuf[16] != 1) ++ goto fw_end; ++ ++ val = *(u32 *)&cmdbuf[0]; ++ if ((val & 0x3fff) ++ || ((val & 0xc000) != 0xc000)) ++ goto fw_end; ++ ++ val = *(u32 *)&cmdbuf[8]; ++ if (val & 2) { ++ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000); ++ if (result < 0) ++ goto fw_end; ++ val = *(u32 *)&cmdbuf[8]; ++ } ++ /* yup, no "else" here! */ ++ if (val & 1) { ++ memset(usbbuf, 0, 4); ++ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ); ++ if ((result < 0) || (!num_processed)) ++ goto fw_end; ++ } ++ ++ printk("TNETW1450 firmware upload successful!\n"); ++ result = 0; ++ goto end; ++fw_end: ++ result = -EIO; ++ goto end; ++ } else { ++ /* ACX100 USB */ ++ ++ /* now upload the firmware, slice the data into blocks */ ++ offset = 8; ++ while (offset < file_size) { ++ blk_len = file_size - offset; ++ if (blk_len > USB_RWMEM_MAXLEN) { ++ blk_len = USB_RWMEM_MAXLEN; ++ } ++ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n", ++ blk_len, offset); ++ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len); ++ result = usb_control_msg(usbdev, outpipe, ++ ACX_USB_REQ_UPLOAD_FW, ++ USB_TYPE_VENDOR|USB_DIR_OUT, ++ (file_size - 8) & 0xffff, /* value */ ++ (file_size - 8) >> 16, /* index */ ++ usbbuf, /* dataptr */ ++ blk_len, /* size */ ++ 3000 /* timeout in ms */ ++ ); ++ offset += blk_len; ++ if (result < 0) { ++ printk(KERN_ERR "acx: error %d during upload " ++ "of firmware, aborting\n", result); ++ goto end; ++ } ++ } ++ ++ /* finally, send the checksum and reboot the device */ ++ /* does this trigger the reboot? */ ++ result = usb_control_msg(usbdev, outpipe, ++ ACX_USB_REQ_UPLOAD_FW, ++ USB_TYPE_VENDOR|USB_DIR_OUT, ++ img_checksum & 0xffff, /* value */ ++ img_checksum >> 16, /* index */ ++ NULL, /* dataptr */ ++ 0, /* size */ ++ 3000 /* timeout in ms */ ++ ); ++ if (result < 0) { ++ printk(KERN_ERR "acx: error %d during tx of checksum, " ++ "aborting\n", result); ++ goto end; ++ } ++ result = usb_control_msg(usbdev, inpipe, ++ ACX_USB_REQ_ACK_CS, ++ USB_TYPE_VENDOR|USB_DIR_IN, ++ img_checksum & 0xffff, /* value */ ++ img_checksum >> 16, /* index */ ++ usbbuf, /* dataptr */ ++ 8, /* size */ ++ 3000 /* timeout in ms */ ++ ); ++ if (result < 0) { ++ printk(KERN_ERR "acx: error %d during ACK of checksum, " ++ "aborting\n", result); ++ goto end; ++ } ++ if (*usbbuf != 0x10) { ++ printk(KERN_ERR "acx: invalid checksum?\n"); ++ result = -EINVAL; ++ goto end; ++ } ++ result = 0; ++ } ++ ++end: ++ vfree(fw_image); ++ kfree(usbbuf); ++ ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/* FIXME: maybe merge it with usual eeprom reading, into common code? */ ++static void ++acxusb_s_read_eeprom_version(acx_device_t *adev) ++{ ++ u8 eeprom_ver[0x8]; ++ ++ memset(eeprom_ver, 0, sizeof(eeprom_ver)); ++ acx_s_interrogate(adev, &eeprom_ver, ACX1FF_IE_EEPROM_VER); ++ ++ /* FIXME: which one of those values to take? */ ++ adev->eeprom_version = eeprom_ver[5]; ++} ++ ++ ++/* ++ * temporary helper function to at least fill important cfgopt members with ++ * useful replacement values until we figure out how one manages to fetch ++ * the configoption struct in the USB device case... ++ */ ++static int ++acxusb_s_fill_configoption(acx_device_t *adev) ++{ ++ adev->cfgopt_probe_delay = 200; ++ adev->cfgopt_dot11CCAModes = 4; ++ adev->cfgopt_dot11Diversity = 1; ++ adev->cfgopt_dot11ShortPreambleOption = 1; ++ adev->cfgopt_dot11PBCCOption = 1; ++ adev->cfgopt_dot11ChannelAgility = 0; ++ adev->cfgopt_dot11PhyType = 5; ++ adev->cfgopt_dot11TempType = 1; ++ return OK; ++} ++ ++ ++/*********************************************************************** ++** acxusb_e_probe() ++** ++** This function is invoked by the kernel's USB core whenever a new device is ++** attached to the system or the module is loaded. It is presented a usb_device ++** structure from which information regarding the device is obtained and evaluated. ++** In case this driver is able to handle one of the offered devices, it returns ++** a non-null pointer to a driver context and thereby claims the device. ++*/ ++ ++static void ++dummy_netdev_init(struct net_device *ndev) {} ++ ++static int ++acxusb_e_probe(struct usb_interface *intf, const struct usb_device_id *devID) ++{ ++ struct usb_device *usbdev = interface_to_usbdev(intf); ++ acx_device_t *adev = NULL; ++ struct net_device *ndev = NULL; ++ struct usb_config_descriptor *config; ++ struct usb_endpoint_descriptor *epdesc; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++ struct usb_host_endpoint *ep; ++#endif ++ struct usb_interface_descriptor *ifdesc; ++ const char* msg; ++ int numconfigs, numfaces, numep; ++ int result = OK; ++ int i; ++ int radio_type; ++ /* this one needs to be more precise in case there appears a TNETW1450 from the same vendor */ ++ int is_tnetw1450 = (usbdev->descriptor.idVendor != ACX100_VENDOR_ID); ++ ++ FN_ENTER; ++ ++ if (is_tnetw1450) { ++ /* Boot the device (i.e. upload the firmware) */ ++ acxusb_boot(usbdev, is_tnetw1450, &radio_type); ++ ++ /* TNETW1450-based cards will continue right away with ++ * the same USB ID after booting */ ++ } else { ++ /* First check if this is the "unbooted" hardware */ ++ if (usbdev->descriptor.idProduct == ACX100_PRODUCT_ID_UNBOOTED) { ++ ++ /* Boot the device (i.e. upload the firmware) */ ++ acxusb_boot(usbdev, is_tnetw1450, &radio_type); ++ ++ /* DWL-120+ will first boot the firmware, ++ * then later have a *separate* probe() run ++ * since its USB ID will have changed after ++ * firmware boot! ++ * Since the first probe() run has no ++ * other purpose than booting the firmware, ++ * simply return immediately. ++ */ ++ log(L_INIT, "finished booting, returning from probe()\n"); ++ result = OK; /* success */ ++ goto end; ++ } ++ else ++ /* device not unbooted, but invalid USB ID!? */ ++ if (usbdev->descriptor.idProduct != ACX100_PRODUCT_ID_BOOTED) ++ goto end_nodev; ++ } ++ ++/* Ok, so it's our device and it has already booted */ ++ ++ /* Allocate memory for a network device */ ++ ++ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init); ++ /* (NB: memsets to 0 entire area) */ ++ if (!ndev) { ++ msg = "acx: no memory for netdev\n"; ++ goto end_nomem; ++ } ++ ++ /* Register the callbacks for the network device functions */ ++ ++ ether_setup(ndev); ++ ndev->open = &acxusb_e_open; ++ ndev->stop = &acxusb_e_close; ++ ndev->hard_start_xmit = (void *)&acx_i_start_xmit; ++ ndev->get_stats = (void *)&acx_e_get_stats; ++#if IW_HANDLER_VERSION <= 5 ++ ndev->get_wireless_stats = (void *)&acx_e_get_wireless_stats; ++#endif ++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def; ++ ndev->set_multicast_list = (void *)&acxusb_i_set_rx_mode; ++#ifdef HAVE_TX_TIMEOUT ++ ndev->tx_timeout = &acxusb_i_tx_timeout; ++ ndev->watchdog_timeo = 4 * HZ; ++#endif ++ ndev->change_mtu = &acx_e_change_mtu; ++ SET_MODULE_OWNER(ndev); ++ ++ /* Setup private driver context */ ++ ++ adev = ndev2adev(ndev); ++ adev->ndev = ndev; ++ ++ adev->dev_type = DEVTYPE_USB; ++ adev->radio_type = radio_type; ++ if (is_tnetw1450) { ++ /* well, actually it's a TNETW1450, but since it ++ * seems to be sufficiently similar to TNETW1130, ++ * I don't want to change large amounts of code now */ ++ adev->chip_type = CHIPTYPE_ACX111; ++ } else { ++ adev->chip_type = CHIPTYPE_ACX100; ++ } ++ ++ adev->usbdev = usbdev; ++ spin_lock_init(&adev->lock); /* initial state: unlocked */ ++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */ ++ ++ /* Check that this is really the hardware we know about. ++ ** If not sure, at least notify the user that he ++ ** may be in trouble... ++ */ ++ numconfigs = (int)usbdev->descriptor.bNumConfigurations; ++ if (numconfigs != 1) ++ printk("acx: number of configurations is %d, " ++ "this driver only knows how to handle 1, " ++ "be prepared for surprises\n", numconfigs); ++ ++ config = &usbdev->config->desc; ++ numfaces = config->bNumInterfaces; ++ if (numfaces != 1) ++ printk("acx: number of interfaces is %d, " ++ "this driver only knows how to handle 1, " ++ "be prepared for surprises\n", numfaces); ++ ++ ifdesc = &intf->altsetting->desc; ++ numep = ifdesc->bNumEndpoints; ++ log(L_DEBUG, "# of endpoints: %d\n", numep); ++ ++ if (is_tnetw1450) { ++ adev->bulkoutep = 1; ++ adev->bulkinep = 2; ++ } else { ++ /* obtain information about the endpoint ++ ** addresses, begin with some default values ++ */ ++ adev->bulkoutep = 1; ++ adev->bulkinep = 1; ++ for (i = 0; i < numep; i++) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++ ep = usbdev->ep_in[i]; ++ if (!ep) ++ continue; ++ epdesc = &ep->desc; ++#else ++ epdesc = usb_epnum_to_ep_desc(usbdev, i); ++ if (!epdesc) ++ continue; ++#endif ++ if (epdesc->bmAttributes & USB_ENDPOINT_XFER_BULK) { ++ if (epdesc->bEndpointAddress & 0x80) ++ adev->bulkinep = epdesc->bEndpointAddress & 0xF; ++ else ++ adev->bulkoutep = epdesc->bEndpointAddress & 0xF; ++ } ++ } ++ } ++ log(L_DEBUG, "bulkout ep: 0x%X\n", adev->bulkoutep); ++ log(L_DEBUG, "bulkin ep: 0x%X\n", adev->bulkinep); ++ ++ /* already done by memset: adev->rxtruncsize = 0; */ ++ log(L_DEBUG, "TXBUFSIZE=%d RXBUFSIZE=%d\n", ++ (int) TXBUFSIZE, (int) RXBUFSIZE); ++ ++ /* Allocate the RX/TX containers. */ ++ adev->usb_tx = kmalloc(sizeof(usb_tx_t) * ACX_TX_URB_CNT, GFP_KERNEL); ++ if (!adev->usb_tx) { ++ msg = "acx: no memory for tx container"; ++ goto end_nomem; ++ } ++ adev->usb_rx = kmalloc(sizeof(usb_rx_t) * ACX_RX_URB_CNT, GFP_KERNEL); ++ if (!adev->usb_rx) { ++ msg = "acx: no memory for rx container"; ++ goto end_nomem; ++ } ++ ++ /* Setup URBs for bulk-in/out messages */ ++ for (i = 0; i < ACX_RX_URB_CNT; i++) { ++ adev->usb_rx[i].urb = usb_alloc_urb(0, GFP_KERNEL); ++ if (!adev->usb_rx[i].urb) { ++ msg = "acx: no memory for input URB\n"; ++ goto end_nomem; ++ } ++ adev->usb_rx[i].urb->status = 0; ++ adev->usb_rx[i].adev = adev; ++ adev->usb_rx[i].busy = 0; ++ } ++ ++ for (i = 0; i< ACX_TX_URB_CNT; i++) { ++ adev->usb_tx[i].urb = usb_alloc_urb(0, GFP_KERNEL); ++ if (!adev->usb_tx[i].urb) { ++ msg = "acx: no memory for output URB\n"; ++ goto end_nomem; ++ } ++ adev->usb_tx[i].urb->status = 0; ++ adev->usb_tx[i].adev = adev; ++ adev->usb_tx[i].busy = 0; ++ } ++ adev->tx_free = ACX_TX_URB_CNT; ++ ++ usb_set_intfdata(intf, adev); ++ SET_NETDEV_DEV(ndev, &intf->dev); ++ ++ /* TODO: move all of fw cmds to open()? But then we won't know our MAC addr ++ until ifup (it's available via reading ACX1xx_IE_DOT11_STATION_ID)... */ ++ ++ /* put acx out of sleep mode and initialize it */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0); ++ ++ result = acx_s_init_mac(adev); ++ if (result) ++ goto end; ++ ++ /* TODO: see similar code in pci.c */ ++ acxusb_s_read_eeprom_version(adev); ++ acxusb_s_fill_configoption(adev); ++ acx_s_set_defaults(adev); ++ acx_s_get_firmware_version(adev); ++ acx_display_hardware_details(adev); ++ ++ /* Register the network device */ ++ log(L_INIT, "registering network device\n"); ++ result = register_netdev(ndev); ++ if (result) { ++ msg = "acx: failed to register USB network device " ++ "(error %d)\n"; ++ goto end_nomem; ++ } ++ ++ acx_proc_register_entries(ndev); ++ ++ acx_stop_queue(ndev, "on probe"); ++ acx_carrier_off(ndev, "on probe"); ++ ++ printk("acx: USB module " ACX_RELEASE " loaded successfully\n"); ++ ++#if CMD_DISCOVERY ++ great_inquisitor(adev); ++#endif ++ ++ /* Everything went OK, we are happy now */ ++ result = OK; ++ goto end; ++ ++end_nomem: ++ printk(msg, result); ++ ++ if (ndev) { ++ if (adev->usb_rx) { ++ for (i = 0; i < ACX_RX_URB_CNT; i++) ++ usb_free_urb(adev->usb_rx[i].urb); ++ kfree(adev->usb_rx); ++ } ++ if (adev->usb_tx) { ++ for (i = 0; i < ACX_TX_URB_CNT; i++) ++ usb_free_urb(adev->usb_tx[i].urb); ++ kfree(adev->usb_tx); ++ } ++ free_netdev(ndev); ++ } ++ ++ result = -ENOMEM; ++ goto end; ++ ++end_nodev: ++ /* no device we could handle, return error. */ ++ result = -EIO; ++ ++end: ++ FN_EXIT1(result); ++ return result; ++} ++ ++ ++/*********************************************************************** ++** acxusb_e_disconnect() ++** ++** This function is invoked whenever the user pulls the plug from the USB ++** device or the module is removed from the kernel. In these cases, the ++** network devices have to be taken down and all allocated memory has ++** to be freed. ++*/ ++static void ++acxusb_e_disconnect(struct usb_interface *intf) ++{ ++ acx_device_t *adev = usb_get_intfdata(intf); ++ unsigned long flags; ++ int i; ++ ++ FN_ENTER; ++ ++ /* No WLAN device... no sense */ ++ if (!adev) ++ goto end; ++ ++ /* Unregister network device ++ * ++ * If the interface is up, unregister_netdev() will take ++ * care of calling our close() function, which takes ++ * care of unlinking the urbs, sending the device to ++ * sleep, etc... ++ * This can't be called with sem or lock held because ++ * _close() will try to grab it as well if it's called, ++ * deadlocking the machine. ++ */ ++ unregister_netdev(adev->ndev); ++ ++ acx_sem_lock(adev); ++ acx_lock(adev, flags); ++ /* This device exists no more */ ++ usb_set_intfdata(intf, NULL); ++ acx_proc_unregister_entries(adev->ndev); ++ ++ /* ++ * Here we only free them. _close() took care of ++ * unlinking them. ++ */ ++ for (i = 0; i < ACX_RX_URB_CNT; ++i) { ++ usb_free_urb(adev->usb_rx[i].urb); ++ } ++ for (i = 0; i< ACX_TX_URB_CNT; ++i) { ++ usb_free_urb(adev->usb_tx[i].urb); ++ } ++ ++ /* Freeing containers */ ++ kfree(adev->usb_rx); ++ kfree(adev->usb_tx); ++ ++ acx_unlock(adev, flags); ++ acx_sem_unlock(adev); ++ ++ free_netdev(adev->ndev); ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxusb_e_open() ++** This function is called when the user sets up the network interface. ++** It initializes a management timer, sets up the USB card and starts ++** the network tx queue and USB receive. ++*/ ++static int ++acxusb_e_open(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ int i; ++ ++ FN_ENTER; ++ ++ acx_sem_lock(adev); ++ ++ /* put the ACX100 out of sleep mode */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0); ++ ++ acx_init_task_scheduler(adev); ++ ++ init_timer(&adev->mgmt_timer); ++ adev->mgmt_timer.function = acx_i_timer; ++ adev->mgmt_timer.data = (unsigned long)adev; ++ ++ /* acx_s_start needs it */ ++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ acx_s_start(adev); ++ ++ /* don't acx_start_queue() here, we need to associate first */ ++ ++ acx_lock(adev, flags); ++ for (i = 0; i < ACX_RX_URB_CNT; i++) { ++ adev->usb_rx[i].urb->status = 0; ++ } ++ ++ acxusb_l_poll_rx(adev, &adev->usb_rx[0]); ++ ++ acx_unlock(adev, flags); ++ ++ acx_sem_unlock(adev); ++ ++ FN_EXIT0; ++ return 0; ++} ++ ++ ++/*********************************************************************** ++** acxusb_e_close() ++** ++** This function stops the network functionality of the interface (invoked ++** when the user calls ifconfig down). The tx queue is halted and ++** the device is marked as down. In case there were any pending USB bulk ++** transfers, these are unlinked (asynchronously). The module in-use count ++** is also decreased in this function. ++*/ ++static int ++acxusb_e_close(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ int i; ++ ++ FN_ENTER; ++ ++#ifdef WE_STILL_DONT_CARE_ABOUT_IT ++ /* Transmit a disassociate frame */ ++ lock ++ acx_l_transmit_disassoc(adev, &client); ++ unlock ++#endif ++ ++ acx_sem_lock(adev); ++ ++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); ++ ++/* Code below is remarkably similar to acxpci_s_down(). Maybe we can merge them? */ ++ ++ /* Make sure we don't get any more rx requests */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0); ++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0); ++ ++ /* ++ * We must do FLUSH *without* holding sem to avoid a deadlock. ++ * See pci.c:acxpci_s_down() for deails. ++ */ ++ acx_sem_unlock(adev); ++ FLUSH_SCHEDULED_WORK(); ++ acx_sem_lock(adev); ++ ++ /* Power down the device */ ++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0); ++ ++ /* Stop the transmit queue, mark the device as DOWN */ ++ acx_lock(adev, flags); ++ acx_stop_queue(ndev, "on ifdown"); ++ acx_set_status(adev, ACX_STATUS_0_STOPPED); ++ /* stop pending rx/tx urb transfers */ ++ for (i = 0; i < ACX_TX_URB_CNT; i++) { ++ acxusb_unlink_urb(adev->usb_tx[i].urb); ++ adev->usb_tx[i].busy = 0; ++ } ++ for (i = 0; i < ACX_RX_URB_CNT; i++) { ++ acxusb_unlink_urb(adev->usb_rx[i].urb); ++ adev->usb_rx[i].busy = 0; ++ } ++ adev->tx_free = ACX_TX_URB_CNT; ++ acx_unlock(adev, flags); ++ ++ /* Must do this outside of lock */ ++ del_timer_sync(&adev->mgmt_timer); ++ ++ acx_sem_unlock(adev); ++ ++ FN_EXIT0; ++ return 0; ++} ++ ++ ++/*********************************************************************** ++** acxusb_l_poll_rx ++** This function (re)initiates a bulk-in USB transfer on a given urb ++*/ ++static void ++acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx) ++{ ++ struct usb_device *usbdev; ++ struct urb *rxurb; ++ int errcode, rxnum; ++ unsigned int inpipe; ++ ++ FN_ENTER; ++ ++ rxurb = rx->urb; ++ usbdev = adev->usbdev; ++ ++ rxnum = rx - adev->usb_rx; ++ ++ inpipe = usb_rcvbulkpipe(usbdev, adev->bulkinep); ++ if (unlikely(rxurb->status == -EINPROGRESS)) { ++ printk(KERN_ERR "acx: error, rx triggered while rx urb in progress\n"); ++ /* FIXME: this is nasty, receive is being cancelled by this code ++ * on the other hand, this should not happen anyway... ++ */ ++ usb_unlink_urb(rxurb); ++ } else ++ if (unlikely(rxurb->status == -ECONNRESET)) { ++ log(L_USBRXTX, "acx_usb: _poll_rx: connection reset\n"); ++ goto end; ++ } ++ rxurb->actual_length = 0; ++ usb_fill_bulk_urb(rxurb, usbdev, inpipe, ++ &rx->bulkin, /* dataptr */ ++ RXBUFSIZE, /* size */ ++ acxusb_i_complete_rx, /* handler */ ++ rx /* handler param */ ++ ); ++ rxurb->transfer_flags = URB_ASYNC_UNLINK; ++ ++ /* ATOMIC: we may be called from complete_rx() usb callback */ ++ errcode = usb_submit_urb(rxurb, GFP_ATOMIC); ++ /* FIXME: evaluate the error code! */ ++ log(L_USBRXTX, "SUBMIT RX (%d) inpipe=0x%X size=%d errcode=%d\n", ++ rxnum, inpipe, (int) RXBUFSIZE, errcode); ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxusb_i_complete_rx() ++** Inputs: ++** urb -> pointer to USB request block ++** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h) ++** ++** This function is invoked by USB subsystem whenever a bulk receive ++** request returns. ++** The received data is then committed to the network stack and the next ++** USB receive is triggered. ++*/ ++static void ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++acxusb_i_complete_rx(struct urb *urb) ++#else ++acxusb_i_complete_rx(struct urb *urb, struct pt_regs *regs) ++#endif ++{ ++ acx_device_t *adev; ++ rxbuffer_t *ptr; ++ rxbuffer_t *inbuf; ++ usb_rx_t *rx; ++ unsigned long flags; ++ int size, remsize, packetsize, rxnum; ++ ++ FN_ENTER; ++ ++ BUG_ON(!urb->context); ++ ++ rx = (usb_rx_t *)urb->context; ++ adev = rx->adev; ++ ++ acx_lock(adev, flags); ++ ++ /* ++ * Happens on disconnect or close. Don't play with the urb. ++ * Don't resubmit it. It will get unlinked by close() ++ */ ++ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) { ++ log(L_USBRXTX, "rx: device is down, not doing anything\n"); ++ goto end_unlock; ++ } ++ ++ inbuf = &rx->bulkin; ++ size = urb->actual_length; ++ remsize = size; ++ rxnum = rx - adev->usb_rx; ++ ++ log(L_USBRXTX, "RETURN RX (%d) status=%d size=%d\n", ++ rxnum, urb->status, size); ++ ++ /* Send the URB that's waiting. */ ++ log(L_USBRXTX, "rxnum=%d, sending=%d\n", rxnum, rxnum^1); ++ acxusb_l_poll_rx(adev, &adev->usb_rx[rxnum^1]); ++ ++ if (unlikely(size > sizeof(rxbuffer_t))) ++ printk("acx_usb: rx too large: %d, please report\n", size); ++ ++ /* check if the transfer was aborted */ ++ switch (urb->status) { ++ case 0: /* No error */ ++ break; ++ case -EOVERFLOW: ++ printk(KERN_ERR "acx: rx data overrun\n"); ++ adev->rxtruncsize = 0; /* Not valid anymore. */ ++ goto end_unlock; ++ case -ECONNRESET: ++ adev->rxtruncsize = 0; ++ goto end_unlock; ++ case -ESHUTDOWN: /* rmmod */ ++ adev->rxtruncsize = 0; ++ goto end_unlock; ++ default: ++ adev->rxtruncsize = 0; ++ adev->stats.rx_errors++; ++ printk("acx: rx error (urb status=%d)\n", urb->status); ++ goto end_unlock; ++ } ++ ++ if (unlikely(!size)) ++ printk("acx: warning, encountered zerolength rx packet\n"); ++ ++ if (urb->transfer_buffer != inbuf) ++ goto end_unlock; ++ ++ /* check if previous frame was truncated ++ ** FIXME: this code can only handle truncation ++ ** of consecutive packets! ++ */ ++ ptr = inbuf; ++ if (adev->rxtruncsize) { ++ int tail_size; ++ ++ ptr = &adev->rxtruncbuf; ++ packetsize = RXBUF_BYTES_USED(ptr); ++ if (acx_debug & L_USBRXTX) { ++ printk("handling truncated frame (truncsize=%d size=%d " ++ "packetsize(from trunc)=%d)\n", ++ adev->rxtruncsize, size, packetsize); ++ acx_dump_bytes(ptr, RXBUF_HDRSIZE); ++ acx_dump_bytes(inbuf, RXBUF_HDRSIZE); ++ } ++ ++ /* bytes needed for rxtruncbuf completion: */ ++ tail_size = packetsize - adev->rxtruncsize; ++ ++ if (size < tail_size) { ++ /* there is not enough data to complete this packet, ++ ** simply append the stuff to the truncation buffer ++ */ ++ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, size); ++ adev->rxtruncsize += size; ++ remsize = 0; ++ } else { ++ /* ok, this data completes the previously ++ ** truncated packet. copy it into a descriptor ++ ** and give it to the rest of the stack */ ++ ++ /* append tail to previously truncated part ++ ** NB: adev->rxtruncbuf (pointed to by ptr) can't ++ ** overflow because this is already checked before ++ ** truncation buffer was filled. See below, ++ ** "if (packetsize > sizeof(rxbuffer_t))..." code */ ++ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, tail_size); ++ ++ if (acx_debug & L_USBRXTX) { ++ printk("full trailing packet + 12 bytes:\n"); ++ acx_dump_bytes(inbuf, tail_size + RXBUF_HDRSIZE); ++ } ++ acx_l_process_rxbuf(adev, ptr); ++ adev->rxtruncsize = 0; ++ ptr = (rxbuffer_t *) (((char *)inbuf) + tail_size); ++ remsize -= tail_size; ++ } ++ log(L_USBRXTX, "post-merge size=%d remsize=%d\n", ++ size, remsize); ++ } ++ ++ /* size = USB data block size ++ ** remsize = unprocessed USB bytes left ++ ** ptr = current pos in USB data block ++ */ ++ while (remsize) { ++ if (remsize < RXBUF_HDRSIZE) { ++ printk("acx: truncated rx header (%d bytes)!\n", ++ remsize); ++ if (ACX_DEBUG) ++ acx_dump_bytes(ptr, remsize); ++ break; ++ } ++ ++ packetsize = RXBUF_BYTES_USED(ptr); ++ log(L_USBRXTX, "packet with packetsize=%d\n", packetsize); ++ ++ if (RXBUF_IS_TXSTAT(ptr)) { ++ /* do rate handling */ ++ usb_txstatus_t *stat = (void*)ptr; ++ u16 client_no = (u16)stat->hostdata; ++ ++ log(L_USBRXTX, "tx: stat: mac_cnt_rcvd:%04X " ++ "queue_index:%02X mac_status:%02X hostdata:%08X " ++ "rate:%u ack_failures:%02X rts_failures:%02X " ++ "rts_ok:%02X\n", ++ stat->mac_cnt_rcvd, ++ stat->queue_index, stat->mac_status, stat->hostdata, ++ stat->rate, stat->ack_failures, stat->rts_failures, ++ stat->rts_ok); ++ ++ if (adev->rate_auto && client_no < VEC_SIZE(adev->sta_list)) { ++ client_t *clt = &adev->sta_list[client_no]; ++ u16 cur = stat->hostdata >> 16; ++ ++ if (clt && clt->rate_cur == cur) { ++ acx_l_handle_txrate_auto(adev, clt, ++ cur, /* intended rate */ ++ stat->rate, 0, /* actually used rate */ ++ stat->mac_status, /* error? */ ++ ACX_TX_URB_CNT - adev->tx_free); ++ } ++ } ++ goto next; ++ } ++ ++ if (packetsize > sizeof(rxbuffer_t)) { ++ printk("acx: packet exceeds max wlan " ++ "frame size (%d > %d). size=%d\n", ++ packetsize, (int) sizeof(rxbuffer_t), size); ++ if (ACX_DEBUG) ++ acx_dump_bytes(ptr, 16); ++ /* FIXME: put some real error-handling in here! */ ++ break; ++ } ++ ++ if (packetsize > remsize) { ++ /* frame truncation handling */ ++ if (acx_debug & L_USBRXTX) { ++ printk("need to truncate packet, " ++ "packetsize=%d remsize=%d " ++ "size=%d bytes:", ++ packetsize, remsize, size); ++ acx_dump_bytes(ptr, RXBUF_HDRSIZE); ++ } ++ memcpy(&adev->rxtruncbuf, ptr, remsize); ++ adev->rxtruncsize = remsize; ++ break; ++ } ++ ++ /* packetsize <= remsize */ ++ /* now handle the received data */ ++ acx_l_process_rxbuf(adev, ptr); ++next: ++ ptr = (rxbuffer_t *)(((char *)ptr) + packetsize); ++ remsize -= packetsize; ++ if ((acx_debug & L_USBRXTX) && remsize) { ++ printk("more than one packet in buffer, " ++ "second packet hdr:"); ++ acx_dump_bytes(ptr, RXBUF_HDRSIZE); ++ } ++ } ++ ++end_unlock: ++ acx_unlock(adev, flags); ++/* end: */ ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++** acxusb_i_complete_tx() ++** Inputs: ++** urb -> pointer to USB request block ++** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h) ++** ++** This function is invoked upon termination of a USB transfer. ++*/ ++static void ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) ++acxusb_i_complete_tx(struct urb *urb) ++#else ++acxusb_i_complete_tx(struct urb *urb, struct pt_regs *regs) ++#endif ++{ ++ acx_device_t *adev; ++ usb_tx_t *tx; ++ unsigned long flags; ++ int txnum; ++ ++ FN_ENTER; ++ ++ BUG_ON(!urb->context); ++ ++ tx = (usb_tx_t *)urb->context; ++ adev = tx->adev; ++ ++ txnum = tx - adev->usb_tx; ++ ++ acx_lock(adev, flags); ++ ++ /* ++ * If the iface isn't up, we don't have any right ++ * to play with them. The urb may get unlinked. ++ */ ++ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) { ++ log(L_USBRXTX, "tx: device is down, not doing anything\n"); ++ goto end_unlock; ++ } ++ ++ log(L_USBRXTX, "RETURN TX (%d): status=%d size=%d\n", ++ txnum, urb->status, urb->actual_length); ++ ++ /* handle USB transfer errors */ ++ switch (urb->status) { ++ case 0: /* No error */ ++ break; ++ case -ESHUTDOWN: ++ goto end_unlock; ++ break; ++ case -ECONNRESET: ++ goto end_unlock; ++ break; ++ /* FIXME: real error-handling code here please */ ++ default: ++ printk(KERN_ERR "acx: tx error, urb status=%d\n", urb->status); ++ /* FIXME: real error-handling code here please */ ++ } ++ ++ /* free the URB and check for more data */ ++ tx->busy = 0; ++ adev->tx_free++; ++ if ((adev->tx_free >= TX_START_QUEUE) ++ && (adev->status == ACX_STATUS_4_ASSOCIATED) ++ && (acx_queue_stopped(adev->ndev)) ++ ) { ++ log(L_BUF, "tx: wake queue (%u free txbufs)\n", ++ adev->tx_free); ++ acx_wake_queue(adev->ndev, NULL); ++ } ++ ++end_unlock: ++ acx_unlock(adev, flags); ++/* end: */ ++ FN_EXIT0; ++} ++ ++ ++/*************************************************************** ++** acxusb_l_alloc_tx ++** Actually returns a usb_tx_t* ptr ++*/ ++tx_t* ++acxusb_l_alloc_tx(acx_device_t *adev) ++{ ++ usb_tx_t *tx; ++ unsigned head; ++ ++ FN_ENTER; ++ ++ head = adev->tx_head; ++ do { ++ head = (head + 1) % ACX_TX_URB_CNT; ++ if (!adev->usb_tx[head].busy) { ++ log(L_USBRXTX, "allocated tx %d\n", head); ++ tx = &adev->usb_tx[head]; ++ tx->busy = 1; ++ adev->tx_free--; ++ /* Keep a few free descs between head and tail of tx ring. ++ ** It is not absolutely needed, just feels safer */ ++ if (adev->tx_free < TX_STOP_QUEUE) { ++ log(L_BUF, "tx: stop queue " ++ "(%u free txbufs)\n", adev->tx_free); ++ acx_stop_queue(adev->ndev, NULL); ++ } ++ goto end; ++ } ++ } while (likely(head!=adev->tx_head)); ++ tx = NULL; ++ printk_ratelimited("acx: tx buffers full\n"); ++end: ++ adev->tx_head = head; ++ FN_EXIT0; ++ return (tx_t*)tx; ++} ++ ++ ++/*************************************************************** ++** Used if alloc_tx()'ed buffer needs to be cancelled without doing tx ++*/ ++void ++acxusb_l_dealloc_tx(tx_t *tx_opaque) ++{ ++ usb_tx_t* tx = (usb_tx_t*)tx_opaque; ++ tx->busy = 0; ++} ++ ++ ++/*************************************************************** ++*/ ++void* ++acxusb_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque) ++{ ++ usb_tx_t* tx = (usb_tx_t*)tx_opaque; ++ return &tx->bulkout.data; ++} ++ ++ ++/*************************************************************** ++** acxusb_l_tx_data ++** ++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx). ++** Can be called from acx_i_start_xmit (data frames from net core). ++*/ ++void ++acxusb_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int wlanpkt_len) ++{ ++ struct usb_device *usbdev; ++ struct urb* txurb; ++ usb_tx_t* tx; ++ usb_txbuffer_t* txbuf; ++ client_t *clt; ++ wlan_hdr_t* whdr; ++ unsigned int outpipe; ++ int ucode, txnum; ++ ++ FN_ENTER; ++ ++ tx = ((usb_tx_t *)tx_opaque); ++ txurb = tx->urb; ++ txbuf = &tx->bulkout; ++ whdr = (wlan_hdr_t *)txbuf->data; ++ txnum = tx - adev->usb_tx; ++ ++ log(L_DEBUG, "using buf#%d free=%d len=%d\n", ++ txnum, adev->tx_free, wlanpkt_len); ++ ++ switch (adev->mode) { ++ case ACX_MODE_0_ADHOC: ++ case ACX_MODE_3_AP: ++ clt = acx_l_sta_list_get(adev, whdr->a1); ++ break; ++ case ACX_MODE_2_STA: ++ clt = adev->ap_client; ++ break; ++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */ ++ clt = NULL; ++ break; ++ } ++ ++ if (unlikely(clt && !clt->rate_cur)) { ++ printk("acx: driver bug! bad ratemask\n"); ++ goto end; ++ } ++ ++ /* fill the USB transfer header */ ++ txbuf->desc = cpu_to_le16(USB_TXBUF_TXDESC); ++ txbuf->mpdu_len = cpu_to_le16(wlanpkt_len); ++ txbuf->queue_index = 1; ++ if (clt) { ++ txbuf->rate = clt->rate_100; ++ txbuf->hostdata = (clt - adev->sta_list) | (clt->rate_cur << 16); ++ } else { ++ txbuf->rate = adev->rate_bcast100; ++ txbuf->hostdata = ((u16)-1) | (adev->rate_bcast << 16); ++ } ++ txbuf->ctrl1 = DESC_CTL_FIRSTFRAG; ++ if (1 == adev->preamble_cur) ++ SET_BIT(txbuf->ctrl1, DESC_CTL_SHORT_PREAMBLE); ++ txbuf->ctrl2 = 0; ++ txbuf->data_len = cpu_to_le16(wlanpkt_len); ++ ++ if (unlikely(acx_debug & L_DATA)) { ++ printk("dump of bulk out urb:\n"); ++ acx_dump_bytes(txbuf, wlanpkt_len + USB_TXBUF_HDRSIZE); ++ } ++ ++ if (unlikely(txurb->status == -EINPROGRESS)) { ++ printk("acx: trying to submit tx urb while already in progress\n"); ++ } ++ ++ /* now schedule the USB transfer */ ++ usbdev = adev->usbdev; ++ outpipe = usb_sndbulkpipe(usbdev, adev->bulkoutep); ++ ++ usb_fill_bulk_urb(txurb, usbdev, outpipe, ++ txbuf, /* dataptr */ ++ wlanpkt_len + USB_TXBUF_HDRSIZE, /* size */ ++ acxusb_i_complete_tx, /* handler */ ++ tx /* handler param */ ++ ); ++ ++ txurb->transfer_flags = URB_ASYNC_UNLINK|URB_ZERO_PACKET; ++ ucode = usb_submit_urb(txurb, GFP_ATOMIC); ++ log(L_USBRXTX, "SUBMIT TX (%d): outpipe=0x%X buf=%p txsize=%d " ++ "rate=%u errcode=%d\n", txnum, outpipe, txbuf, ++ wlanpkt_len + USB_TXBUF_HDRSIZE, txbuf->rate, ucode); ++ ++ if (unlikely(ucode)) { ++ printk(KERN_ERR "acx: submit_urb() error=%d txsize=%d\n", ++ ucode, wlanpkt_len + USB_TXBUF_HDRSIZE); ++ ++ /* on error, just mark the frame as done and update ++ ** the statistics ++ */ ++ adev->stats.tx_errors++; ++ tx->busy = 0; ++ adev->tx_free++; ++ /* needed? if (adev->tx_free > TX_START_QUEUE) acx_wake_queue(...) */ ++ } ++end: ++ FN_EXIT0; ++} ++ ++ ++/*********************************************************************** ++*/ ++static void ++acxusb_i_set_rx_mode(struct net_device *ndev) ++{ ++} ++ ++ ++/*********************************************************************** ++*/ ++#ifdef HAVE_TX_TIMEOUT ++static void ++acxusb_i_tx_timeout(struct net_device *ndev) ++{ ++ acx_device_t *adev = ndev2adev(ndev); ++ unsigned long flags; ++ int i; ++ ++ FN_ENTER; ++ ++ acx_lock(adev, flags); ++ /* unlink the URBs */ ++ for (i = 0; i < ACX_TX_URB_CNT; i++) { ++ acxusb_unlink_urb(adev->usb_tx[i].urb); ++ adev->usb_tx[i].busy = 0; ++ } ++ adev->tx_free = ACX_TX_URB_CNT; ++ /* TODO: stats update */ ++ acx_unlock(adev, flags); ++ ++ FN_EXIT0; ++} ++#endif ++ ++ ++/*********************************************************************** ++** init_module() ++** ++** This function is invoked upon loading of the kernel module. ++** It registers itself at the kernel's USB subsystem. ++** ++** Returns: Errorcode on failure, 0 on success ++*/ ++int __init ++acxusb_e_init_module(void) ++{ ++ log(L_INIT, "USB module " ACX_RELEASE " initialized, " ++ "probing for devices...\n"); ++ return usb_register(&acxusb_driver); ++} ++ ++ ++ ++/*********************************************************************** ++** cleanup_module() ++** ++** This function is invoked as last step of the module unloading. It simply ++** deregisters this module at the kernel's USB subsystem. ++*/ ++void __exit ++acxusb_e_cleanup_module() ++{ ++ usb_deregister(&acxusb_driver); ++} ++ ++ ++/*********************************************************************** ++** DEBUG STUFF ++*/ ++#if ACX_DEBUG ++ ++#ifdef UNUSED ++static void ++dump_device(struct usb_device *usbdev) ++{ ++ int i; ++ struct usb_config_descriptor *cd; ++ ++ printk("acx device dump:\n"); ++ printk(" devnum: %d\n", usbdev->devnum); ++ printk(" speed: %d\n", usbdev->speed); ++ printk(" tt: 0x%X\n", (unsigned int)(usbdev->tt)); ++ printk(" ttport: %d\n", (unsigned int)(usbdev->ttport)); ++ printk(" toggle[0]: 0x%X toggle[1]: 0x%X\n", (unsigned int)(usbdev->toggle[0]), (unsigned int)(usbdev->toggle[1])); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) ++ /* This saw a change after 2.6.10 */ ++ printk(" ep_in wMaxPacketSize: "); ++ for (i = 0; i < 16; ++i) ++ if (usbdev->ep_in[i] != NULL) ++ printk("%d:%d ", i, usbdev->ep_in[i]->desc.wMaxPacketSize); ++ printk("\n"); ++ printk(" ep_out wMaxPacketSize: "); ++ for (i = 0; i < VEC_SIZE(usbdev->ep_out); ++i) ++ if (usbdev->ep_out[i] != NULL) ++ printk("%d:%d ", i, usbdev->ep_out[i]->desc.wMaxPacketSize); ++ printk("\n"); ++#else ++ printk(" epmaxpacketin: "); ++ for (i = 0; i < 16; i++) ++ printk("%d ", usbdev->epmaxpacketin[i]); ++ printk("\n"); ++ printk(" epmaxpacketout: "); ++ for (i = 0; i < 16; i++) ++ printk("%d ", usbdev->epmaxpacketout[i]); ++ printk("\n"); ++#endif ++ printk(" parent: 0x%X\n", (unsigned int)usbdev->parent); ++ printk(" bus: 0x%X\n", (unsigned int)usbdev->bus); ++#ifdef NO_DATATYPE ++ printk(" configs: "); ++ for (i = 0; i < usbdev->descriptor.bNumConfigurations; i++) ++ printk("0x%X ", usbdev->config[i]); ++ printk("\n"); ++#endif ++ printk(" actconfig: %p\n", usbdev->actconfig); ++ dump_device_descriptor(&usbdev->descriptor); ++ ++ cd = &usbdev->config->desc; ++ dump_config_descriptor(cd); ++} ++ ++ ++/*********************************************************************** ++*/ ++static void ++dump_config_descriptor(struct usb_config_descriptor *cd) ++{ ++ printk("Configuration Descriptor:\n"); ++ if (!cd) { ++ printk("NULL\n"); ++ return; ++ } ++ printk(" bLength: %d (0x%X)\n", cd->bLength, cd->bLength); ++ printk(" bDescriptorType: %d (0x%X)\n", cd->bDescriptorType, cd->bDescriptorType); ++ printk(" bNumInterfaces: %d (0x%X)\n", cd->bNumInterfaces, cd->bNumInterfaces); ++ printk(" bConfigurationValue: %d (0x%X)\n", cd->bConfigurationValue, cd->bConfigurationValue); ++ printk(" iConfiguration: %d (0x%X)\n", cd->iConfiguration, cd->iConfiguration); ++ printk(" bmAttributes: %d (0x%X)\n", cd->bmAttributes, cd->bmAttributes); ++ /* printk(" MaxPower: %d (0x%X)\n", cd->bMaxPower, cd->bMaxPower); */ ++} ++ ++ ++static void ++dump_device_descriptor(struct usb_device_descriptor *dd) ++{ ++ printk("Device Descriptor:\n"); ++ if (!dd) { ++ printk("NULL\n"); ++ return; ++ } ++ printk(" bLength: %d (0x%X)\n", dd->bLength, dd->bLength); ++ printk(" bDescriptortype: %d (0x%X)\n", dd->bDescriptorType, dd->bDescriptorType); ++ printk(" bcdUSB: %d (0x%X)\n", dd->bcdUSB, dd->bcdUSB); ++ printk(" bDeviceClass: %d (0x%X)\n", dd->bDeviceClass, dd->bDeviceClass); ++ printk(" bDeviceSubClass: %d (0x%X)\n", dd->bDeviceSubClass, dd->bDeviceSubClass); ++ printk(" bDeviceProtocol: %d (0x%X)\n", dd->bDeviceProtocol, dd->bDeviceProtocol); ++ printk(" bMaxPacketSize0: %d (0x%X)\n", dd->bMaxPacketSize0, dd->bMaxPacketSize0); ++ printk(" idVendor: %d (0x%X)\n", dd->idVendor, dd->idVendor); ++ printk(" idProduct: %d (0x%X)\n", dd->idProduct, dd->idProduct); ++ printk(" bcdDevice: %d (0x%X)\n", dd->bcdDevice, dd->bcdDevice); ++ printk(" iManufacturer: %d (0x%X)\n", dd->iManufacturer, dd->iManufacturer); ++ printk(" iProduct: %d (0x%X)\n", dd->iProduct, dd->iProduct); ++ printk(" iSerialNumber: %d (0x%X)\n", dd->iSerialNumber, dd->iSerialNumber); ++ printk(" bNumConfigurations: %d (0x%X)\n", dd->bNumConfigurations, dd->bNumConfigurations); ++} ++#endif /* UNUSED */ ++ ++#endif /* ACX_DEBUG */ +Index: linux-2.6.23/drivers/net/wireless/acx/wlan.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/wlan.c 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,424 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++/*********************************************************************** ++** This code is based on elements which are ++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. ++** info@linux-wlan.com ++** http://www.linux-wlan.com ++*/ ++ ++#include ++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) ++#include ++#endif ++#include ++#include ++#include ++#include ++ ++#include "acx.h" ++ ++ ++/*********************************************************************** ++*/ ++#define LOG_BAD_EID(hdr,len,ie_ptr) acx_log_bad_eid(hdr, len, ((wlan_ie_t*)ie_ptr)) ++ ++#define IE_EID(ie_ptr) (((wlan_ie_t*)(ie_ptr))->eid) ++#define IE_LEN(ie_ptr) (((wlan_ie_t*)(ie_ptr))->len) ++#define OFFSET(hdr,off) (WLAN_HDR_A3_DATAP(hdr) + (off)) ++ ++ ++/*********************************************************************** ++** wlan_mgmt_decode_XXX ++** ++** Given a complete frame in f->hdr, sets the pointers in f to ++** the areas that correspond to the parts of the frame. ++** ++** Assumptions: ++** 1) f->len and f->hdr are already set ++** 2) f->len is the length of the MAC header + data, the FCS ++** is NOT included ++** 3) all members except len and hdr are zero ++** Arguments: ++** f frame structure ++** ++** Returns: ++** nothing ++** ++** Side effects: ++** frame structure members are pointing at their ++** respective portions of the frame buffer. ++*/ ++void ++wlan_mgmt_decode_beacon(wlan_fr_beacon_t * f) ++{ ++ u8 *ie_ptr; ++ u8 *end = (u8*)f->hdr + f->len; ++ ++ f->type = WLAN_FSTYPE_BEACON; ++ ++ /*-- Fixed Fields ----*/ ++ f->ts = (u64 *) OFFSET(f->hdr, WLAN_BEACON_OFF_TS); ++ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_BCN_INT); ++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_CAPINFO); ++ ++ /*-- Information elements */ ++ ie_ptr = OFFSET(f->hdr, WLAN_BEACON_OFF_SSID); ++ while (ie_ptr < end) { ++ switch (IE_EID(ie_ptr)) { ++ case WLAN_EID_SSID: ++ f->ssid = (wlan_ie_ssid_t *) ie_ptr; ++ break; ++ case WLAN_EID_SUPP_RATES: ++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_EXT_RATES: ++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_FH_PARMS: ++ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_DS_PARMS: ++ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_CF_PARMS: ++ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_IBSS_PARMS: ++ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_TIM: ++ f->tim = (wlan_ie_tim_t *) ie_ptr; ++ break; ++ case WLAN_EID_ERP_INFO: ++ f->erp = (wlan_ie_erp_t *) ie_ptr; ++ break; ++ ++ case WLAN_EID_COUNTRY: ++ /* was seen: 07 06 47 42 20 01 0D 14 */ ++ case WLAN_EID_PWR_CONSTRAINT: ++ /* was seen by Ashwin Mansinghka from ++ Atheros-based PCI card in AP mode using madwifi drivers: */ ++ /* 20 01 00 */ ++ case WLAN_EID_NONERP: ++ /* was seen from WRT54GS with OpenWrt: 2F 01 07 */ ++ case WLAN_EID_UNKNOWN128: ++ /* was seen by Jacek Jablonski from Orinoco AP */ ++ /* 80 06 00 60 1D 2C 3B 00 */ ++ case WLAN_EID_UNKNOWN133: ++ /* was seen by David Bronaugh from ???? */ ++ /* 85 1E 00 00 84 12 07 00 FF 00 11 00 61 70 63 31 */ ++ /* 63 73 72 30 34 32 00 00 00 00 00 00 00 00 00 25 */ ++ case WLAN_EID_UNKNOWN223: ++ /* was seen by Carlos Martin from ???? */ ++ /* DF 20 01 1E 04 00 00 00 06 63 09 02 FF 0F 30 30 */ ++ /* 30 42 36 42 33 34 30 39 46 31 00 00 00 00 00 00 00 00 */ ++ case WLAN_EID_GENERIC: ++ /* WPA: hostap code: ++ if (pos[1] >= 4 && ++ pos[2] == 0x00 && pos[3] == 0x50 && ++ pos[4] == 0xf2 && pos[5] == 1) { ++ wpa = pos; ++ wpa_len = pos[1] + 2; ++ } ++ TI x4 mode: seen DD 04 08 00 28 00 ++ (08 00 28 is TI's OUI) ++ last byte is probably 0/1 - disabled/enabled ++ */ ++ case WLAN_EID_RSN: ++ /* hostap does something with it: ++ rsn = pos; ++ rsn_len = pos[1] + 2; ++ */ ++ break; ++ ++ default: ++ LOG_BAD_EID(f->hdr, f->len, ie_ptr); ++ break; ++ } ++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr); ++ } ++} ++ ++ ++#ifdef UNUSED ++void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t * f) ++{ ++ f->type = WLAN_FSTYPE_ATIM; ++ /*-- Fixed Fields ----*/ ++ /*-- Information elements */ ++} ++#endif /* UNUSED */ ++ ++void ++wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t * f) ++{ ++ f->type = WLAN_FSTYPE_DISASSOC; ++ ++ /*-- Fixed Fields ----*/ ++ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DISASSOC_OFF_REASON); ++ ++ /*-- Information elements */ ++} ++ ++ ++void ++wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t * f) ++{ ++ u8 *ie_ptr; ++ u8 *end = (u8*)f->hdr + f->len; ++ ++ ++ f->type = WLAN_FSTYPE_ASSOCREQ; ++ ++ /*-- Fixed Fields ----*/ ++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_CAP_INFO); ++ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_LISTEN_INT); ++ ++ /*-- Information elements */ ++ ie_ptr = OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_SSID); ++ while (ie_ptr < end) { ++ switch (IE_EID(ie_ptr)) { ++ case WLAN_EID_SSID: ++ f->ssid = (wlan_ie_ssid_t *) ie_ptr; ++ break; ++ case WLAN_EID_SUPP_RATES: ++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_EXT_RATES: ++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ default: ++ LOG_BAD_EID(f->hdr, f->len, ie_ptr); ++ break; ++ } ++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr); ++ } ++} ++ ++ ++void ++wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t * f) ++{ ++ f->type = WLAN_FSTYPE_ASSOCRESP; ++ ++ /*-- Fixed Fields ----*/ ++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_CAP_INFO); ++ f->status = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_STATUS); ++ f->aid = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_AID); ++ ++ /*-- Information elements */ ++ f->supp_rates = (wlan_ie_supp_rates_t *) ++ OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_SUPP_RATES); ++} ++ ++ ++#ifdef UNUSED ++void ++wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t * f) ++{ ++ u8 *ie_ptr; ++ u8 *end = (u8*)f->hdr + f->len; ++ ++ f->type = WLAN_FSTYPE_REASSOCREQ; ++ ++ /*-- Fixed Fields ----*/ ++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CAP_INFO); ++ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_LISTEN_INT); ++ f->curr_ap = (u8 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CURR_AP); ++ ++ /*-- Information elements */ ++ ie_ptr = OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_SSID); ++ while (ie_ptr < end) { ++ switch (IE_EID(ie_ptr)) { ++ case WLAN_EID_SSID: ++ f->ssid = (wlan_ie_ssid_t *) ie_ptr; ++ break; ++ case WLAN_EID_SUPP_RATES: ++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_EXT_RATES: ++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ default: ++ LOG_BAD_EID(f->hdr, f->len, ie_ptr); ++ break; ++ } ++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr); ++ } ++} ++ ++ ++void ++wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t * f) ++{ ++ f->type = WLAN_FSTYPE_REASSOCRESP; ++ ++ /*-- Fixed Fields ----*/ ++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_CAP_INFO); ++ f->status = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_STATUS); ++ f->aid = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_AID); ++ ++ /*-- Information elements */ ++ f->supp_rates = (wlan_ie_supp_rates_t *) ++ OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_SUPP_RATES); ++} ++ ++ ++void ++wlan_mgmt_decode_probereq(wlan_fr_probereq_t * f) ++{ ++ u8 *ie_ptr; ++ u8 *end = (u8*)f->hdr + f->len; ++ ++ f->type = WLAN_FSTYPE_PROBEREQ; ++ ++ /*-- Fixed Fields ----*/ ++ ++ /*-- Information elements */ ++ ie_ptr = OFFSET(f->hdr, WLAN_PROBEREQ_OFF_SSID); ++ while (ie_ptr < end) { ++ switch (IE_EID(ie_ptr)) { ++ case WLAN_EID_SSID: ++ f->ssid = (wlan_ie_ssid_t *) ie_ptr; ++ break; ++ case WLAN_EID_SUPP_RATES: ++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_EXT_RATES: ++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ default: ++ LOG_BAD_EID(f->hdr, f->len, ie_ptr); ++ break; ++ } ++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr); ++ } ++} ++#endif /* UNUSED */ ++ ++ ++/* TODO: decoding of beacon and proberesp can be merged (similar structure) */ ++void ++wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t * f) ++{ ++ u8 *ie_ptr; ++ u8 *end = (u8*)f->hdr + f->len; ++ ++ f->type = WLAN_FSTYPE_PROBERESP; ++ ++ /*-- Fixed Fields ----*/ ++ f->ts = (u64 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_TS); ++ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_BCN_INT); ++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_CAP_INFO); ++ ++ /*-- Information elements */ ++ ie_ptr = OFFSET(f->hdr, WLAN_PROBERESP_OFF_SSID); ++ while (ie_ptr < end) { ++ switch (IE_EID(ie_ptr)) { ++ case WLAN_EID_SSID: ++ f->ssid = (wlan_ie_ssid_t *) ie_ptr; ++ break; ++ case WLAN_EID_SUPP_RATES: ++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_EXT_RATES: ++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr; ++ break; ++ case WLAN_EID_FH_PARMS: ++ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_DS_PARMS: ++ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_CF_PARMS: ++ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr; ++ break; ++ case WLAN_EID_IBSS_PARMS: ++ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr; ++ break; ++#ifdef DONT_DO_IT_ADD_REAL_HANDLING_INSTEAD ++ case WLAN_EID_COUNTRY: ++ break; ++ ... ++#endif ++#ifdef SENT_HERE_BY_OPENWRT ++ /* should those be trapped or handled?? */ ++ case WLAN_EID_ERP_INFO: ++ break; ++ case WLAN_EID_NONERP: ++ break; ++ case WLAN_EID_GENERIC: ++ break; ++#endif ++ default: ++ LOG_BAD_EID(f->hdr, f->len, ie_ptr); ++ break; ++ } ++ ++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr); ++ } ++} ++ ++ ++void ++wlan_mgmt_decode_authen(wlan_fr_authen_t * f) ++{ ++ u8 *ie_ptr; ++ u8 *end = (u8*)f->hdr + f->len; ++ ++ f->type = WLAN_FSTYPE_AUTHEN; ++ ++ /*-- Fixed Fields ----*/ ++ f->auth_alg = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_ALG); ++ f->auth_seq = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_SEQ); ++ f->status = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_STATUS); ++ ++ /*-- Information elements */ ++ ie_ptr = OFFSET(f->hdr, WLAN_AUTHEN_OFF_CHALLENGE); ++ if ((ie_ptr < end) && (IE_EID(ie_ptr) == WLAN_EID_CHALLENGE)) { ++ f->challenge = (wlan_ie_challenge_t *) ie_ptr; ++ } ++} ++ ++ ++void ++wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t * f) ++{ ++ f->type = WLAN_FSTYPE_DEAUTHEN; ++ ++ /*-- Fixed Fields ----*/ ++ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DEAUTHEN_OFF_REASON); ++ ++ /*-- Information elements */ ++} +Index: linux-2.6.23/drivers/net/wireless/acx/wlan_compat.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/wlan_compat.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,260 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++/*********************************************************************** ++** This code is based on elements which are ++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. ++** info@linux-wlan.com ++** http://www.linux-wlan.com ++*/ ++ ++/*=============================================================*/ ++/*------ Establish Platform Identity --------------------------*/ ++/*=============================================================*/ ++/* Key macros: */ ++/* WLAN_CPU_FAMILY */ ++#define WLAN_Ix86 1 ++#define WLAN_PPC 2 ++#define WLAN_Ix96 3 ++#define WLAN_ARM 4 ++#define WLAN_ALPHA 5 ++#define WLAN_MIPS 6 ++#define WLAN_HPPA 7 ++#define WLAN_SPARC 8 ++#define WLAN_SH 9 ++#define WLAN_x86_64 10 ++/* WLAN_CPU_CORE */ ++#define WLAN_I386CORE 1 ++#define WLAN_PPCCORE 2 ++#define WLAN_I296 3 ++#define WLAN_ARMCORE 4 ++#define WLAN_ALPHACORE 5 ++#define WLAN_MIPSCORE 6 ++#define WLAN_HPPACORE 7 ++/* WLAN_CPU_PART */ ++#define WLAN_I386PART 1 ++#define WLAN_MPC860 2 ++#define WLAN_MPC823 3 ++#define WLAN_I296SA 4 ++#define WLAN_PPCPART 5 ++#define WLAN_ARMPART 6 ++#define WLAN_ALPHAPART 7 ++#define WLAN_MIPSPART 8 ++#define WLAN_HPPAPART 9 ++/* WLAN_SYSARCH */ ++#define WLAN_PCAT 1 ++#define WLAN_MBX 2 ++#define WLAN_RPX 3 ++#define WLAN_LWARCH 4 ++#define WLAN_PMAC 5 ++#define WLAN_SKIFF 6 ++#define WLAN_BITSY 7 ++#define WLAN_ALPHAARCH 7 ++#define WLAN_MIPSARCH 9 ++#define WLAN_HPPAARCH 10 ++/* WLAN_HOSTIF (generally set on the command line, not detected) */ ++#define WLAN_PCMCIA 1 ++#define WLAN_ISA 2 ++#define WLAN_PCI 3 ++#define WLAN_USB 4 ++#define WLAN_PLX 5 ++ ++/* Note: the PLX HOSTIF above refers to some vendors implementations for */ ++/* PCI. It's a PLX chip that is a PCI to PCMCIA adapter, but it */ ++/* isn't a real PCMCIA host interface adapter providing all the */ ++/* card&socket services. */ ++ ++#ifdef __powerpc__ ++#ifndef __ppc__ ++#define __ppc__ ++#endif ++#endif ++ ++#if (defined(CONFIG_PPC) || defined(CONFIG_8xx)) ++#ifndef __ppc__ ++#define __ppc__ ++#endif ++#endif ++ ++#if defined(__x86_64__) ++ #define WLAN_CPU_FAMILY WLAN_x86_64 ++ #define WLAN_SYSARCH WLAN_PCAT ++#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ++ #define WLAN_CPU_FAMILY WLAN_Ix86 ++ #define WLAN_CPU_CORE WLAN_I386CORE ++ #define WLAN_CPU_PART WLAN_I386PART ++ #define WLAN_SYSARCH WLAN_PCAT ++#elif defined(__ppc__) ++ #define WLAN_CPU_FAMILY WLAN_PPC ++ #define WLAN_CPU_CORE WLAN_PPCCORE ++ #if defined(CONFIG_MBX) ++ #define WLAN_CPU_PART WLAN_MPC860 ++ #define WLAN_SYSARCH WLAN_MBX ++ #elif defined(CONFIG_RPXLITE) ++ #define WLAN_CPU_PART WLAN_MPC823 ++ #define WLAN_SYSARCH WLAN_RPX ++ #elif defined(CONFIG_RPXCLASSIC) ++ #define WLAN_CPU_PART WLAN_MPC860 ++ #define WLAN_SYSARCH WLAN_RPX ++ #else ++ #define WLAN_CPU_PART WLAN_PPCPART ++ #define WLAN_SYSARCH WLAN_PMAC ++ #endif ++#elif defined(__arm__) ++ #define WLAN_CPU_FAMILY WLAN_ARM ++ #define WLAN_CPU_CORE WLAN_ARMCORE ++ #define WLAN_CPU_PART WLAN_ARM_PART ++ #define WLAN_SYSARCH WLAN_SKIFF ++#elif defined(__alpha__) ++ #define WLAN_CPU_FAMILY WLAN_ALPHA ++ #define WLAN_CPU_CORE WLAN_ALPHACORE ++ #define WLAN_CPU_PART WLAN_ALPHAPART ++ #define WLAN_SYSARCH WLAN_ALPHAARCH ++#elif defined(__mips__) ++ #define WLAN_CPU_FAMILY WLAN_MIPS ++ #define WLAN_CPU_CORE WLAN_MIPSCORE ++ #define WLAN_CPU_PART WLAN_MIPSPART ++ #define WLAN_SYSARCH WLAN_MIPSARCH ++#elif defined(__hppa__) ++ #define WLAN_CPU_FAMILY WLAN_HPPA ++ #define WLAN_CPU_CORE WLAN_HPPACORE ++ #define WLAN_CPU_PART WLAN_HPPAPART ++ #define WLAN_SYSARCH WLAN_HPPAARCH ++#elif defined(__sparc__) ++ #define WLAN_CPU_FAMILY WLAN_SPARC ++ #define WLAN_SYSARCH WLAN_SPARC ++#elif defined(__sh__) ++ #define WLAN_CPU_FAMILY WLAN_SH ++ #define WLAN_SYSARCH WLAN_SHARCH ++ #ifndef __LITTLE_ENDIAN__ ++ #define __LITTLE_ENDIAN__ ++ #endif ++#else ++ #error "No CPU identified!" ++#endif ++ ++/* ++ Some big endian machines implicitly do all I/O in little endian mode. ++ ++ In particular: ++ Linux/PPC on PowerMacs (PCI) ++ Arm/Intel Xscale (PCI) ++ ++ This may also affect PLX boards and other BE &| PPC platforms; ++ as new ones are discovered, add them below. ++*/ ++ ++#if ((WLAN_SYSARCH == WLAN_SKIFF) || (WLAN_SYSARCH == WLAN_PMAC)) ++#define REVERSE_ENDIAN ++#endif ++ ++/*=============================================================*/ ++/*------ Hardware Portability Macros --------------------------*/ ++/*=============================================================*/ ++#if (WLAN_CPU_FAMILY == WLAN_PPC) ++#define wlan_inw(a) in_be16((unsigned short *)((a)+_IO_BASE)) ++#define wlan_inw_le16_to_cpu(a) inw((a)) ++#define wlan_outw(v,a) out_be16((unsigned short *)((a)+_IO_BASE), (v)) ++#define wlan_outw_cpu_to_le16(v,a) outw((v),(a)) ++#else ++#define wlan_inw(a) inw((a)) ++#define wlan_inw_le16_to_cpu(a) __cpu_to_le16(inw((a))) ++#define wlan_outw(v,a) outw((v),(a)) ++#define wlan_outw_cpu_to_le16(v,a) outw(__cpu_to_le16((v)),(a)) ++#endif ++ ++/*=============================================================*/ ++/*------ Bit settings -----------------------------------------*/ ++/*=============================================================*/ ++#define ieee2host16(n) __le16_to_cpu(n) ++#define ieee2host32(n) __le32_to_cpu(n) ++#define host2ieee16(n) __cpu_to_le16(n) ++#define host2ieee32(n) __cpu_to_le32(n) ++ ++/* for constants */ ++#ifdef __LITTLE_ENDIAN ++ #define IEEE16(a,n) a = n, a##i = n, ++#else ++ #ifdef __BIG_ENDIAN ++ /* shifts would produce gcc warnings. Oh well... */ ++ #define IEEE16(a,n) a = n, a##i = ((n&0xff)*256 + ((n&0xff00)/256)), ++ #else ++ #error give me endianness or give me death ++ #endif ++#endif ++ ++/*=============================================================*/ ++/*------ Compiler Portability Macros --------------------------*/ ++/*=============================================================*/ ++#define WLAN_PACKED __attribute__ ((packed)) ++ ++/* Interrupt handler backwards compatibility stuff */ ++#ifndef IRQ_NONE ++#define IRQ_NONE ++#define IRQ_HANDLED ++typedef void irqreturn_t; ++#endif ++ ++#ifndef ARPHRD_IEEE80211_PRISM ++#define ARPHRD_IEEE80211_PRISM 802 ++#endif ++ ++#define ETH_P_80211_RAW (ETH_P_ECONET + 1) ++ ++/*============================================================================* ++ * Constants * ++ *============================================================================*/ ++#define WLAN_IEEE_OUI_LEN 3 ++ ++/*============================================================================* ++ * Types * ++ *============================================================================*/ ++ ++/* local ether header type */ ++typedef struct wlan_ethhdr { ++ u8 daddr[ETH_ALEN]; ++ u8 saddr[ETH_ALEN]; ++ u16 type; ++} WLAN_PACKED wlan_ethhdr_t; ++ ++/* local llc header type */ ++typedef struct wlan_llc { ++ u8 dsap; ++ u8 ssap; ++ u8 ctl; ++} WLAN_PACKED wlan_llc_t; ++ ++/* local snap header type */ ++typedef struct wlan_snap { ++ u8 oui[WLAN_IEEE_OUI_LEN]; ++ u16 type; ++} WLAN_PACKED wlan_snap_t; +Index: linux-2.6.23/drivers/net/wireless/acx/wlan_hdr.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/wlan_hdr.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,497 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++/*********************************************************************** ++** This code is based on elements which are ++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. ++** info@linux-wlan.com ++** http://www.linux-wlan.com ++*/ ++ ++/* mini-doc ++ ++Here are all 11b/11g/11a rates and modulations: ++ ++ 11b 11g 11a ++ --- --- --- ++ 1 |B |B | ++ 2 |Q |Q | ++ 5.5|Cp |C p| ++ 6 | |Od |O ++ 9 | |od |o ++11 |Cp |C p| ++12 | |Od |O ++18 | |od |o ++22 | | p| ++24 | |Od |O ++33 | | p| ++36 | |od |o ++48 | |od |o ++54 | |od |o ++ ++Mandatory: ++ B - DBPSK (Differential Binary Phase Shift Keying) ++ Q - DQPSK (Differential Quaternary Phase Shift Keying) ++ C - CCK (Complementary Code Keying, a form of DSSS ++ (Direct Sequence Spread Spectrum) modulation) ++ O - OFDM (Orthogonal Frequency Division Multiplexing) ++Optional: ++ o - OFDM ++ d - CCK-OFDM (also known as DSSS-OFDM) ++ p - PBCC (Packet Binary Convolutional Coding) ++ ++The term CCK-OFDM may be used interchangeably with DSSS-OFDM ++(the IEEE 802.11g-2003 standard uses the latter terminology). ++In the CCK-OFDM, the PLCP header of the frame uses the CCK form of DSSS, ++while the PLCP payload (the MAC frame) is modulated using OFDM. ++ ++Basically, you must use CCK-OFDM if you have mixed 11b/11g environment, ++or else (pure OFDM) 11b equipment may not realize that AP ++is sending a packet and start sending its own one. ++Sadly, looks like acx111 does not support CCK-OFDM, only pure OFDM. ++ ++Re PBCC: avoid using it. It makes sense only if you have ++TI "11b+" hardware. You _must_ use PBCC in order to reach 22Mbps on it. ++ ++Preambles: ++ ++Long preamble (at 1Mbit rate, takes 144 us): ++ 16 bytes ones ++ 2 bytes 0xF3A0 (lsb sent first) ++PLCP header follows (at 1Mbit also): ++ 1 byte Signal: speed, in 0.1Mbit units, except for: ++ 33Mbit: 33 (instead of 330 - doesn't fit in octet) ++ all CCK-OFDM rates: 30 ++ 1 byte Service ++ 0,1,4: reserved ++ 2: 1=locked clock ++ 3: 1=PBCC ++ 5: Length Extension (PBCC 22,33Mbit (11g only)) <- ++ 6: Length Extension (PBCC 22,33Mbit (11g only)) <- BLACK MAGIC HERE ++ 7: Length Extension <- ++ 2 bytes Length (time needed to tx this frame) ++ a) 5.5 Mbit/s CCK ++ Length = octets*8/5.5, rounded up to integer ++ b) 11 Mbit/s CCK ++ Length = octets*8/11, rounded up to integer ++ Service bit 7: ++ 0 = rounding took less than 8/11 ++ 1 = rounding took more than or equal to 8/11 ++ c) 5.5 Mbit/s PBCC ++ Length = (octets+1)*8/5.5, rounded up to integer ++ d) 11 Mbit/s PBCC ++ Length = (octets+1)*8/11, rounded up to integer ++ Service bit 7: ++ 0 = rounding took less than 8/11 ++ 1 = rounding took more than or equal to 8/11 ++ e) 22 Mbit/s PBCC ++ Length = (octets+1)*8/22, rounded up to integer ++ Service bits 6,7: ++ 00 = rounding took less than 8/22ths ++ 01 = rounding took 8/22...15/22ths ++ 10 = rounding took 16/22ths or more. ++ f) 33 Mbit/s PBCC ++ Length = (octets+1)*8/33, rounded up to integer ++ Service bits 5,6,7: ++ 000 rounding took less than 8/33 ++ 001 rounding took 8/33...15/33 ++ 010 rounding took 16/33...23/33 ++ 011 rounding took 24/33...31/33 ++ 100 rounding took 32/33 or more ++ 2 bytes CRC ++ ++PSDU follows (up to 2346 bytes at selected rate) ++ ++While Signal value alone is not enough to determine rate and modulation, ++Signal+Service is always sufficient. ++ ++Short preamble (at 1Mbit rate, takes 72 us): ++ 7 bytes zeroes ++ 2 bytes 0x05CF (lsb sent first) ++PLCP header follows *at 2Mbit/s*. Format is the same as in long preamble. ++PSDU follows (up to 2346 bytes at selected rate) ++ ++OFDM preamble is completely different, uses OFDM ++modulation from the start and thus easily identifiable. ++Not shown here. ++*/ ++ ++ ++/*********************************************************************** ++** Constants ++*/ ++ ++#define WLAN_HDR_A3_LEN 24 ++#define WLAN_HDR_A4_LEN 30 ++/* IV structure: ++** 3 bytes: Initialization Vector (24 bits) ++** 1 byte: 0..5: padding, must be 0; 6..7: key selector (0-3) ++*/ ++#define WLAN_WEP_IV_LEN 4 ++/* 802.11 says 2312 but looks like 2312 is a max size of _WEPed data_ */ ++#define WLAN_DATA_MAXLEN 2304 ++#define WLAN_WEP_ICV_LEN 4 ++#define WLAN_FCS_LEN 4 ++#define WLAN_A3FR_MAXLEN (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN) ++#define WLAN_A4FR_MAXLEN (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN) ++#define WLAN_A3FR_MAXLEN_FCS (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN + 4) ++#define WLAN_A4FR_MAXLEN_FCS (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN + 4) ++#define WLAN_A3FR_MAXLEN_WEP (WLAN_A3FR_MAXLEN + 8) ++#define WLAN_A4FR_MAXLEN_WEP (WLAN_A4FR_MAXLEN + 8) ++#define WLAN_A3FR_MAXLEN_WEP_FCS (WLAN_A3FR_MAXLEN_FCS + 8) ++#define WLAN_A4FR_MAXLEN_WEP_FCS (WLAN_A4FR_MAXLEN_FCS + 8) ++ ++#define WLAN_BSS_TS_LEN 8 ++#define WLAN_SSID_MAXLEN 32 ++#define WLAN_BEACON_FR_MAXLEN (WLAN_HDR_A3_LEN + 334) ++#define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_A3_LEN + 0) ++#define WLAN_DISASSOC_FR_MAXLEN (WLAN_HDR_A3_LEN + 2) ++#define WLAN_ASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 48) ++#define WLAN_ASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16) ++#define WLAN_REASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 54) ++#define WLAN_REASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16) ++#define WLAN_PROBEREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 44) ++#define WLAN_PROBERESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 78) ++#define WLAN_AUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 261) ++#define WLAN_DEAUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 2) ++#define WLAN_CHALLENGE_IE_LEN 130 ++#define WLAN_CHALLENGE_LEN 128 ++#define WLAN_WEP_MAXKEYLEN 13 ++#define WLAN_WEP_NKEYS 4 ++ ++/*--- Frame Control Field -------------------------------------*/ ++/* Frame Types */ ++#define WLAN_FTYPE_MGMT 0x00 ++#define WLAN_FTYPE_CTL 0x01 ++#define WLAN_FTYPE_DATA 0x02 ++ ++/* Frame subtypes */ ++/* Management */ ++#define WLAN_FSTYPE_ASSOCREQ 0x00 ++#define WLAN_FSTYPE_ASSOCRESP 0x01 ++#define WLAN_FSTYPE_REASSOCREQ 0x02 ++#define WLAN_FSTYPE_REASSOCRESP 0x03 ++#define WLAN_FSTYPE_PROBEREQ 0x04 ++#define WLAN_FSTYPE_PROBERESP 0x05 ++#define WLAN_FSTYPE_BEACON 0x08 ++#define WLAN_FSTYPE_ATIM 0x09 ++#define WLAN_FSTYPE_DISASSOC 0x0a ++#define WLAN_FSTYPE_AUTHEN 0x0b ++#define WLAN_FSTYPE_DEAUTHEN 0x0c ++ ++/* Control */ ++#define WLAN_FSTYPE_PSPOLL 0x0a ++#define WLAN_FSTYPE_RTS 0x0b ++#define WLAN_FSTYPE_CTS 0x0c ++#define WLAN_FSTYPE_ACK 0x0d ++#define WLAN_FSTYPE_CFEND 0x0e ++#define WLAN_FSTYPE_CFENDCFACK 0x0f ++ ++/* Data */ ++#define WLAN_FSTYPE_DATAONLY 0x00 ++#define WLAN_FSTYPE_DATA_CFACK 0x01 ++#define WLAN_FSTYPE_DATA_CFPOLL 0x02 ++#define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03 ++#define WLAN_FSTYPE_NULL 0x04 ++#define WLAN_FSTYPE_CFACK 0x05 ++#define WLAN_FSTYPE_CFPOLL 0x06 ++#define WLAN_FSTYPE_CFACK_CFPOLL 0x07 ++ ++/*--- FC Constants v. 2.0 ------------------------------------*/ ++/* Each constant is defined twice: WF_CONST is in host */ ++/* byteorder, WF_CONSTi is in ieee byteorder. */ ++/* Usage: */ ++/* printf("the frame subtype is %X", WF_FC_FTYPEi & rx.fc); */ ++/* tx.fc = WF_FTYPE_CTLi | WF_FSTYPE_RTSi; */ ++/*------------------------------------------------------------*/ ++ ++enum { ++/*--- Frame Control Field -------------------------------------*/ ++/* Protocol version: always 0 for current 802.11 standards */ ++IEEE16(WF_FC_PVER, 0x0003) ++IEEE16(WF_FC_FTYPE, 0x000c) ++IEEE16(WF_FC_FSTYPE, 0x00f0) ++IEEE16(WF_FC_TODS, 0x0100) ++IEEE16(WF_FC_FROMDS, 0x0200) ++IEEE16(WF_FC_FROMTODS, 0x0300) ++IEEE16(WF_FC_MOREFRAG, 0x0400) ++IEEE16(WF_FC_RETRY, 0x0800) ++/* Indicates PS mode in which STA will be after successful completion ++** of current frame exchange sequence. Always 0 for AP frames */ ++IEEE16(WF_FC_PWRMGT, 0x1000) ++/* What MoreData=1 means: ++** From AP to STA in PS mode: don't sleep yet, I have more frames for you ++** From Contention-Free (CF) Pollable STA in response to a CF-Poll: ++** STA has buffered frames for transmission in response to next CF-Poll ++** Bcast/mcast frames transmitted from AP: ++** when additional bcast/mcast frames remain to be transmitted by AP ++** during this beacon interval ++** In all other cases MoreData=0 */ ++IEEE16(WF_FC_MOREDATA, 0x2000) ++IEEE16(WF_FC_ISWEP, 0x4000) ++IEEE16(WF_FC_ORDER, 0x8000) ++ ++/* Frame Types */ ++IEEE16(WF_FTYPE_MGMT, 0x00) ++IEEE16(WF_FTYPE_CTL, 0x04) ++IEEE16(WF_FTYPE_DATA, 0x08) ++ ++/* Frame subtypes */ ++/* Management */ ++IEEE16(WF_FSTYPE_ASSOCREQ, 0x00) ++IEEE16(WF_FSTYPE_ASSOCRESP, 0x10) ++IEEE16(WF_FSTYPE_REASSOCREQ, 0x20) ++IEEE16(WF_FSTYPE_REASSOCRESP, 0x30) ++IEEE16(WF_FSTYPE_PROBEREQ, 0x40) ++IEEE16(WF_FSTYPE_PROBERESP, 0x50) ++IEEE16(WF_FSTYPE_BEACON, 0x80) ++IEEE16(WF_FSTYPE_ATIM, 0x90) ++IEEE16(WF_FSTYPE_DISASSOC, 0xa0) ++IEEE16(WF_FSTYPE_AUTHEN, 0xb0) ++IEEE16(WF_FSTYPE_DEAUTHEN, 0xc0) ++ ++/* Control */ ++IEEE16(WF_FSTYPE_PSPOLL, 0xa0) ++IEEE16(WF_FSTYPE_RTS, 0xb0) ++IEEE16(WF_FSTYPE_CTS, 0xc0) ++IEEE16(WF_FSTYPE_ACK, 0xd0) ++IEEE16(WF_FSTYPE_CFEND, 0xe0) ++IEEE16(WF_FSTYPE_CFENDCFACK, 0xf0) ++ ++/* Data */ ++IEEE16(WF_FSTYPE_DATAONLY, 0x00) ++IEEE16(WF_FSTYPE_DATA_CFACK, 0x10) ++IEEE16(WF_FSTYPE_DATA_CFPOLL, 0x20) ++IEEE16(WF_FSTYPE_DATA_CFACK_CFPOLL, 0x30) ++IEEE16(WF_FSTYPE_NULL, 0x40) ++IEEE16(WF_FSTYPE_CFACK, 0x50) ++IEEE16(WF_FSTYPE_CFPOLL, 0x60) ++IEEE16(WF_FSTYPE_CFACK_CFPOLL, 0x70) ++}; ++ ++ ++/*********************************************************************** ++** Macros ++*/ ++ ++/*--- Duration Macros ----------------------------------------*/ ++/* Macros to get/set the bitfields of the Duration Field */ ++/* - the duration value is only valid when bit15 is zero */ ++/* - the firmware handles these values, so I'm not going */ ++/* to use these macros right now. */ ++/*------------------------------------------------------------*/ ++ ++/*--- Sequence Control Macros -------------------------------*/ ++/* Macros to get/set the bitfields of the Sequence Control */ ++/* Field. */ ++/*------------------------------------------------------------*/ ++#define WLAN_GET_SEQ_FRGNUM(n) ((u16)(n) & 0x000f) ++#define WLAN_GET_SEQ_SEQNUM(n) (((u16)(n) & 0xfff0) >> 4) ++ ++/*--- Data ptr macro -----------------------------------------*/ ++/* Creates a u8* to the data portion of a frame */ ++/* Assumes you're passing in a ptr to the beginning of the hdr*/ ++/*------------------------------------------------------------*/ ++#define WLAN_HDR_A3_DATAP(p) (((u8*)(p)) + WLAN_HDR_A3_LEN) ++#define WLAN_HDR_A4_DATAP(p) (((u8*)(p)) + WLAN_HDR_A4_LEN) ++ ++ ++/*********************************************************************** ++** Types ++*/ ++ ++/* 802.11 header type ++** ++** Note the following: ++** a1 *always* is receiver's mac or bcast/mcast ++** a2 *always* is transmitter's mac, if a2 exists ++** seq: [0:3] frag#, [4:15] seq# - used for dup detection ++** (dups from retries have same seq#) */ ++typedef struct wlan_hdr { ++ u16 fc; ++ u16 dur; ++ u8 a1[ETH_ALEN]; ++ u8 a2[ETH_ALEN]; ++ u8 a3[ETH_ALEN]; ++ u16 seq; ++ u8 a4[ETH_ALEN]; ++} WLAN_PACKED wlan_hdr_t; ++ ++/* Separate structs for use if frame type is known */ ++typedef struct wlan_hdr_a3 { ++ u16 fc; ++ u16 dur; ++ u8 a1[ETH_ALEN]; ++ u8 a2[ETH_ALEN]; ++ u8 a3[ETH_ALEN]; ++ u16 seq; ++} WLAN_PACKED wlan_hdr_a3_t; ++ ++typedef struct wlan_hdr_mgmt { ++ u16 fc; ++ u16 dur; ++ u8 da[ETH_ALEN]; ++ u8 sa[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; ++ u16 seq; ++} WLAN_PACKED wlan_hdr_mgmt_t; ++ ++#ifdef NOT_NEEDED_YET ++typedef struct { /* ad-hoc peer->peer (to/from DS = 0/0) */ ++ u16 fc; ++ u16 dur; ++ u8 da[ETH_ALEN]; ++ u8 sa[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; ++ u16 seq; ++} WLAN_PACKED ibss; ++typedef struct { /* ap->sta (to/from DS = 0/1) */ ++ u16 fc; ++ u16 dur; ++ u8 da[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; ++ u8 sa[ETH_ALEN]; ++ u16 seq; ++} WLAN_PACKED fromap; ++typedef struct { /* sta->ap (to/from DS = 1/0) */ ++ u16 fc; ++ u16 dur; ++ u8 bssid[ETH_ALEN]; ++ u8 sa[ETH_ALEN]; ++ u8 da[ETH_ALEN]; ++ u16 seq; ++} WLAN_PACKED toap; ++typedef struct { /* wds->wds (to/from DS = 1/1), the only 4addr pkt */ ++ u16 fc; ++ u16 dur; ++ u8 ra[ETH_ALEN]; ++ u8 ta[ETH_ALEN]; ++ u8 da[ETH_ALEN]; ++ u16 seq; ++ u8 sa[ETH_ALEN]; ++} WLAN_PACKED wds; ++typedef struct { /* all management packets */ ++ u16 fc; ++ u16 dur; ++ u8 da[ETH_ALEN]; ++ u8 sa[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; ++ u16 seq; ++} WLAN_PACKED mgmt; ++typedef struct { /* has no body, just a FCS */ ++ u16 fc; ++ u16 dur; ++ u8 ra[ETH_ALEN]; ++ u8 ta[ETH_ALEN]; ++} WLAN_PACKED rts; ++typedef struct { /* has no body, just a FCS */ ++ u16 fc; ++ u16 dur; ++ u8 ra[ETH_ALEN]; ++} WLAN_PACKED cts; ++typedef struct { /* has no body, just a FCS */ ++ u16 fc; ++ u16 dur; ++ u8 ra[ETH_ALEN]; ++} WLAN_PACKED ack; ++typedef struct { /* has no body, just a FCS */ ++ u16 fc; ++ /* NB: this one holds Assoc ID in dur field: */ ++ u16 aid; ++ u8 bssid[ETH_ALEN]; ++ u8 ta[ETH_ALEN]; ++} WLAN_PACKED pspoll; ++typedef struct { /* has no body, just a FCS */ ++ u16 fc; ++ u16 dur; ++ u8 ra[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; ++} WLAN_PACKED cfend; ++typedef struct { /* has no body, just a FCS */ ++ u16 fc; ++ u16 dur; ++ u8 ra[ETH_ALEN]; ++ u8 bssid[ETH_ALEN]; ++} WLAN_PACKED cfendcfack; ++#endif ++ ++/* Prism header emulation (monitor mode) */ ++typedef struct wlanitem_u32 { ++ u32 did; ++ u16 status; ++ u16 len; ++ u32 data; ++} WLAN_PACKED wlanitem_u32_t; ++#define WLANITEM_STATUS_data_ok 0 ++#define WLANITEM_STATUS_no_value 1 ++#define WLANITEM_STATUS_invalid_itemname 2 ++#define WLANITEM_STATUS_invalid_itemdata 3 ++#define WLANITEM_STATUS_missing_itemdata 4 ++#define WLANITEM_STATUS_incomplete_itemdata 5 ++#define WLANITEM_STATUS_invalid_msg_did 6 ++#define WLANITEM_STATUS_invalid_mib_did 7 ++#define WLANITEM_STATUS_missing_conv_func 8 ++#define WLANITEM_STATUS_string_too_long 9 ++#define WLANITEM_STATUS_data_out_of_range 10 ++#define WLANITEM_STATUS_string_too_short 11 ++#define WLANITEM_STATUS_missing_valid_func 12 ++#define WLANITEM_STATUS_unknown 13 ++#define WLANITEM_STATUS_invalid_did 14 ++#define WLANITEM_STATUS_missing_print_func 15 ++ ++#define WLAN_DEVNAMELEN_MAX 16 ++typedef struct wlansniffrm { ++ u32 msgcode; ++ u32 msglen; ++ u8 devname[WLAN_DEVNAMELEN_MAX]; ++ wlanitem_u32_t hosttime; ++ wlanitem_u32_t mactime; ++ wlanitem_u32_t channel; ++ wlanitem_u32_t rssi; ++ wlanitem_u32_t sq; ++ wlanitem_u32_t signal; ++ wlanitem_u32_t noise; ++ wlanitem_u32_t rate; ++ wlanitem_u32_t istx; /* tx? 0:no 1:yes */ ++ wlanitem_u32_t frmlen; ++} WLAN_PACKED wlansniffrm_t; ++#define WLANSNIFFFRM 0x0041 ++#define WLANSNIFFFRM_hosttime 0x1041 ++#define WLANSNIFFFRM_mactime 0x2041 ++#define WLANSNIFFFRM_channel 0x3041 ++#define WLANSNIFFFRM_rssi 0x4041 ++#define WLANSNIFFFRM_sq 0x5041 ++#define WLANSNIFFFRM_signal 0x6041 ++#define WLANSNIFFFRM_noise 0x7041 ++#define WLANSNIFFFRM_rate 0x8041 ++#define WLANSNIFFFRM_istx 0x9041 ++#define WLANSNIFFFRM_frmlen 0xA041 +Index: linux-2.6.23/drivers/net/wireless/acx/wlan_mgmt.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/acx/wlan_mgmt.h 2008-01-20 21:13:40.000000000 +0000 +@@ -0,0 +1,582 @@ ++/*********************************************************************** ++** Copyright (C) 2003 ACX100 Open Source Project ++** ++** The contents of this file are subject to the Mozilla Public ++** License Version 1.1 (the "License"); you may not use this file ++** except in compliance with the License. You may obtain a copy of ++** the License at http://www.mozilla.org/MPL/ ++** ++** Software distributed under the License is distributed on an "AS ++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or ++** implied. See the License for the specific language governing ++** rights and limitations under the License. ++** ++** Alternatively, the contents of this file may be used under the ++** terms of the GNU Public License version 2 (the "GPL"), in which ++** case the provisions of the GPL are applicable instead of the ++** above. If you wish to allow the use of your version of this file ++** only under the terms of the GPL and not to allow others to use ++** your version of this file under the MPL, indicate your decision ++** by deleting the provisions above and replace them with the notice ++** and other provisions required by the GPL. If you do not delete ++** the provisions above, a recipient may use your version of this ++** file under either the MPL or the GPL. ++** --------------------------------------------------------------------- ++** Inquiries regarding the ACX100 Open Source Project can be ++** made directly to: ++** ++** acx100-users@lists.sf.net ++** http://acx100.sf.net ++** --------------------------------------------------------------------- ++*/ ++ ++/*********************************************************************** ++** This code is based on elements which are ++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. ++** info@linux-wlan.com ++** http://www.linux-wlan.com ++*/ ++ ++/*********************************************************************** ++** Constants ++*/ ++ ++/*-- Information Element IDs --------------------*/ ++#define WLAN_EID_SSID 0 ++#define WLAN_EID_SUPP_RATES 1 ++#define WLAN_EID_FH_PARMS 2 ++#define WLAN_EID_DS_PARMS 3 ++#define WLAN_EID_CF_PARMS 4 ++#define WLAN_EID_TIM 5 ++#define WLAN_EID_IBSS_PARMS 6 ++#define WLAN_EID_COUNTRY 7 /* 802.11d */ ++#define WLAN_EID_FH_HOP_PARMS 8 /* 802.11d */ ++#define WLAN_EID_FH_TABLE 9 /* 802.11d */ ++#define WLAN_EID_REQUEST 10 /* 802.11d */ ++/*-- values 11-15 reserved --*/ ++#define WLAN_EID_CHALLENGE 16 ++/*-- values 17-31 reserved for challenge text extension --*/ ++#define WLAN_EID_PWR_CONSTRAINT 32 /* 11h PowerConstraint */ ++#define WLAN_EID_ERP_INFO 42 /* was seen from WRT54GS with OpenWrt */ ++#define WLAN_EID_NONERP 47 /* was seen from WRT54GS with OpenWrt */ ++#define WLAN_EID_RSN 48 ++#define WLAN_EID_EXT_RATES 50 ++#define WLAN_EID_UNKNOWN128 128 ++#define WLAN_EID_UNKNOWN133 133 ++#define WLAN_EID_GENERIC 221 /* was seen from WRT54GS with OpenWrt */ ++#define WLAN_EID_UNKNOWN223 223 ++ ++#if 0 ++#define WLAN_EID_PWR_CAP 33 /* 11h PowerCapability */ ++#define WLAN_EID_TPC_REQUEST 34 /* 11h TPC Request */ ++#define WLAN_EID_TPC_REPORT 35 /* 11h TPC Report */ ++#define WLAN_EID_SUPP_CHANNELS 36 /* 11h Supported Channels */ ++#define WLAN_EID_CHANNEL_SWITCH 37 /* 11h ChannelSwitch */ ++#define WLAN_EID_MEASURE_REQUEST 38 /* 11h MeasurementRequest */ ++#define WLAN_EID_MEASURE_REPORT 39 /* 11h MeasurementReport */ ++#define WLAN_EID_QUIET_ID 40 /* 11h Quiet */ ++#define WLAN_EID_IBSS_DFS_ID 41 /* 11h IBSS_DFS */ ++#endif ++ ++/*-- Reason Codes -------------------------------*/ ++#define WLAN_MGMT_REASON_RSVD 0 ++#define WLAN_MGMT_REASON_UNSPEC 1 ++#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2 ++#define WLAN_MGMT_REASON_DEAUTH_LEAVING 3 ++#define WLAN_MGMT_REASON_DISASSOC_INACTIVE 4 ++#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY 5 ++#define WLAN_MGMT_REASON_CLASS2_NONAUTH 6 ++#define WLAN_MGMT_REASON_CLASS3_NONASSOC 7 ++#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT 8 ++#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH 9 ++ ++/*-- Status Codes -------------------------------*/ ++#define WLAN_MGMT_STATUS_SUCCESS 0 ++#define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1 ++#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10 ++#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC 11 ++#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC 12 ++#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG 13 ++#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ 14 ++#define WLAN_MGMT_STATUS_CHALLENGE_FAIL 15 ++#define WLAN_MGMT_STATUS_AUTH_TIMEOUT 16 ++#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY 17 ++#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES 18 ++/* p80211b additions */ ++#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOSHORT 19 ++#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOPBCC 20 ++#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOAGILITY 21 ++ ++/*-- Auth Algorithm Field ---------------------------*/ ++#define WLAN_AUTH_ALG_OPENSYSTEM 0 ++#define WLAN_AUTH_ALG_SHAREDKEY 1 ++ ++/*-- Management Frame Field Offsets -------------*/ ++/* Note: Not all fields are listed because of variable lengths */ ++/* Note: These offsets are from the start of the frame data */ ++ ++#define WLAN_BEACON_OFF_TS 0 ++#define WLAN_BEACON_OFF_BCN_INT 8 ++#define WLAN_BEACON_OFF_CAPINFO 10 ++#define WLAN_BEACON_OFF_SSID 12 ++ ++#define WLAN_DISASSOC_OFF_REASON 0 ++ ++#define WLAN_ASSOCREQ_OFF_CAP_INFO 0 ++#define WLAN_ASSOCREQ_OFF_LISTEN_INT 2 ++#define WLAN_ASSOCREQ_OFF_SSID 4 ++ ++#define WLAN_ASSOCRESP_OFF_CAP_INFO 0 ++#define WLAN_ASSOCRESP_OFF_STATUS 2 ++#define WLAN_ASSOCRESP_OFF_AID 4 ++#define WLAN_ASSOCRESP_OFF_SUPP_RATES 6 ++ ++#define WLAN_REASSOCREQ_OFF_CAP_INFO 0 ++#define WLAN_REASSOCREQ_OFF_LISTEN_INT 2 ++#define WLAN_REASSOCREQ_OFF_CURR_AP 4 ++#define WLAN_REASSOCREQ_OFF_SSID 10 ++ ++#define WLAN_REASSOCRESP_OFF_CAP_INFO 0 ++#define WLAN_REASSOCRESP_OFF_STATUS 2 ++#define WLAN_REASSOCRESP_OFF_AID 4 ++#define WLAN_REASSOCRESP_OFF_SUPP_RATES 6 ++ ++#define WLAN_PROBEREQ_OFF_SSID 0 ++ ++#define WLAN_PROBERESP_OFF_TS 0 ++#define WLAN_PROBERESP_OFF_BCN_INT 8 ++#define WLAN_PROBERESP_OFF_CAP_INFO 10 ++#define WLAN_PROBERESP_OFF_SSID 12 ++ ++#define WLAN_AUTHEN_OFF_AUTH_ALG 0 ++#define WLAN_AUTHEN_OFF_AUTH_SEQ 2 ++#define WLAN_AUTHEN_OFF_STATUS 4 ++#define WLAN_AUTHEN_OFF_CHALLENGE 6 ++ ++#define WLAN_DEAUTHEN_OFF_REASON 0 ++ ++enum { ++IEEE16(WF_MGMT_CAP_ESS, 0x0001) ++IEEE16(WF_MGMT_CAP_IBSS, 0x0002) ++/* In (re)assoc request frames by STA: ++** Pollable=0, PollReq=0: STA is not CF-Pollable ++** 0 1: STA is CF-Pollable, not requesting to be placed on the CF-Polling list ++** 1 0: STA is CF-Pollable, requesting to be placed on the CF-Polling list ++** 1 1: STA is CF-Pollable, requesting never to be polled ++** In beacon, proberesp, (re)assoc resp frames by AP: ++** 0 0: No point coordinator at AP ++** 0 1: Point coordinator at AP for delivery only (no polling) ++** 1 0: Point coordinator at AP for delivery and polling ++** 1 1: Reserved */ ++IEEE16(WF_MGMT_CAP_CFPOLLABLE, 0x0004) ++IEEE16(WF_MGMT_CAP_CFPOLLREQ, 0x0008) ++/* 1=non-WEP data frames are disallowed */ ++IEEE16(WF_MGMT_CAP_PRIVACY, 0x0010) ++/* In beacon, proberesp, (re)assocresp by AP/AdHoc: ++** 1=use of shortpre is allowed ("I can receive shortpre") */ ++IEEE16(WF_MGMT_CAP_SHORT, 0x0020) ++IEEE16(WF_MGMT_CAP_PBCC, 0x0040) ++IEEE16(WF_MGMT_CAP_AGILITY, 0x0080) ++/* In (re)assoc request frames by STA: ++** 1=short slot time implemented and enabled ++** NB: AP shall use long slot time beginning at the next Beacon after assoc ++** of STA with this bit set to 0 ++** In beacon, proberesp, (re)assoc resp frames by AP: ++** currently used slot time value: 0/1 - long/short */ ++IEEE16(WF_MGMT_CAP_SHORTSLOT, 0x0400) ++/* In (re)assoc request frames by STA: 1=CCK-OFDM is implemented and enabled ++** In beacon, proberesp, (re)assoc resp frames by AP/AdHoc: ++** 1=CCK-OFDM is allowed */ ++IEEE16(WF_MGMT_CAP_CCKOFDM, 0x2000) ++}; ++ ++ ++/*********************************************************************** ++** Types ++*/ ++ ++/* Information Element types */ ++ ++/* prototype structure, all IEs start with these members */ ++typedef struct wlan_ie { ++ u8 eid; ++ u8 len; ++} WLAN_PACKED wlan_ie_t; ++ ++/*-- Service Set Identity (SSID) -----------------*/ ++typedef struct wlan_ie_ssid { ++ u8 eid; ++ u8 len; ++ u8 ssid[1]; /* may be zero */ ++} WLAN_PACKED wlan_ie_ssid_t; ++ ++/*-- Supported Rates -----------------------------*/ ++typedef struct wlan_ie_supp_rates { ++ u8 eid; ++ u8 len; ++ u8 rates[1]; /* had better be at LEAST one! */ ++} WLAN_PACKED wlan_ie_supp_rates_t; ++ ++/*-- FH Parameter Set ----------------------------*/ ++typedef struct wlan_ie_fh_parms { ++ u8 eid; ++ u8 len; ++ u16 dwell; ++ u8 hopset; ++ u8 hoppattern; ++ u8 hopindex; ++} WLAN_PACKED wlan_ie_fh_parms_t; ++ ++/*-- DS Parameter Set ----------------------------*/ ++typedef struct wlan_ie_ds_parms { ++ u8 eid; ++ u8 len; ++ u8 curr_ch; ++} WLAN_PACKED wlan_ie_ds_parms_t; ++ ++/*-- CF Parameter Set ----------------------------*/ ++typedef struct wlan_ie_cf_parms { ++ u8 eid; ++ u8 len; ++ u8 cfp_cnt; ++ u8 cfp_period; ++ u16 cfp_maxdur; ++ u16 cfp_durremaining; ++} WLAN_PACKED wlan_ie_cf_parms_t; ++ ++/*-- TIM ------------------------------------------*/ ++typedef struct wlan_ie_tim { ++ u8 eid; ++ u8 len; ++ u8 dtim_cnt; ++ u8 dtim_period; ++ u8 bitmap_ctl; ++ u8 virt_bm[1]; ++} WLAN_PACKED wlan_ie_tim_t; ++ ++/*-- IBSS Parameter Set ---------------------------*/ ++typedef struct wlan_ie_ibss_parms { ++ u8 eid; ++ u8 len; ++ u16 atim_win; ++} WLAN_PACKED wlan_ie_ibss_parms_t; ++ ++/*-- Challenge Text ------------------------------*/ ++typedef struct wlan_ie_challenge { ++ u8 eid; ++ u8 len; ++ u8 challenge[1]; ++} WLAN_PACKED wlan_ie_challenge_t; ++ ++/*-- ERP (42) -------------------------------------*/ ++typedef struct wlan_ie_erp { ++ u8 eid; ++ u8 len; ++ /* bit 0:Non ERP present ++ ** 1:Use Protection ++ ** 2:Barker Preamble mode ++ ** 3-7:reserved */ ++ u8 erp; ++} WLAN_PACKED wlan_ie_erp_t; ++ ++/* Types for parsing mgmt frames */ ++ ++/* prototype structure, all mgmt frame types will start with these members */ ++typedef struct wlan_fr_mgmt { ++ u16 type; ++ u16 len; /* DOES NOT include FCS */ ++ wlan_hdr_t *hdr; ++ /* used for target specific data, skb in Linux */ ++ /*-- fixed fields -----------*/ ++ /*-- info elements ----------*/ ++} WLAN_PACKED wlan_fr_mgmt_t; ++ ++/*-- Beacon ---------------------------------------*/ ++typedef struct wlan_fr_beacon { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u64 *ts; ++ u16 *bcn_int; ++ u16 *cap_info; ++ /*-- info elements ----------*/ ++ wlan_ie_ssid_t *ssid; ++ wlan_ie_supp_rates_t *supp_rates; ++ wlan_ie_supp_rates_t *ext_rates; ++ wlan_ie_fh_parms_t *fh_parms; ++ wlan_ie_ds_parms_t *ds_parms; ++ wlan_ie_cf_parms_t *cf_parms; ++ wlan_ie_ibss_parms_t *ibss_parms; ++ wlan_ie_tim_t *tim; /* in beacon only, not proberesp */ ++ wlan_ie_erp_t *erp; /* in beacon only, not proberesp */ ++} wlan_fr_beacon_t; ++#define wlan_fr_proberesp wlan_fr_beacon ++#define wlan_fr_proberesp_t wlan_fr_beacon_t ++ ++/*-- IBSS ATIM ------------------------------------*/ ++typedef struct wlan_fr_ibssatim { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ /*-- info elements ----------*/ ++ /* this frame type has a null body */ ++} wlan_fr_ibssatim_t; ++ ++/*-- Disassociation -------------------------------*/ ++typedef struct wlan_fr_disassoc { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *reason; ++ /*-- info elements ----------*/ ++} wlan_fr_disassoc_t; ++ ++/*-- Association Request --------------------------*/ ++typedef struct wlan_fr_assocreq { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *cap_info; ++ u16 *listen_int; ++ /*-- info elements ----------*/ ++ wlan_ie_ssid_t *ssid; ++ wlan_ie_supp_rates_t *supp_rates; ++ wlan_ie_supp_rates_t *ext_rates; ++} wlan_fr_assocreq_t; ++ ++/*-- Association Response -------------------------*/ ++typedef struct wlan_fr_assocresp { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *cap_info; ++ u16 *status; ++ u16 *aid; ++ /*-- info elements ----------*/ ++ wlan_ie_supp_rates_t *supp_rates; ++ wlan_ie_supp_rates_t *ext_rates; ++} wlan_fr_assocresp_t; ++ ++/*-- Reassociation Request ------------------------*/ ++typedef struct wlan_fr_reassocreq { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *cap_info; ++ u16 *listen_int; ++ u8 *curr_ap; ++ /*-- info elements ----------*/ ++ wlan_ie_ssid_t *ssid; ++ wlan_ie_supp_rates_t *supp_rates; ++ wlan_ie_supp_rates_t *ext_rates; ++} wlan_fr_reassocreq_t; ++ ++/*-- Reassociation Response -----------------------*/ ++typedef struct wlan_fr_reassocresp { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *cap_info; ++ u16 *status; ++ u16 *aid; ++ /*-- info elements ----------*/ ++ wlan_ie_supp_rates_t *supp_rates; ++ wlan_ie_supp_rates_t *ext_rates; ++} wlan_fr_reassocresp_t; ++ ++/*-- Probe Request --------------------------------*/ ++typedef struct wlan_fr_probereq { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ /*-- info elements ----------*/ ++ wlan_ie_ssid_t *ssid; ++ wlan_ie_supp_rates_t *supp_rates; ++ wlan_ie_supp_rates_t *ext_rates; ++} wlan_fr_probereq_t; ++ ++/*-- Authentication -------------------------------*/ ++typedef struct wlan_fr_authen { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *auth_alg; ++ u16 *auth_seq; ++ u16 *status; ++ /*-- info elements ----------*/ ++ wlan_ie_challenge_t *challenge; ++} wlan_fr_authen_t; ++ ++/*-- Deauthenication -----------------------------*/ ++typedef struct wlan_fr_deauthen { ++ u16 type; ++ u16 len; ++ wlan_hdr_t *hdr; ++ /*-- fixed fields -----------*/ ++ u16 *reason; ++ /*-- info elements ----------*/ ++} wlan_fr_deauthen_t; ++ ++/* Types for building mgmt frames */ ++ ++/* Warning. Several types used in below structs are ++** in fact variable length. Use structs with such fields with caution */ ++typedef struct auth_frame_body { ++ u16 auth_alg; ++ u16 auth_seq; ++ u16 status; ++ wlan_ie_challenge_t challenge; ++} WLAN_PACKED auth_frame_body_t; ++ ++typedef struct assocresp_frame_body { ++ u16 cap_info; ++ u16 status; ++ u16 aid; ++ wlan_ie_supp_rates_t rates; ++} WLAN_PACKED assocresp_frame_body_t; ++ ++typedef struct reassocreq_frame_body { ++ u16 cap_info; ++ u16 listen_int; ++ u8 current_ap[ETH_ALEN]; ++ wlan_ie_ssid_t ssid; ++/* access to this one is disabled since ssid_t is variable length: */ ++ /* wlan_ie_supp_rates_t rates; */ ++} WLAN_PACKED reassocreq_frame_body_t; ++ ++typedef struct reassocresp_frame_body { ++ u16 cap_info; ++ u16 status; ++ u16 aid; ++ wlan_ie_supp_rates_t rates; ++} WLAN_PACKED reassocresp_frame_body_t; ++ ++typedef struct deauthen_frame_body { ++ u16 reason; ++} WLAN_PACKED deauthen_frame_body_t; ++ ++typedef struct disassoc_frame_body { ++ u16 reason; ++} WLAN_PACKED disassoc_frame_body_t; ++ ++typedef struct probereq_frame_body { ++ wlan_ie_ssid_t ssid; ++ wlan_ie_supp_rates_t rates; ++} WLAN_PACKED probereq_frame_body_t; ++ ++typedef struct proberesp_frame_body { ++ u8 timestamp[8]; ++ u16 beacon_int; ++ u16 cap_info; ++ wlan_ie_ssid_t ssid; ++/* access to these is disabled since ssid_t is variable length: */ ++ /* wlan_ie_supp_rates_t rates; */ ++ /* fhps_t fhps; */ ++ /* dsps_t dsps; */ ++ /* cfps_t cfps; */ ++} WLAN_PACKED proberesp_frame_body_t; ++ ++ ++/*********************************************************************** ++** Functions ++*/ ++ ++/* Helpers for parsing mgmt frames */ ++void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t *f); ++void wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t *f); ++void wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t *f); ++void wlan_mgmt_decode_authen(wlan_fr_authen_t *f); ++void wlan_mgmt_decode_beacon(wlan_fr_beacon_t *f); ++void wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t *f); ++void wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t *f); ++void wlan_mgmt_decode_probereq(wlan_fr_probereq_t *f); ++void wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t *f); ++void wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t *f); ++void wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t *f); ++ ++/* Helpers for building mgmt frames */ ++static inline u8* ++wlan_fill_ie_ssid(u8 *p, int len, const char *ssid) ++{ ++ struct wlan_ie_ssid *ie = (void*)p; ++ ie->eid = WLAN_EID_SSID; ++ ie->len = len; ++ memcpy(ie->ssid, ssid, len); ++ return p + len + 2; ++} ++/* This controls whether we create 802.11g 'ext supported rates' IEs ++** or just create overlong 'supported rates' IEs instead ++** (non-11g compliant) */ ++#define WE_OBEY_802_11G 1 ++static inline u8* ++wlan_fill_ie_rates(u8 *p, int len, const u8 *rates) ++{ ++ struct wlan_ie_supp_rates *ie = (void*)p; ++#if WE_OBEY_802_11G ++ if (len > 8 ) len = 8; ++#endif ++ /* supported rates (1 to 8 octets) */ ++ ie->eid = WLAN_EID_SUPP_RATES; ++ ie->len = len; ++ memcpy(ie->rates, rates, len); ++ return p + len + 2; ++} ++/* This one wouldn't create an IE at all if not needed */ ++static inline u8* ++wlan_fill_ie_rates_ext(u8 *p, int len, const u8 *rates) ++{ ++ struct wlan_ie_supp_rates *ie = (void*)p; ++#if !WE_OBEY_802_11G ++ return p; ++#endif ++ len -= 8; ++ if (len <= 0) return p; ++ /* ext supported rates */ ++ ie->eid = WLAN_EID_EXT_RATES; ++ ie->len = len; ++ memcpy(ie->rates, rates+8, len); ++ return p + len + 2; ++} ++static inline u8* ++wlan_fill_ie_ds_parms(u8 *p, int channel) ++{ ++ struct wlan_ie_ds_parms *ie = (void*)p; ++ ie->eid = WLAN_EID_DS_PARMS; ++ ie->len = 1; ++ ie->curr_ch = channel; ++ return p + sizeof(*ie); ++} ++static inline u8* ++wlan_fill_ie_ibss_parms(u8 *p, int atim_win) ++{ ++ struct wlan_ie_ibss_parms *ie = (void*)p; ++ ie->eid = WLAN_EID_IBSS_PARMS; ++ ie->len = 2; ++ ie->atim_win = atim_win; ++ return p + sizeof(*ie); ++} ++static inline u8* ++wlan_fill_ie_tim(u8 *p, int rem, int period, int bcast, ++ int ofs, int len, const u8 *vbm) ++{ ++ struct wlan_ie_tim *ie = (void*)p; ++ ie->eid = WLAN_EID_TIM; ++ ie->len = len + 3; ++ ie->dtim_cnt = rem; ++ ie->dtim_period = period; ++ ie->bitmap_ctl = ofs | (bcast!=0); ++ if (vbm) ++ memcpy(ie->virt_bm, vbm, len); /* min 1 byte */ ++ else ++ ie->virt_bm[0] = 0; ++ return p + len + 3 + 2; ++} +Index: linux-2.6.23/drivers/net/wireless/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/net/wireless/Kconfig 2008-01-20 21:13:17.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/Kconfig 2008-01-20 21:15:12.000000000 +0000 +@@ -5,6 +5,36 @@ + menu "Wireless LAN" + depends on !S390 + ++config NET_RADIO ++ bool "Wireless LAN drivers (non-hamradio) & Wireless Extensions" ++ select WIRELESS_EXT ++ ---help--- ++ Support for wireless LANs and everything having to do with radio, ++ but not with amateur radio or FM broadcasting. ++ ++ Saying Y here also enables the Wireless Extensions (creates ++ /proc/net/wireless and enables iwconfig access). The Wireless ++ Extension is a generic API allowing a driver to expose to the user ++ space configuration and statistics specific to common Wireless LANs. ++ The beauty of it is that a single set of tool can support all the ++ variations of Wireless LANs, regardless of their type (as long as ++ the driver supports Wireless Extension). Another advantage is that ++ these parameters may be changed on the fly without restarting the ++ driver (or Linux). If you wish to use Wireless Extensions with ++ wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch ++ the tools from ++ . ++ ++config NET_WIRELESS_RTNETLINK ++ bool "Wireless Extension API over RtNetlink" ++ depends on NET_RADIO ++ ---help--- ++ Support the Wireless Extension API over the RtNetlink socket ++ in addition to the traditional ioctl interface (selected above). ++ ++ For now, few tools use this facility, but it might grow in the ++ future. The only downside is that it adds 4.5 kB to your kernel. ++ + config WLAN_PRE80211 + bool "Wireless LAN (pre-802.11)" + depends on NETDEVICES +@@ -650,6 +680,7 @@ config P54_PCI + + source "drivers/net/wireless/iwlwifi/Kconfig" + source "drivers/net/wireless/hostap/Kconfig" ++source "drivers/net/wireless/acx/Kconfig" + source "drivers/net/wireless/bcm43xx/Kconfig" + source "drivers/net/wireless/b43/Kconfig" + source "drivers/net/wireless/b43legacy/Kconfig" +Index: linux-2.6.23/drivers/net/wireless/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/net/wireless/Makefile 2008-01-20 21:13:17.000000000 +0000 ++++ linux-2.6.23/drivers/net/wireless/Makefile 2008-01-20 21:13:40.000000000 +0000 +@@ -34,6 +34,8 @@ obj-$(CONFIG_PCMCIA_ATMEL) += atmel + + obj-$(CONFIG_PRISM54) += prism54/ + ++obj-$(CONFIG_ACX) += acx/ ++ + obj-$(CONFIG_HOSTAP) += hostap/ + obj-$(CONFIG_BCM43XX) += bcm43xx/ + obj-$(CONFIG_B43) += b43/ diff --git a/packages/linux/linux-rp-2.6.26/htcuni.patch b/packages/linux/linux-rp-2.6.26/htcuni.patch new file mode 100644 index 0000000000..783f55b064 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/htcuni.patch @@ -0,0 +1,7899 @@ +--- + arch/arm/Kconfig | 2 + arch/arm/mach-pxa/Kconfig | 89 + + arch/arm/mach-pxa/Makefile | 1 + arch/arm/mach-pxa/generic.c | 13 + arch/arm/mach-pxa/htcuniversal/Makefile | 19 + arch/arm/mach-pxa/htcuniversal/htcuniversal.c | 468 +++++ + arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c | 917 +++++++++++ + arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h | 65 + arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c | 143 + + arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c | 61 + arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c | 135 + + arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h | 17 + arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c | 87 + + arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c | 226 ++ + arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c | 212 ++ + arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c | 167 ++ + arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h | 16 + arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c | 69 + arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c | 97 + + arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c | 490 ++++++ + arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c | 71 + arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h | 20 + drivers/input/keyboard/Kconfig | 7 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/asic3_keys.c | 131 + + drivers/leds/Kconfig | 7 + drivers/leds/Makefile | 1 + drivers/leds/leds-asic3.c | 189 ++ + drivers/mfd/Kconfig | 10 + drivers/mfd/Makefile | 2 + drivers/mfd/asic3_base.c | 1208 +++++++++++++++ + drivers/mfd/soc-core.c | 106 + + drivers/mfd/soc-core.h | 30 + drivers/mmc/host/Kconfig | 6 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/asic3_mmc.c | 900 +++++++++++ + drivers/mmc/host/asic3_mmc.h | 25 + drivers/serial/pxa.c | 22 + include/asm-arm/arch-pxa/clock.h | 27 + include/asm-arm/arch-pxa/htcuniversal-asic.h | 213 ++ + include/asm-arm/arch-pxa/htcuniversal-gpio.h | 220 ++ + include/asm-arm/arch-pxa/htcuniversal-init.h | 14 + include/asm-arm/arch-pxa/htcuniversal.h | 3 + include/asm-arm/arch-pxa/irqs.h | 2 + include/asm-arm/arch-pxa/pxa-pm_ll.h | 6 + include/asm-arm/arch-pxa/pxa-regs.h | 2 + include/asm-arm/arch-pxa/serial.h | 78 + include/asm-arm/hardware/asic3_keys.h | 18 + include/asm-arm/hardware/asic3_leds.h | 34 + include/asm-arm/hardware/ipaq-asic3.h | 602 +++++++ + include/linux/backlight.h | 7 + include/linux/gpiodev.h | 44 + include/linux/input_pda.h | 47 + include/linux/ioport.h | 1 + include/linux/soc/asic3_base.h | 104 + + include/linux/soc/tmio_mmc.h | 17 + 56 files changed, 7469 insertions(+), 1 deletion(-) + +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/Makefile 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,19 @@ ++# ++# Makefile for HTC Universal ++# ++ ++snd-htcuniversal-ak4641-objs := htcuniversal_ak4641.o ++ ++obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal.o ++obj-$(CONFIG_HTCUNIVERSAL_CORE) += htcuniversal_core.o ++obj-$(CONFIG_HTCUNIVERSAL_POWER) += htcuniversal_power2.o ++obj-$(CONFIG_HTCUNIVERSAL_LCD) += htcuniversal_lcd.o ++obj-$(CONFIG_HTCUNIVERSAL_BACKLIGHT) += htcuniversal_bl.o ++obj-$(CONFIG_HTCUNIVERSAL_TS2) += htcuniversal_ts2.o ++obj-$(CONFIG_HTCUNIVERSAL_BUTTONS) += htcuniversal_buttons.o ++obj-$(CONFIG_HTCUNIVERSAL_BLUETOOTH) += htcuniversal_bt.o ++obj-$(CONFIG_HTCUNIVERSAL_PHONE) += htcuniversal_phone.o ++obj-$(CONFIG_HTCUNIVERSAL_ASIC3_LEDS) += htcuniversal_asic3_leds.o ++obj-$(CONFIG_HTCUNIVERSAL_UDC) += htcuniversal_udc.o ++ ++obj-$(CONFIG_HTCUNIVERSAL_AK4641) += htcuniversal_ak4641.o +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,468 @@ ++/* ++ * Hardware definitions for HTC Universal ++ * ++ * Copyright (c) 2006 Oleg Gusev ++ * ++ * Use consistent with the GNU GPL is permitted, ++ * provided that this copyright notice is ++ * preserved in its entirety in all copies and derived works. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "../generic.h" ++ ++#include "htcuniversal_bt.h" ++#include "htcuniversal_phone.h" ++#include "tsc2046_ts.h" ++ ++/* ++ * IRDA ++ */ ++ ++static void htcuniversal_irda_transceiver_mode(struct device *dev, int mode) ++{ ++ /* */ ++} ++ ++static struct pxaficp_platform_data htcuniversal_ficp_platform_data = { ++ .transceiver_cap = IR_SIRMODE | IR_FIRMODE, ++ .transceiver_mode = htcuniversal_irda_transceiver_mode, ++}; ++ ++/* ++ * Bluetooth - Relies on other loadable modules, like ASIC3 and Core, ++ * so make the calls indirectly through pointers. Requires that the ++ * htcuniversal_bt module be loaded before any attempt to use ++ * bluetooth (obviously). ++ */ ++ ++static struct htcuniversal_bt_funcs bt_funcs; ++ ++static void ++htcuniversal_bt_configure( int state ) ++{ ++ if (bt_funcs.configure != NULL) ++ bt_funcs.configure( state ); ++} ++ ++static struct htcuniversal_phone_funcs phone_funcs; ++ ++static void ++htcuniversal_phone_configure( int state ) ++{ ++ if (phone_funcs.configure != NULL) ++ phone_funcs.configure( state ); ++} ++ ++//void htcuniversal_ll_pm_init(void); ++ ++extern struct platform_device htcuniversal_bl; ++static struct platform_device htcuniversal_lcd = { .name = "htcuniversal_lcd", }; ++//static struct platform_device htcuniversal_kbd = { .name = "htcuniversal_kbd", }; ++static struct platform_device htcuniversal_buttons = { .name = "htcuniversal_buttons", }; ++//static struct platform_device htcuniversal_ts = { .name = "htcuniversal_ts", }; ++//static struct platform_device htcuniversal_bt = { .name = "htcuniversal_bt", }; ++//static struct platform_device htcuniversal_phone = { .name = "htcuniversal_phone", }; ++static struct platform_device htcuniversal_power = { .name = "htcuniversal_power", }; ++static struct platform_device htcuniversal_udc = { .name = "htcuniversal_udc", }; ++ ++static struct tsc2046_mach_info htcuniversal_ts_platform_data = { ++ .port = 1, ++ .clock = CKEN_SSP1, ++ .pwrbit_X = 1, ++ .pwrbit_Y = 1, ++ .irq = 0 /* asic3 irq */ ++}; ++ ++static struct platform_device htcuniversal_ts = { ++ .name = "htcuniversal_ts", ++ .dev = { ++ .platform_data = &htcuniversal_ts_platform_data, ++ }, ++}; ++ ++ ++/* Bluetooth */ ++ ++static struct platform_device htcuniversal_bt = { ++ .name = "htcuniversal_bt", ++ .id = -1, ++ .dev = { ++ .platform_data = &bt_funcs, ++ }, ++}; ++ ++static struct platform_device htcuniversal_phone = { ++ .name = "htcuniversal_phone", ++ .id = -1, ++ .dev = { ++ .platform_data = &phone_funcs, ++ }, ++}; ++ ++/* PXA2xx Keys */ ++ ++static struct gpio_keys_button htcuniversal_button_table[] = { ++ { KEY_POWER, GPIO_NR_HTCUNIVERSAL_KEY_ON_N, 1 }, ++}; ++ ++static struct gpio_keys_platform_data htcuniversal_pxa_keys_data = { ++ .buttons = htcuniversal_button_table, ++ .nbuttons = ARRAY_SIZE(htcuniversal_button_table), ++}; ++ ++static struct platform_device htcuniversal_pxa_keys = { ++ .name = "gpio-keys", ++ .dev = { ++ .platform_data = &htcuniversal_pxa_keys_data, ++ }, ++ .id = -1, ++}; ++ ++/**************************************************************** ++ * Keyboard ++ ****************************************************************/ ++ ++static struct pxa27x_keyboard_platform_data htcuniversal_kbd = { ++ .nr_rows = 8, ++ .nr_cols = 8, ++ .keycodes = { ++ { ++ /* row 0 */ ++ KEY_ENTER, ++ KEY_MINUS, ++ KEY_ESC, ++ KEY_1, ++ KEY_TAB, ++ KEY_CAPSLOCK, ++ KEY_LEFTSHIFT, ++ KEY_RIGHTALT, /* Fn */ ++ }, { /* row 1 */ ++ KEY_COMMA, ++ KEY_EQUAL, ++ KEY_F1, ++ KEY_2, ++ KEY_Q, ++ KEY_A, ++ KEY_Z, ++ KEY_LEFTCTRL, ++ }, { /* row 2 */ ++ KEY_UP, ++ KEY_I, ++ KEY_F2, ++ KEY_3, ++ KEY_W, ++ KEY_S, ++ KEY_X, ++ KEY_F6, ++ }, { /* row 3 */ ++ KEY_DOT, ++ KEY_O, ++ KEY_F3, ++ KEY_4, ++ KEY_E, ++ KEY_D, ++ KEY_C, ++ KEY_LEFTALT, ++ }, { /* row 4 */ ++ KEY_F9, ++ KEY_P, ++ KEY_F4, ++ KEY_5, ++ KEY_R, ++ KEY_F, ++ KEY_V, ++ KEY_SPACE, ++ }, { /* row 5 */ ++ KEY_RIGHT, ++ KEY_BACKSPACE, ++ KEY_F5, ++ KEY_6, ++ KEY_T, ++ KEY_G, ++ KEY_B, ++ KEY_F7, ++ }, { /* row 6 */ ++ KEY_F9, ++ KEY_K, ++ KEY_9, ++ KEY_7, ++ KEY_Y, ++ KEY_H, ++ KEY_N, ++ KEY_LEFT, ++ }, { /* row 7 */ ++ KEY_F10, ++ KEY_L, ++ KEY_0, ++ KEY_8, ++ KEY_U, ++ KEY_J, ++ KEY_M, ++ KEY_DOWN, ++ }, ++ }, ++ .gpio_modes = { ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD, ++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD, ++ }, ++}; ++ ++static struct platform_device htcuniversal_pxa_keyboard = { ++ .name = "pxa27x-keyboard", ++ .id = -1, ++ .dev = { ++ .platform_data = &htcuniversal_kbd, ++ }, ++}; ++/* Core Hardware Functions */ ++ ++struct platform_device htcuniversal_core = { ++ .name = "htcuniversal_core", ++ .id = 0, ++ .dev = { ++ .platform_data = NULL, ++ }, ++}; ++ ++static struct platform_device *devices[] __initdata = { ++ &htcuniversal_core, ++// &htcuniversal_flash, ++ &htcuniversal_pxa_keyboard, ++ &htcuniversal_pxa_keys, ++}; ++ ++static struct platform_device *htcuniversal_asic3_devices[] __initdata = { ++ &htcuniversal_lcd, ++#ifdef CONFIG_HTCUNIVERSAL_BACKLIGHT ++ &htcuniversal_bl, ++#endif ++ &htcuniversal_buttons, ++ &htcuniversal_ts, ++ &htcuniversal_bt, ++ &htcuniversal_phone, ++ &htcuniversal_power, ++ &htcuniversal_udc, ++}; ++ ++static struct asic3_platform_data htcuniversal_asic3_platform_data = { ++ ++ /* Setting ASIC3 GPIO registers to the below initialization states ++ * HTC Universal asic3 information: ++ * http://wiki.xda-developers.com/index.php?pagename=UniversalASIC3 ++ * http://wiki.xda-developers.com/index.php?pagename=ASIC3 ++ * ++ * dir: Direction of the GPIO pin. 0: input, 1: output. ++ * If unknown, set as output to avoid power consuming floating input nodes ++ * init: Initial state of the GPIO bits ++ * ++ * These registers are configured as they are on Wince. ++ */ ++ .gpio_a = { ++ .dir = (1<> 18) & 0xfffc, ++ .boot_params = 0xa0000100, ++ .map_io = htcuniversal_map_io, ++ .init_irq = htcuniversal_init_irq, ++ .init_machine = htcuniversal_init, ++ .timer = &pxa_timer, ++MACHINE_END +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,917 @@ ++/* ++ * Audio support for codec Asahi Kasei AK4641 ++ * ++ * 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. ++ * ++ * Copyright (c) 2006 Giorgio Padrin ++ * ++ * History: ++ * ++ * 2006-03 Written -- Giorgio Padrin ++ * 2006-09 Test and debug on machine (HP hx4700) -- Elshin Roman ++ * ++ * AK4641 codec device driver ++ * ++ * Copyright (c) 2005 SDG Systems, LLC ++ * ++ * Based on code: ++ * Copyright (c) 2002 Hewlett-Packard Company ++ * Copyright (c) 2000 Nicolas Pitre ++ * Copyright (c) 2000 Lernout & Hauspie Speech Products, N.V. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License. ++ */ ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "htcuniversal_ak4641.h" ++ ++/* Registers */ ++#define R_PM1 0x00 ++#define R_PM2 0x01 ++#define R_SEL1 0x02 ++#define R_SEL2 0x03 ++#define R_MODE1 0x04 ++#define R_MODE2 0x05 ++#define R_DAC 0x06 ++#define R_MIC 0x07 ++#define REG_TIMER 0x08 ++#define REG_ALC1 0x09 ++#define REG_ALC2 0x0a ++#define R_PGA 0x0b ++#define R_ATTL 0x0c ++#define R_ATTR 0x0d ++#define REG_VOL 0x0e ++#define R_STATUS 0x0f ++#define REG_EQLO 0x10 ++#define REG_EQMID 0x11 ++#define REG_EQHI 0x12 ++#define REG_BTIF 0x13 ++ ++/* Register flags */ ++/* REG_PWR1 */ ++#define R_PM1_PMADC 0x01 ++#define R_PM1_PMMIC 0x02 ++#define REG_PWR1_PMAUX 0x04 ++#define REG_PWR1_PMMO 0x08 ++#define R_PM1_PMLO 0x10 ++/* unused 0x20 */ ++/* unused 0x40 */ ++#define R_PM1_PMVCM 0x80 ++ ++/* REG_PWR2 */ ++#define R_PM2_PMDAC 0x01 ++/* unused 0x02 */ ++/* unused 0x04 */ ++#define R_PM2_PMMO2 0x08 ++#define REG_PWR2_MCKAC 0x10 ++/* unused 0x20 */ ++/* unused 0x40 */ ++#define R_PM2_MCKPD 0x80 ++ ++/* REG_SEL1 */ ++#define R_SEL1_PSMO2 0x01 ++/* unused 0x02 */ ++/* unused 0x04 */ ++/* unused 0x08 */ ++#define REG_SEL1_MICM 0x10 ++#define REG_SEL1_DACM 0x20 ++#define REG_SEL1_PSMO 0x40 ++#define REG_SEL1_MOGN 0x80 ++ ++/* REG_SEL2 */ ++#define R_SEL2_PSLOR 0x01 ++#define R_SEL2_PSLOL 0x02 ++#define REG_SEL2_AUXSI 0x04 ++/* unused 0x08 */ ++#define REG_SEL2_MICL 0x10 ++#define REG_SEL2_AUXL 0x20 ++/* unused 0x40 */ ++#define R_SEL2_DACL 0x80 ++ ++/* REG_MODE1 */ ++#define REG_MODE1_DIF0 0x01 ++#define REG_MODE1_DIF1 0x02 ++/* unused 0x04 */ ++/* unused 0x08 */ ++/* unused 0x10 */ ++/* unused 0x20 */ ++/* unused 0x40 */ ++/* unused 0x80 */ ++ ++/* REG_MODE2 */ ++/* unused 0x01 */ ++#define REG_MODE2_LOOP 0x02 ++#define REG_MODE2_HPM 0x04 ++/* unused 0x08 */ ++/* unused 0x10 */ ++#define REG_MODE2_MCK0 0x20 ++#define REG_MODE2_MCK1 0x40 ++/* unused 0x80 */ ++ ++/* REG_DAC */ ++#define REG_DAC_DEM0 0x01 ++#define REG_DAC_DEM1 0x02 ++#define REG_DAC_EQ 0x04 ++/* unused 0x08 */ ++#define R_DAC_DATTC 0x10 ++#define R_DAC_SMUTE 0x20 ++#define REG_DAC_TM 0x40 ++/* unused 0x80 */ ++ ++/* REG_MIC */ ++#define R_MIC_MGAIN 0x01 ++#define R_MIC_MSEL 0x02 ++#define R_MIC_MICAD 0x04 ++#define R_MIC_MPWRI 0x08 ++#define R_MIC_MPWRE 0x10 ++#define REG_MIC_AUXAD 0x20 ++/* unused 0x40 */ ++/* unused 0x80 */ ++ ++/* REG_TIMER */ ++ ++#define REG_TIMER_LTM0 0x01 ++#define REG_TIMER_LTM1 0x02 ++#define REG_TIMER_WTM0 0x04 ++#define REG_TIMER_WTM1 0x08 ++#define REG_TIMER_ZTM0 0x10 ++#define REG_TIMER_ZTM1 0x20 ++/* unused 0x40 */ ++/* unused 0x80 */ ++ ++#define REG_ALC1_LMTH 0x01 ++#define REG_ALC1_RATT 0x02 ++#define REG_ALC1_LMAT0 0x04 ++#define REG_ALC1_LMAT1 0x08 ++#define REG_ALC1_ZELM 0x10 ++#define REG_ALC1_ALC1 0x20 ++/* unused 0x40 */ ++/* unused 0x80 */ ++ ++/* REG_ALC2 */ ++ ++/* REG_PGA */ ++ ++/* REG_ATTL */ ++ ++/* REG_ATTR */ ++ ++/* REG_VOL */ ++#define REG_VOL_ATTM 0x80 ++ ++/* REG_STATUS */ ++#define R_STATUS_DTMIC 0x01 ++ ++/* REG_EQ controls use 4 bits for each of 5 EQ levels */ ++ ++/* Bluetooth not yet implemented */ ++#define REG_BTIF_PMAD2 0x01 ++#define REG_BTIF_PMDA2 0x02 ++#define REG_BTIF_PMBIF 0x04 ++#define REG_BTIF_ADC2 0x08 ++#define REG_BTIF_DAC2 0x10 ++#define REG_BTIF_BTFMT0 0x20 ++#define REG_BTIF_BTFMT1 0x40 ++/* unused 0x80 */ ++ ++/* begin {{ I2C }} */ ++ ++static struct i2c_driver snd_ak4641_i2c_driver = { ++ .driver = { ++ .name = "ak4641-i2c" ++ }, ++}; ++ ++static int snd_ak4641_i2c_init(void) ++{ ++ return i2c_add_driver(&snd_ak4641_i2c_driver); ++} ++ ++static void snd_ak4641_i2c_free(void) ++{ ++ i2c_del_driver(&snd_ak4641_i2c_driver); ++} ++ ++static inline int snd_ak4641_i2c_probe(struct snd_ak4641 *ak) ++{ ++ if (ak->i2c_client.adapter == NULL) return -EINVAL; ++ ak->i2c_client.addr = 0x12; ++ if (i2c_smbus_xfer(ak->i2c_client.adapter, ak->i2c_client.addr, ++ 0, 0, 0, I2C_SMBUS_QUICK, NULL) < 0) ++ return -ENODEV; ++ else return 0; ++} ++ ++static int snd_ak4641_i2c_attach(struct snd_ak4641 *ak) ++{ ++ int ret = 0; ++ if ((ret = snd_ak4641_i2c_probe(ak)) < 0) return ret; ++ snprintf(ak->i2c_client.name, sizeof(ak->i2c_client.name), ++ "ak4641-i2c at %d-%04x", ++ i2c_adapter_id(ak->i2c_client.adapter), ak->i2c_client.addr); ++ return i2c_attach_client(&ak->i2c_client); ++} ++ ++static void snd_ak4641_i2c_detach(struct snd_ak4641 *ak) ++{ ++ i2c_detach_client(&ak->i2c_client); ++} ++ ++/* end {{ I2C }} */ ++ ++ ++/* begin {{ Registers & Cache Ops }} */ ++ ++static int snd_ak4641_hwsync(struct snd_ak4641 *ak, int read, u8 reg) ++{ ++ struct i2c_msg msgs[2]; ++ u8 buf[2]; ++ int ret; ++ ++ snd_assert(reg < ARRAY_SIZE(ak->regs), return -EINVAL); ++ ++ /* setup i2c msgs */ ++ msgs[0].addr = ak->i2c_client.addr; ++ msgs[0].flags = 0; ++ msgs[0].buf = buf; ++ if (!read) ++ msgs[0].len = 2; ++ else { ++ msgs[1].flags = I2C_M_RD; ++ msgs[1].addr = msgs[0].addr; ++ msgs[1].buf = msgs[0].buf + 1; ++ msgs[0].len = 1; ++ msgs[1].len = 1; ++ } ++ ++ buf[0] = reg; ++ ++ /* regs[reg] -> buffer, on write */ ++ if (!read) buf[1] = ak->regs[reg]; ++ ++ /* i2c transfer */ ++ ret = i2c_transfer(ak->i2c_client.adapter, msgs, read ? 2 : 1); ++ if (ret != (read ? 2 : 1)) return ret; /* transfer error */ //@@ error ret < 0, or not ? ++ ++ /* regs[reg] <- buffer, on read */ ++ if (read) ak->regs[reg] = buf[1]; ++ ++ return 0; ++} ++ ++static inline int snd_ak4641_hwsync_read(struct snd_ak4641 *ak, u8 reg) ++{ ++ return snd_ak4641_hwsync(ak, 1, reg); ++} ++ ++static inline int snd_ak4641_hwsync_write(struct snd_ak4641 *ak, u8 reg) ++{ ++ return snd_ak4641_hwsync(ak, 0, reg); ++} ++ ++static int snd_ak4641_hwsync_read_all(struct snd_ak4641 *ak) ++{ ++ u8 reg; ++ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++) ++ if (snd_ak4641_hwsync_read(ak, reg) < 0) return -1; ++ return 0; ++} ++ ++static int snd_ak4641_hwsync_write_all(struct snd_ak4641 *ak) ++{ ++ u8 reg; ++ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++) ++ if (snd_ak4641_hwsync_write(ak, reg) < 0) return -1; ++ return 0; ++} ++ ++static int snd_ak4641_reg_changed(struct snd_ak4641 *ak, u8 reg) ++{ ++ if ((reg != R_PGA && ak->powered_on) || ++ (reg == R_PGA && (ak->regs[R_PM1] & R_PM1_PMMIC))) ++ return snd_ak4641_hwsync_write(ak, reg); ++ return 0; ++} ++ ++/* end {{ Registers & Cache Ops }}*/ ++ ++ ++static inline void snd_ak4641_lock(struct snd_ak4641 *ak) ++{ ++ down(&ak->sem); ++} ++ ++static inline void snd_ak4641_unlock(struct snd_ak4641 *ak) ++{ ++ up(&ak->sem); ++} ++ ++#define WRITE_MASK(i, val, mask) (((i) & ~(mask)) | ((val) & (mask))) ++ ++ ++/* begin {{ Controls }} */ ++ ++#define INV_RANGE(val, mask) \ ++ (~(val) & (mask)) ++ ++/*-begin----------------------------------------------------------*/ ++static int snd_ak4641_actl_playback_volume_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; ++ uinfo->count = 2; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = 0xff; ++ return 0; ++} ++ ++static int snd_ak4641_actl_playback_volume_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data; ++ ++ snd_ak4641_lock(ak); ++ ucontrol->value.integer.value[0] = INV_RANGE(ak->regs[R_ATTL], 0xff); ++ ucontrol->value.integer.value[1] = INV_RANGE(ak->regs[R_ATTR], 0xff); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++ ++static int snd_ak4641_actl_playback_volume_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data; ++ ++ snd_ak4641_lock(ak); ++ ak->regs[R_ATTL] = INV_RANGE(ucontrol->value.integer.value[0], 0xff); ++ ak->regs[R_ATTR] = INV_RANGE(ucontrol->value.integer.value[1], 0xff); ++ snd_ak4641_reg_changed(ak, R_ATTL); ++ snd_ak4641_reg_changed(ak, R_ATTR); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++/*-end------------------------------------------------------------*/ ++ ++/*-begin----------------------------------------------------------*/ ++static int snd_ak4641_actl_mic_gain_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; ++ uinfo->count = 1; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = 0x7f; ++ return 0; ++} ++ ++static int snd_ak4641_actl_mic_gain_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data; ++ ++ ucontrol->value.integer.value[0] = ak->regs[R_PGA]; ++ return 0; ++} ++ ++static int snd_ak4641_actl_mic_gain_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data; ++ ++ snd_ak4641_lock(ak); ++ ak->regs[R_PGA] = ucontrol->value.integer.value[0]; ++ snd_ak4641_reg_changed(ak, R_PGA); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++/*-end------------------------------------------------------------*/ ++ ++#define ACTL(ctl_name, _name) \ ++static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \ ++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, \ ++ .info = snd_ak4641_actl_ ## ctl_name ## _info, \ ++ .get = snd_ak4641_actl_ ## ctl_name ## _get, .put = snd_ak4641_actl_ ## ctl_name ## _put }; ++ ++ACTL(playback_volume, "Master Playback Volume") ++ACTL(mic_gain, "Mic Capture Gain") ++ ++struct snd_ak4641_uctl_bool { ++ int (*get) (struct snd_ak4641 *uda); ++ int (*set) (struct snd_ak4641 *uda, int on); ++}; ++ ++static int snd_ak4641_actl_bool_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; ++ uinfo->count = 1; ++ return 0; ++} ++ ++static int snd_ak4641_actl_bool_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data; ++ struct snd_ak4641_uctl_bool *uctl = ++ (struct snd_ak4641_uctl_bool *) kcontrol->private_value; ++ ++ ucontrol->value.integer.value[0] = uctl->get(ak); ++ return 0; ++} ++ ++static int snd_ak4641_actl_bool_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data; ++ struct snd_ak4641_uctl_bool *uctl = ++ (struct snd_ak4641_uctl_bool *) kcontrol->private_value; ++ ++ return uctl->set(ak, ucontrol->value.integer.value[0]); ++} ++ ++/*-begin----------------------------------------------------------*/ ++static int snd_ak4641_uctl_playback_switch_get(struct snd_ak4641 *ak) ++{ ++ return (ak->regs[R_DAC] & R_DAC_SMUTE) == 0x00; ++} ++ ++static int snd_ak4641_uctl_playback_switch_set(struct snd_ak4641 *ak, int on) ++{ ++ snd_ak4641_lock(ak); ++ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC], ++ on ? 0x00 : R_DAC_SMUTE, R_DAC_SMUTE); ++ snd_ak4641_reg_changed(ak, R_DAC); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++/*-end------------------------------------------------------------*/ ++ ++/*-begin----------------------------------------------------------*/ ++static int snd_ak4641_uctl_mic_boost_get(struct snd_ak4641 *ak) ++{ ++ return (ak->regs[R_MIC] & R_MIC_MGAIN) == R_MIC_MGAIN; ++} ++ ++static int snd_ak4641_uctl_mic_boost_set(struct snd_ak4641 *ak, int on) ++{ ++ snd_ak4641_lock(ak); ++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], ++ on ? R_MIC_MGAIN : 0x00, R_MIC_MGAIN); ++ snd_ak4641_reg_changed(ak, R_MIC); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++/*-end------------------------------------------------------------*/ ++ ++/*-begin----------------------------------------------------------*/ ++static int snd_ak4641_uctl_mono_out_get(struct snd_ak4641 *ak) ++{ ++ printk("mono_out status 0x%8.8x -> 0x%8.8x\n",ak->regs[R_SEL1], ak->regs[R_SEL1] & REG_SEL1_PSMO); ++ return (ak->regs[R_SEL1] & REG_SEL1_PSMO) == REG_SEL1_PSMO; ++} ++ ++static int snd_ak4641_uctl_mono_out_set(struct snd_ak4641 *ak, int on) ++{ ++ printk("phone mic enable called. on=%d\n",on); ++ snd_ak4641_lock(ak); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? R_PM1_PMMIC : 0x00, R_PM1_PMMIC); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? REG_PWR1_PMMO : 0x00, REG_PWR1_PMMO); ++ snd_ak4641_reg_changed(ak, R_PM1); ++ ++ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */ ++ ++ /* internal mic */ ++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], on ? R_MIC_MPWRI : 0x0, R_MIC_MPWRI); ++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], 0x0, R_MIC_MSEL); ++ snd_ak4641_hwsync_write(ak, R_MIC); ++ ++// ak->regs[REG_BTIF] = WRITE_MASK(ak->regs[REG_BTIF], 0x0, REG_BTIF_DAC2); ++// snd_ak4641_hwsync_write(ak, REG_BTIF); ++ /* */ ++// ak->regs[REG_VOL] = WRITE_MASK(ak->regs[REG_VOL], on ? REG_VOL_ATTM : 0x00, REG_VOL_ATTM); ++// ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MOGN : 0x00, REG_SEL1_MOGN); ++ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MICM : 0x00, REG_SEL1_MICM); ++ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_PSMO : 0x00, REG_SEL1_PSMO); ++ snd_ak4641_reg_changed(ak, R_SEL1); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++/*-end------------------------------------------------------------*/ ++ ++#define ACTL_BOOL(ctl_name, _name) \ ++static struct snd_ak4641_uctl_bool snd_ak4641_actl_ ## ctl_name ## _pvalue = \ ++{ .get = snd_ak4641_uctl_ ## ctl_name ## _get, \ ++ .set = snd_ak4641_uctl_ ## ctl_name ## _set }; \ ++static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \ ++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, .info = snd_ak4641_actl_bool_info, \ ++ .get = snd_ak4641_actl_bool_get, .put = snd_ak4641_actl_bool_put, \ ++ .private_value = (unsigned long) &snd_ak4641_actl_ ## ctl_name ## _pvalue }; ++ ++ACTL_BOOL(playback_switch, "Master Playback Switch") ++ACTL_BOOL(mic_boost, "Mic Boost (+20dB)") ++ACTL_BOOL(mono_out, "Phone mic enable") ++ ++static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on); ++static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on); ++static void snd_ak4641_select_mic(struct snd_ak4641 *ak); ++ ++void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected) ++{ ++ snd_ak4641_lock(ak); ++ if (connected != ak->hp_connected) { ++ ak->hp_connected = connected; ++ ++ /* headphone or speaker, on playback */ ++ if (ak->playback_on) { ++ if (connected) { ++ snd_ak4641_headphone_on(ak, 1); ++ snd_ak4641_speaker_on(ak, 0); ++ } else { ++ snd_ak4641_speaker_on(ak, 1); ++ snd_ak4641_headphone_on(ak, 0); ++ } ++ } ++ ++ /* headset or internal mic, on capture */ ++ if (ak->capture_on) ++ snd_ak4641_select_mic(ak); ++ } ++ snd_ak4641_unlock(ak); ++} ++ ++/* end {{ Controls }} */ ++ ++ ++/* begin {{ Headphone Detected Notification }} */ ++ ++static void snd_ak4641_hp_detected_w_fn(void *p) ++{ ++ struct snd_ak4641 *ak = (struct snd_ak4641 *)p; ++ ++ snd_ak4641_hp_connected(ak, ak->hp_detected.detected); ++} ++ ++void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected) ++{ ++ if (detected != ak->hp_detected.detected) { ++ ak->hp_detected.detected = detected; ++ queue_work(ak->hp_detected.wq, &ak->hp_detected.w); ++ } ++} ++ ++static int snd_ak4641_hp_detected_init(struct snd_ak4641 *ak) ++{ ++ INIT_WORK(&ak->hp_detected.w, snd_ak4641_hp_detected_w_fn); ++ ak->hp_detected.detected = ak->hp_connected; ++ ak->hp_detected.wq = create_singlethread_workqueue("ak4641"); ++ if (ak->hp_detected.wq) return 0; ++ else return -1; ++} ++ ++static void snd_ak4641_hp_detected_free(struct snd_ak4641 *ak) ++{ ++ destroy_workqueue(ak->hp_detected.wq); ++} ++ ++/* end {{ Headphone Detected Notification }} */ ++ ++ ++/* begin {{ Codec Control }} */ ++ ++static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on) ++{ ++ if (on) { ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ ak->headphone_out_on(1); ++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2], ++ R_SEL2_PSLOL | R_SEL2_PSLOR, ++ R_SEL2_PSLOL | R_SEL2_PSLOR); ++ snd_ak4641_hwsync_write(ak, R_SEL2); ++ } else { ++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2], ++ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR); ++ snd_ak4641_hwsync_write(ak, R_SEL2); ++ ak->headphone_out_on(0); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ } ++} ++ ++static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on) ++{ ++ if (on) { ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ ak->speaker_out_on(1); ++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2], ++ R_SEL2_PSLOL | R_SEL2_PSLOR, ++ R_SEL2_PSLOL | R_SEL2_PSLOR); ++ snd_ak4641_hwsync_write(ak, R_SEL2); ++ } else { ++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2], ++ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR); ++ snd_ak4641_hwsync_write(ak, R_SEL2); ++ ak->speaker_out_on(0); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ } ++} ++ ++static inline int snd_ak4641_power_on(struct snd_ak4641 *ak) ++{ ++ ak->reset_pin(1); ++ ak->power_on_chip(1); ++ msleep(1); ++ ak->reset_pin(0); ++ ak->powered_on = 1; ++ return 0; ++} ++ ++static inline int snd_ak4641_power_off(struct snd_ak4641 *ak) ++{ ++ ak->powered_on = 0; ++ ak->power_on_chip(0); ++ return 0; ++} ++ ++static inline void snd_ak4641_headphone_out_on(struct snd_ak4641 *ak, int on) ++{ ++ if (ak->headphone_out_on) ak->headphone_out_on(on); ++} ++ ++static inline void snd_ak4641_speaker_out_on(struct snd_ak4641 *ak, int on) ++{ ++ if (ak->speaker_out_on) ak->speaker_out_on(on); ++} ++ ++static int snd_ak4641_playback_on(struct snd_ak4641 *ak) ++{ ++ if (ak->playback_on) return 0; ++ ++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], ++ R_PM2_PMDAC, R_PM2_MCKPD | R_PM2_PMDAC); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO); ++ snd_ak4641_hwsync_write(ak, R_PM2); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 1); ++ else snd_ak4641_speaker_on(ak, 1); ++ ++ ak->playback_on = 1; ++ ++ return 0; ++} ++ ++static int snd_ak4641_playback_off(struct snd_ak4641 *ak) ++{ ++ if (!ak->playback_on) return 0; ++ ++ ak->playback_on = 0; ++ ++ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 0); ++ else snd_ak4641_speaker_on(ak, 0); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO); ++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], ++ (!ak->capture_on ? R_PM2_MCKPD : 0x00) | R_PM2_PMDAC, ++ R_PM2_MCKPD | R_PM2_PMDAC); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ snd_ak4641_hwsync_write(ak, R_PM2); ++ ++ return 0; ++} ++ ++static void snd_ak4641_select_mic(struct snd_ak4641 *ak) ++{ ++ int mic = 0; ++ u8 r_mic; ++ ++ if (ak->hp_connected) { ++ /* check headset mic */ ++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], R_MIC_MPWRE, R_MIC_MPWRE); ++ snd_ak4641_hwsync_write(ak, R_MIC); ++ snd_ak4641_hwsync_read(ak, R_STATUS); ++ mic = (ak->regs[R_STATUS] & R_STATUS_DTMIC) == R_STATUS_DTMIC; ++ ++ printk("htcuniversal_ak4641_select_mic: mic=%d\n",mic); ++ ++ r_mic = WRITE_MASK(ak->regs[R_MIC], ++ R_MIC_MSEL | (ak->capture_on ? R_MIC_MPWRE : 0x00), ++ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE); ++ } ++ else ++ r_mic = WRITE_MASK(ak->regs[R_MIC], ++ 0x00 | (ak->capture_on ? R_MIC_MPWRI : 0x00), ++ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE); ++ ++ if (r_mic != ak->regs[R_MIC]) { ++ ak->regs[R_MIC] = r_mic; ++ snd_ak4641_hwsync_write(ak, R_MIC); ++ } ++} ++ ++static int snd_ak4641_capture_on(struct snd_ak4641 *ak) ++{ ++ if (ak->capture_on) return 0; ++ ++ if (!ak->playback_on) { ++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], 0x00, R_PM2_MCKPD); ++ snd_ak4641_hwsync_write(ak, R_PM2); ++ } ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMMIC | R_PM1_PMADC, ++ R_PM1_PMMIC | R_PM1_PMADC); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */ ++ ++ ak->capture_on = 1; ++ ++ snd_ak4641_select_mic(ak); ++ ++ msleep(47); /* accounts for ADC init cycle, time enough for fs >= 44.1 kHz */ ++ ++ return 0; ++} ++ ++static int snd_ak4641_capture_off(struct snd_ak4641 *ak) ++{ ++ if (!ak->capture_on) return 0; ++ ++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], ++ 0x00, R_MIC_MPWRI | R_MIC_MPWRE | R_MIC_MSEL); ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMMIC | R_PM1_PMADC); ++ snd_ak4641_hwsync_write(ak, R_MIC); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ if (!ak->playback_on) { ++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], R_PM2_MCKPD, R_PM2_MCKPD); ++ snd_ak4641_hwsync_write(ak, R_PM2); ++ } ++ ++ ak->capture_on = 0; ++ ++ return 0; ++} ++ ++int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream) ++{ ++ snd_ak4641_lock(ak); ++ if (stream == SNDRV_PCM_STREAM_PLAYBACK) { ++ ak->playback_stream_opened = 1; ++ snd_ak4641_playback_on(ak); ++ } else { ++ ak->capture_stream_opened = 1; ++ snd_ak4641_capture_on(ak); ++ } ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++ ++int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream) ++{ ++ snd_ak4641_lock(ak); ++ if (stream == SNDRV_PCM_STREAM_PLAYBACK) { ++ ak->playback_stream_opened = 0; ++ snd_ak4641_playback_off(ak); ++ } else { ++ ak->capture_stream_opened = 0; ++ snd_ak4641_capture_off(ak); ++ } ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++ ++static int snd_ak4641_init_regs(struct snd_ak4641 *ak) ++{ ++ snd_ak4641_hwsync_read_all(ak); ++ ++ //@@ MEMO: add some configs ++ ++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMVCM, R_PM1_PMVCM); ++ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC], 0x00, R_DAC_DATTC); ++ snd_ak4641_hwsync_write(ak, R_PM1); ++ snd_ak4641_hwsync_write(ak, R_DAC); ++ ++ return 0; ++} ++ ++int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state) ++{ ++ snd_ak4641_lock(ak); ++ if (ak->playback_on) snd_ak4641_playback_off(ak); ++ if (ak->capture_on) snd_ak4641_capture_off(ak); ++ snd_ak4641_power_off(ak); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++ ++int snd_ak4641_resume(struct snd_ak4641 *ak) ++{ ++ snd_ak4641_lock(ak); ++ snd_ak4641_power_on(ak); ++ snd_ak4641_hwsync_write_all(ak); ++ if (ak->playback_stream_opened) snd_ak4641_playback_on(ak); ++ if (ak->capture_stream_opened) snd_ak4641_capture_on(ak); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++ ++static void snd_ak4641_init_ak(struct snd_ak4641 *ak) ++{ ++ init_MUTEX(&ak->sem); ++ ak->i2c_client.driver = &snd_ak4641_i2c_driver; ++} ++ ++int snd_ak4641_activate(struct snd_ak4641 *ak) ++{ ++ int ret = 0; ++ ++ snd_ak4641_init_ak(ak); ++ snd_ak4641_lock(ak); ++ snd_ak4641_power_on(ak); ++ if ((ret = snd_ak4641_i2c_attach(ak)) < 0) ++ goto failed_i2c_attach; ++ snd_ak4641_init_regs(ak); ++ if ((ret = snd_ak4641_hp_detected_init(ak)) < 0) ++ goto failed_hp_detected_init; ++ snd_ak4641_unlock(ak); ++ return 0; ++ ++ failed_hp_detected_init: ++ snd_ak4641_i2c_detach(ak); ++ failed_i2c_attach: ++ snd_ak4641_power_off(ak); ++ snd_ak4641_unlock(ak); ++ return ret; ++} ++ ++void snd_ak4641_deactivate(struct snd_ak4641 *ak) ++{ ++ snd_ak4641_lock(ak); ++ snd_ak4641_hp_detected_free(ak); ++ snd_ak4641_i2c_detach(ak); ++ snd_ak4641_power_off(ak); ++ snd_ak4641_unlock(ak); ++} ++ ++int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card) ++{ ++ snd_ak4641_lock(ak); ++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_volume, ak)); ++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_switch, ak)); ++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_gain, ak)); ++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_boost, ak)); ++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mono_out, ak)); ++ snd_ak4641_unlock(ak); ++ return 0; ++} ++ ++/* end {{ Codec Control }} */ ++ ++ ++/* begin {{ Module }} */ ++ ++static int __init snd_ak4641_module_on_load(void) ++{ ++ snd_ak4641_i2c_init(); ++ return 0; ++} ++ ++static void __exit snd_ak4641_module_on_unload(void) ++{ ++ snd_ak4641_i2c_free(); ++} ++ ++module_init(snd_ak4641_module_on_load); ++module_exit(snd_ak4641_module_on_unload); ++ ++EXPORT_SYMBOL(snd_ak4641_activate); ++EXPORT_SYMBOL(snd_ak4641_deactivate); ++EXPORT_SYMBOL(snd_ak4641_add_mixer_controls); ++EXPORT_SYMBOL(snd_ak4641_open_stream); ++EXPORT_SYMBOL(snd_ak4641_close_stream); ++EXPORT_SYMBOL(snd_ak4641_suspend); ++EXPORT_SYMBOL(snd_ak4641_resume); ++EXPORT_SYMBOL(snd_ak4641_hp_connected); ++EXPORT_SYMBOL(snd_ak4641_hp_detected); ++ ++MODULE_AUTHOR("Giorgio Padrin"); ++MODULE_DESCRIPTION("Audio support for codec Asahi Kasei AK4641"); ++MODULE_LICENSE("GPL"); ++ ++/* end {{ Module }} */ +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,65 @@ ++/* ++ * Audio support for codec Asahi Kasei AK4641 ++ * ++ * 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. ++ * ++ * Copyright (c) 2006 Giorgio Padrin ++ */ ++ ++#ifndef __SOUND_AK4641_H ++#define __SOUND_AK4641_H ++ ++#include ++ ++struct snd_ak4641 { ++ struct semaphore sem; ++ ++ u8 regs[0x14]; /* registers cache */ ++ ++ unsigned int ++ powered_on:1, ++ playback_on:1, ++ playback_stream_opened:1, ++ capture_on:1, ++ capture_stream_opened:1; ++ ++ unsigned int ++ hp_connected:1; ++ ++ /* -- configuration (to fill before activation) -- */ ++ void (*power_on_chip)(int on); ++ void (*reset_pin)(int on); ++ void (*headphone_out_on)(int on); ++ void (*speaker_out_on)(int on); ++ ++ struct i2c_client i2c_client; /* to fill .adapter */ ++ /* ----------------------------------------------- */ ++ ++ struct { ++ int detected; ++ struct workqueue_struct *wq; ++ struct work_struct w; ++ } hp_detected; ++}; ++ ++ ++/* Note: opening, closing, suspending and resuming a stream ++ * require the clocks (MCLK and I2S ones) running ++ */ ++ ++/* don't forget to specify I2C adapter in i2c_client field */ ++int snd_ak4641_activate(struct snd_ak4641 *ak); ++ ++void snd_ak4641_deactivate(struct snd_ak4641 *ak); ++int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card); ++int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream); ++int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream); ++int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state); ++int snd_ak4641_resume(struct snd_ak4641 *ak); ++ ++void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected); /* non atomic context */ ++void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected); /* atomic context */ ++ ++#endif /* __SOUND_AK4641_H */ +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,143 @@ ++/* ++ * LEDs support for the HP iPaq hx4700 ++ * ++ * Copyright (c) 2006 Anton Vorontsov ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++//FIXME ++//DEFINE_LED_TRIGGER_SHARED_GLOBAL(htcuniversal_radio_trig); ++//EXPORT_LED_TRIGGER_SHARED(htcuniversal_radio_trig); ++ ++static struct asic3_led htcuniversal_leds[] = { ++ { ++ .led_cdev = { ++ .name = "htcuniversal:red", ++ .default_trigger = "htcuniversal-charging", ++ }, ++ .hw_num = 2, ++ ++ }, ++ { ++ .led_cdev = { ++ .name = "htcuniversal:green", ++ .default_trigger = "htcuniversal-chargefull", ++ }, ++ .hw_num = 1, ++ }, ++ { ++ .led_cdev = { ++ .name = "htcuniversal:wifi-bt", ++ .default_trigger = "htcuniversal-radio", ++ }, ++ .hw_num = 0, ++ }, ++ { ++ .led_cdev = { ++ .name = "htcuniversal:phonebuttons", ++ .default_trigger = "htcuniversal-phonebuttons", ++ }, ++ .hw_num = -1, ++ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYP_PWR_ON, ++ }, ++ { ++ .led_cdev = { ++ .name = "htcuniversal:vibra", ++ .default_trigger = "htcuniversal-vibra", ++ }, ++ .hw_num = -1, ++ .gpio_num = ('D'-'A')*16+GPIOD_VIBRA_PWR_ON, ++ }, ++ { ++ .led_cdev = { ++ .name = "htcuniversal:flashlight1", ++ .default_trigger = "htcuniversal-flashlight1", ++ }, ++ .hw_num = -1, ++ .gpio_num = ('A'-'A')*16+GPIOA_FLASHLIGHT, ++ }, ++ { ++ .led_cdev = { ++ .name = "htcuniversal:kbdbacklight", ++ .default_trigger = "htcuniversal-kbdbacklight", ++ }, ++ .hw_num = -1, ++ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYB_PWR_ON, ++ }, ++}; ++ ++void htcuniversal_leds_release(struct device *dev) ++{ ++ return; ++} ++ ++static ++struct asic3_leds_machinfo htcuniversal_leds_machinfo = { ++ .num_leds = ARRAY_SIZE(htcuniversal_leds), ++ .leds = htcuniversal_leds, ++ .asic3_pdev = &htcuniversal_asic3, ++}; ++ ++static ++struct platform_device htcuniversal_leds_pdev = { ++ .name = "asic3-leds", ++ .dev = { ++ .platform_data = &htcuniversal_leds_machinfo, ++ .release = htcuniversal_leds_release, ++ }, ++}; ++ ++static ++int __init htcuniversal_leds_init(void) ++{ ++ int ret; ++ printk("htcuniversal LEDs Driver\n"); ++// led_trigger_register_shared("htcuniversal-radio", &htcuniversal_radio_trig); ++ ++ ret = asic3_leds_register(); ++ if (ret) goto asic3_leds_failed; ++ ++ ret = platform_device_register(&htcuniversal_leds_pdev); ++ if (ret) goto platform_device_failed; ++ ++ goto success; ++ ++platform_device_failed: ++ asic3_leds_unregister(); ++asic3_leds_failed: ++// led_trigger_unregister_shared(htcuniversal_radio_trig); ++ printk("htcuniversal LEDs Driver failed to init"); ++success: ++ return ret; ++} ++ ++static ++void __exit htcuniversal_leds_exit(void) ++{ ++// led_trigger_unregister_shared(htcuniversal_radio_trig); ++ platform_device_unregister(&htcuniversal_leds_pdev); ++ asic3_leds_unregister(); ++ return; ++} ++ ++module_init(htcuniversal_leds_init); ++module_exit(htcuniversal_leds_exit); ++ ++MODULE_AUTHOR("Anton Vorontsov "); ++MODULE_DESCRIPTION("htcuniversal LEDs driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,61 @@ ++/* ++ * Use consistent with the GNU GPL is permitted, ++ * provided that this copyright notice is ++ * preserved in its entirety in all copies and derived works. ++ * ++ * Copyright (C) 2006 Paul Sokolosvky ++ * Based on code from older versions of htcuniversal_lcd.c ++ * ++ */ ++ ++#include ++#include ++#include /* for pxa-regs.h (__REG) */ ++#include ++#include /* machine_is_htcuniversal */ ++//#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#define HTCUNIVERSAL_MAX_INTENSITY 0xc7 ++ ++static void htcuniversal_set_bl_intensity(int intensity) ++{ ++ PWM_CTRL1 = 1; /* pre-scaler */ ++ PWM_PWDUTY1 = intensity; /* duty cycle */ ++ PWM_PERVAL1 = HTCUNIVERSAL_MAX_INTENSITY+1; /* period */ ++ ++ if (intensity > 0) { ++ pxa_set_cken(CKEN_PWM1, 1); ++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, ++ (1<"); ++MODULE_DESCRIPTION("Backlight driver for HTC Universal"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,135 @@ ++/* Bluetooth interface driver for TI BRF6150 on HX4700 ++ * ++ * Copyright (c) 2005 SDG Systems, LLC ++ * ++ * 2005-04-21 Todd Blumer Created. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "htcuniversal_bt.h" ++ ++static uint use_led=1; ++ ++static void ++htcuniversal_bt_configure( int state ) ++{ ++ int tries; ++ ++ printk( KERN_NOTICE "htcuniversal configure bluetooth: %d\n", state ); ++ switch (state) { ++ ++ case PXA_UART_CFG_PRE_STARTUP: ++ break; ++ ++ case PXA_UART_CFG_POST_STARTUP: ++ /* pre-serial-up hardware configuration */ ++ htcuniversal_egpio_enable(1< CTS=1). Typical 150ms ++ */ ++ tries = 0; ++ do { ++ mdelay(10); ++ } while ((BTMSR & MSR_CTS) == 0 && tries++ < 50); ++ if (use_led) { ++// htcuniversal_set_led(2, 16, 16); ++ } ++ break; ++ ++ case PXA_UART_CFG_PRE_SHUTDOWN: ++ htcuniversal_egpio_disable(1<dev.platform_data; ++ ++ /* configure bluetooth UART */ ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_RXD_MD ); ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_TXD_MD ); ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD ); ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD ); ++ ++ funcs->configure = htcuniversal_bt_configure; ++ ++ /* Make sure the LED is off */ ++// htcuniversal_clear_led(2); ++ ++ return 0; ++} ++ ++static int ++htcuniversal_bt_remove( struct platform_device *dev ) ++{ ++ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data; ++ ++ funcs->configure = NULL; ++ ++ /* Make sure the LED is off */ ++// htcuniversal_clear_led(2); ++ ++ return 0; ++} ++ ++static struct platform_driver bt_driver = { ++ .driver = { ++ .name = "htcuniversal_bt", ++ }, ++ .probe = htcuniversal_bt_probe, ++ .remove = htcuniversal_bt_remove, ++}; ++ ++module_param(use_led, uint, 0); ++ ++static int __init ++htcuniversal_bt_init( void ) ++{ ++ printk(KERN_NOTICE "htcuniversal Bluetooth Driver\n"); ++ return platform_driver_register( &bt_driver ); ++} ++ ++static void __exit ++htcuniversal_bt_exit( void ) ++{ ++ platform_driver_unregister( &bt_driver ); ++} ++ ++module_init( htcuniversal_bt_init ); ++module_exit( htcuniversal_bt_exit ); ++ ++MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC"); ++MODULE_DESCRIPTION("HTC Universal Bluetooth Support Driver"); ++MODULE_LICENSE("GPL"); ++ ++/* vim600: set noexpandtab sw=8 ts=8 :*/ ++ +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,17 @@ ++/* ++ * Bluetooth support file for calling bluetooth configuration functions ++ * ++ * Copyright (c) 2005 SDG Systems, LLC ++ * ++ * 2005-06 Todd Blumer Initial Revision ++ */ ++ ++#ifndef _HTCUNIVERSAL_BT_H ++#define _HTCUNIVERSAL_BT_H ++ ++struct htcuniversal_bt_funcs { ++ void (*configure) ( int state ); ++}; ++ ++ ++#endif +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,87 @@ ++/* ++ * Buttons driver for HTC Universal ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. ++ * ++ * Copyright (C) 2005 Pawel Kolodziejski ++ * Copyright (C) 2003 Joshua Wise ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static struct asic3_keys_button asic3_buttons[] = { ++//{KEY_SCREEN, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW}, ++//{KEY_SWITCHVIDEOMODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW}, ++//{KEY_KBDILLUMTOGGLE, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW}, ++{SW_LID, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW}, ++{SW_TABLET_MODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW}, ++//{SW_NIGHT_SENSOR, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW}, ++{KEY_F10, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_BACKLIGHT_N, 1, "backlight_button"}, ++{KEY_RECORD, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_RECORD_N, 1, "record_button"}, ++{KEY_CAMERA, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_CAMERA_N, 1, "camera_button"}, ++{KEY_VOLUMEDOWN, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_UP_N, 1, "volume_slider_down"}, ++{KEY_VOLUMEUP, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_DOWN_N, 1, "volume_slider_up"}, ++{KEY_KPENTER, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_OK_N, 1, "select"}, ++{KEY_RIGHT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_RIGHT_N, 1, "right"}, ++{KEY_LEFT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_LEFT_N, 1, "left"}, ++{KEY_DOWN, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_DOWN_N, 1, "down"}, ++{KEY_UP, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_UP_N, 1, "up"}, ++}; ++ ++static struct asic3_keys_platform_data asic3_keys_data = { ++ .buttons = asic3_buttons, ++ .nbuttons = ARRAY_SIZE(asic3_buttons), ++ .asic3_dev = &htcuniversal_asic3.dev, ++}; ++ ++static struct platform_device htcuniversal_keys_asic3 = { ++ .name = "asic3-keys", ++ .dev = { .platform_data = &asic3_keys_data, } ++}; ++ ++static int __init htcuniversal_buttons_probe(struct platform_device *dev) ++{ ++ platform_device_register(&htcuniversal_keys_asic3); ++ return 0; ++} ++ ++static struct platform_driver htcuniversal_buttons_driver = { ++ .driver = { ++ .name = "htcuniversal_buttons", ++ }, ++ .probe = htcuniversal_buttons_probe, ++}; ++ ++static int __init htcuniversal_buttons_init(void) ++{ ++ if (!machine_is_htcuniversal()) ++ return -ENODEV; ++ ++ return platform_driver_register(&htcuniversal_buttons_driver); ++} ++ ++static void __exit htcuniversal_buttons_exit(void) ++{ ++ platform_driver_unregister(&htcuniversal_buttons_driver); ++} ++ ++module_init(htcuniversal_buttons_init); ++module_exit(htcuniversal_buttons_exit); ++ ++MODULE_AUTHOR ("Joshua Wise, Pawel Kolodziejski, Paul Sokolosvky"); ++MODULE_DESCRIPTION ("Buttons support for HTC Universal"); ++MODULE_LICENSE ("GPL"); +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,226 @@ ++/* Core Hardware driver for Hx4700 (Serial, ASIC3, EGPIOs) ++ * ++ * Copyright (c) 2005 SDG Systems, LLC ++ * ++ * 2005-03-29 Todd Blumer Converted basic structure to support hx4700 ++ * 2005-04-30 Todd Blumer Add IRDA code from H2200 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++volatile u_int16_t *egpios; ++u_int16_t egpio_reg; ++ ++static int htc_bootloader = 0; /* Is the stock HTC bootloader installed? */ ++ ++/* ++ * may make sense to put egpios elsewhere, but they're here now ++ * since they share some of the same address space with the TI WLAN ++ * ++ * EGPIO register is write-only ++ */ ++ ++void ++htcuniversal_egpio_enable( u_int16_t bits ) ++{ ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ ++ egpio_reg |= bits; ++ *egpios = egpio_reg; ++ ++ local_irq_restore(flags); ++} ++EXPORT_SYMBOL_GPL(htcuniversal_egpio_enable); ++ ++void ++htcuniversal_egpio_disable( u_int16_t bits ) ++{ ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ ++ egpio_reg &= ~bits; ++ *egpios = egpio_reg; ++ ++ local_irq_restore(flags); ++} ++EXPORT_SYMBOL_GPL(htcuniversal_egpio_disable); ++ ++#ifdef CONFIG_PM ++ ++//void htcuniversal_ll_pm_init(void); ++ ++static int htcuniversal_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ /* Turn off external clocks here, because htcuniversal_power and asic3_mmc ++ * scared to do so to not hurt each other. (-5 mA) */ ++ ++ ++ /* 0x20c2 is HTC clock value ++ * CLOCK_CDEX_SOURCE 2 ++ * CLOCK_CDEX_SPI 0 ++ * CLOCK_CDEX_OWM 0 ++ * ++ * CLOCK_CDEX_PWM0 0 ++ * CLOCK_CDEX_PWM1 0 ++ * CLOCK_CDEX_LED0 1 ++ * CLOCK_CDEX_LED1 1 ++ * ++ * CLOCK_CDEX_LED2 0 ++ * CLOCK_CDEX_SD_HOST 0 ++ * CLOCK_CDEX_SD_BUS 0 ++ * CLOCK_CDEX_SMBUS 0 ++ * ++ * CLOCK_CDEX_CONTROL_CX 0 ++ * CLOCK_CDEX_EX0 1 ++ * CLOCK_CDEX_EX1 0 ++ * */ ++ asic3_set_clock_cdex(&htcuniversal_asic3.dev, 0xffff, CLOCK_CDEX_SOURCE1 ++ |CLOCK_CDEX_LED0 ++ |CLOCK_CDEX_LED1 ++ |CLOCK_CDEX_LED2 ++ |CLOCK_CDEX_EX0 ++ |CLOCK_CDEX_EX1); ++ ++ *egpios = 0; /* turn off all egpio power */ ++ ++ /* Wake up enable. */ ++ PWER = PWER_GPIO0 ++ | PWER_GPIO1 /* reset */ ++ | PWER_GPIO9 /* USB */ ++ | PWER_GPIO10 /* AC on USB */ ++ | PWER_GPIO14 /* ASIC3 mux */ ++ | PWER_RTC; ++ /* Wake up on falling edge. */ ++ PFER = PWER_GPIO0 ++ | PWER_GPIO1 ++ | PWER_GPIO9 ++ | PWER_GPIO10 ++ | PWER_GPIO14; ++ ++ /* Wake up on rising edge. */ ++ PRER = PWER_GPIO0 ++ | PWER_GPIO1 ++ | PWER_GPIO9 ++ | PWER_GPIO10; ++ /* 3.6864 MHz oscillator power-down enable */ ++ PCFR = PCFR_OPDE | PCFR_PI2CEN | PCFR_GPROD | PCFR_GPR_EN; ++ ++ PGSR0 = 0x09088004; ++ PGSR1 = 0x00020002; ++ PGSR2 = 0x8001c000; ++ PGSR3 = 0x00106284; ++ ++ PSLR = 0xcc000000; ++ ++#if 0 ++ /* ++ * If we're using bootldr and not the stock HTC bootloader, ++ * we want to wake up periodically to see if the charge is full while ++ * it is suspended. We do this with the OS timer 4 in the pxa270. ++ */ ++ if (!htc_bootloader) { ++ OMCR4 = 0x4b; /* Periodic, self-resetting, 1-second timer */ ++ OSMR4 = 5; /* Wake up bootldr after x seconds so it can ++ figure out what to do with the LEDs. */ ++ OIER |= 0x10; /* Enable interrupt source for Timer 4 */ ++ OSCR4 = 0; /* This starts the timer */ ++ } ++#endif ++ ++ asic3_set_extcf_select(&htcuniversal_asic3.dev, ASIC3_EXTCF_OWM_EN, 0); ++ ++ return 0; ++} ++ ++static int htcuniversal_resume(struct platform_device *dev) ++{ ++ htcuniversal_egpio_enable(0); ++ ++ return 0; ++} ++#else ++# define htcuniversal_suspend NULL ++# define htcuniversal_resume NULL ++#endif ++ ++static int ++htcuniversal_core_probe( struct platform_device *dev ) ++{ ++ ++ printk( KERN_NOTICE "HTC Universal Core Hardware Driver\n" ); ++ ++ egpios = (volatile u_int16_t *)ioremap_nocache(HTCUNIVERSAL_EGPIO_BASE, sizeof *egpios ); ++ if (!egpios) ++ return -ENODEV; ++ else ++ printk( KERN_NOTICE "HTC Universal Core: egpio at phy=0x%8.8x is at virt=0x%p\n", ++ HTCUNIVERSAL_EGPIO_BASE, egpios ); ++ ++ printk("Using stock HTC first stage bootloader\n"); ++ htc_bootloader = 1; ++ ++// htcuniversal_ll_pm_init(); ++ ++ return 0; ++} ++ ++static int ++htcuniversal_core_remove( struct platform_device *dev ) ++{ ++ ++ if (egpios != NULL) ++ iounmap( (void *)egpios ); ++ ++ return 0; ++} ++ ++static struct platform_driver htcuniversal_core_driver = { ++ .driver = { ++ .name = "htcuniversal_core", ++ }, ++ .probe = htcuniversal_core_probe, ++ .remove = htcuniversal_core_remove, ++ .suspend = htcuniversal_suspend, ++ .resume = htcuniversal_resume, ++}; ++ ++static int __init ++htcuniversal_core_init( void ) ++{ ++ return platform_driver_register( &htcuniversal_core_driver ); ++} ++ ++ ++static void __exit ++htcuniversal_core_exit( void ) ++{ ++ platform_driver_unregister( &htcuniversal_core_driver ); ++} ++ ++module_init( htcuniversal_core_init ); ++module_exit( htcuniversal_core_exit ); ++ ++MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC"); ++MODULE_DESCRIPTION("HTC Universal Core Hardware Driver"); ++MODULE_LICENSE("GPL"); ++ ++/* vim600: set noexpandtab sw=8 ts=8 :*/ +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,212 @@ ++/* ++ * Use consistent with the GNU GPL is permitted, ++ * provided that this copyright notice is ++ * preserved in its entirety in all copies and derived works. ++ * ++ * History: ++ * ++ * 2004-03-01 Eddi De Pieri Adapted for htcuniversal using h3900_lcd.c ++ * 2004 Shawn Anderson Lcd hacking on htcuniversal ++ * see h3900_lcd.c for more history. ++ * ++ */ ++ ++#include ++#include /* for pxa-regs.h (__REG) */ ++#include ++#include /* LCCR[0,1,2,3]* */ ++#include /* for pxa-regs.h (Fld, etc) */ ++#include /* pxafb_mach_info, set_pxa_fb_info */ ++#include /* machine_is_htcuniversal */ ++#include /* lcd_device */ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++static int saved_lcdpower=-1; ++ ++static int powerup_lcd(void) ++{ ++ printk( KERN_INFO "htcuniversal powerup_lcd: called\n"); ++ ++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<dev, NULL, ++ &htcuniversal_lcd_properties); ++ if (IS_ERR(htcuniversal_lcd_dev)) { ++ printk("htcuniversal_lcd_probe: error registering devices\n"); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static int htcuniversal_lcd_remove(struct platform_device * dev) ++{ ++ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4); ++ lcd_device_unregister(htcuniversal_lcd_dev); ++ ++ return 0; ++} ++ ++static int htcuniversal_lcd_suspend(struct platform_device * dev, pm_message_t state) ++{ ++// printk("htcuniversal_lcd_suspend: called.\n"); ++ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4); ++ return 0; ++} ++ ++static int htcuniversal_lcd_resume(struct platform_device * dev) ++{ ++// printk("htcuniversal_lcd_resume: called.\n"); ++ ++ /* */ ++#if 1 ++ LCCR4|=LCCR4_PCDDIV; ++#endif ++ ++ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 0); ++ return 0; ++} ++ ++static struct platform_driver htcuniversal_lcd_driver = { ++ .driver = { ++ .name = "htcuniversal_lcd", ++ }, ++ .probe = htcuniversal_lcd_probe, ++ .remove = htcuniversal_lcd_remove, ++ .suspend = htcuniversal_lcd_suspend, ++ .resume = htcuniversal_lcd_resume, ++}; ++ ++static int htcuniversal_lcd_init(void) ++{ ++ if (!machine_is_htcuniversal()) ++ return -ENODEV; ++ ++ return platform_driver_register(&htcuniversal_lcd_driver); ++} ++ ++static void htcuniversal_lcd_exit(void) ++{ ++ lcd_device_unregister(htcuniversal_lcd_dev); ++ platform_driver_unregister(&htcuniversal_lcd_driver); ++} ++ ++module_init(htcuniversal_lcd_init); ++module_exit(htcuniversal_lcd_exit); ++ ++MODULE_AUTHOR("xanadux.org"); ++MODULE_DESCRIPTION("Framebuffer driver for HTC Universal"); ++MODULE_LICENSE("GPL"); ++ +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,167 @@ ++ ++/* Phone interface driver for Qualcomm MSM6250 on HTC Universal ++ * ++ * Copyright (c) 2005 SDG Systems, LLC ++ * ++ * 2005-04-21 Todd Blumer Created. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "htcuniversal_phone.h" ++ ++static void phone_reset(void) ++{ ++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<dev.platform_data; ++ ++ /* configure phone UART */ ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD ); ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD ); ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD ); ++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD ); ++ ++ funcs->configure = htcuniversal_phone_configure; ++ ++ return 0; ++} ++ ++static int ++htcuniversal_phone_remove( struct platform_device *dev ) ++{ ++ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data; ++ ++ funcs->configure = NULL; ++ ++ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1< ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_PM ++ ++static u32 *addr_a0040000; ++static u32 *addr_a0040004; ++static u32 *addr_a0040008; ++static u32 *addr_a004000c; ++ ++static u32 save_a0040000; ++static u32 save_a0040004; ++static u32 save_a0040008; ++static u32 save_a004000c; ++ ++static void htcuniversal_pxa_ll_pm_suspend(unsigned long resume_addr) ++{ ++ save_a0040000 = *addr_a0040000; ++ save_a0040004 = *addr_a0040004; ++ save_a0040008 = *addr_a0040008; ++ save_a004000c = *addr_a004000c; ++ ++ /* jump to PSPR */ ++ *addr_a0040000 = 0xe3a00101; // mov r0, #0x40000000 ++ *addr_a0040004 = 0xe380060f; // orr r0, r0, #0x0f000000 ++ *addr_a0040008 = 0xe3800008; // orr r0, r0, #8 ++ *addr_a004000c = 0xe590f000; // ldr pc, [r0] ++} ++ ++static void htcuniversal_pxa_ll_pm_resume(void) ++{ ++ *addr_a0040000 = save_a0040000; ++ *addr_a0040004 = save_a0040004; ++ *addr_a0040008 = save_a0040008; ++ *addr_a004000c = save_a004000c; ++} ++ ++static struct pxa_ll_pm_ops htcuniversal_ll_pm_ops = { ++ .suspend = htcuniversal_pxa_ll_pm_suspend, ++ .resume = htcuniversal_pxa_ll_pm_resume, ++}; ++ ++void htcuniversal_ll_pm_init(void) { ++ addr_a0040000 = phys_to_virt(0xa0040000); ++ addr_a0040004 = phys_to_virt(0xa0040004); ++ addr_a0040008 = phys_to_virt(0xa0040008); ++ addr_a004000c = phys_to_virt(0xa004000c); ++ ++ pxa_pm_set_ll_ops(&htcuniversal_ll_pm_ops); ++} ++#endif /* CONFIG_PM */ +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,97 @@ ++/* ++ * pda_power driver for HTC Universal ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or (at ++ * your option) any later version. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++static void charge_on(int flags) ++{ ++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1< ++ * May 2003 ++ * ++ * Updates: ++ * ++ * 2004-02-11 Michael Opdenacker Renamed names from samcop to shamcop, ++ * Goal:support HAMCOP and SAMCOP. ++ * 2004-02-14 Michael Opdenacker Temporary fix for device id handling ++ * ++ * 2005-02-18 Aric Blumer Converted basic structure to support hx4700 ++ * ++ * 2005-06-07 Aric Blumer Added tssim device handling so we can ++ * hook in the fbvncserver. ++ */ ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++/* remove me */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++ ++#include "tsc2046_ts.h" ++ ++enum touchscreen_state { ++ STATE_WAIT_FOR_TOUCH, /* Waiting for a PEN interrupt */ ++ STATE_SAMPLING /* Actively sampling ADC */ ++}; ++ ++struct touchscreen_data { ++ enum touchscreen_state state; ++ struct timer_list timer; ++ int irq; ++ struct input_dev *input; ++ /* */ ++ int port; ++ int clock; ++ int pwrbit_X; ++ int pwrbit_Y; ++ int (*pen_down)(void); ++}; ++ ++static unsigned long poll_sample_time = 10; /* Sample every 10 milliseconds */ ++ ++static struct touchscreen_data *ts_data; ++ ++static int irqblock; ++ ++module_param(poll_sample_time, ulong, 0644); ++MODULE_PARM_DESC(poll_sample_time, "Poll sample time"); ++ ++static inline void ++report_touchpanel(struct touchscreen_data *ts, int pressure, int x, int y) ++{ ++ input_report_abs(ts->input, ABS_PRESSURE, pressure); ++ input_report_abs(ts->input, ABS_X, x); ++ input_report_abs(ts->input, ABS_Y, y); ++ input_sync(ts->input); ++} ++ ++static void start_read(struct touchscreen_data *touch); ++ ++static irqreturn_t ++pen_isr(int irq, void *irq_desc) ++{ ++ struct touchscreen_data *ts = ts_data; ++ ++ if(irq == ts->irq /* && !irqblock */) { ++ irqblock = 1; ++ ++ /* ++ * Disable the pen interrupt. It's reenabled when the user lifts the ++ * pen. ++ */ ++ disable_irq(ts->irq); ++ ++ if (ts->state == STATE_WAIT_FOR_TOUCH) { ++ ts->state = STATE_SAMPLING; ++ start_read(ts); ++ } else { ++ /* Shouldn't happen */ ++ printk(KERN_ERR "Unexpected ts interrupt\n"); ++ } ++ ++ } ++ return IRQ_HANDLED; ++} ++ ++static void ++ssp_init(int port, int clock) ++{ ++ ++ pxa_set_cken(clock, 0); ++ ++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD); ++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD); ++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD); ++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD); ++ ++ SET_HTCUNIVERSAL_GPIO(SPI_FRM,1); ++ ++ /* *** Set up the SPI Registers *** */ ++ SSCR0_P(port) = ++ SSCR0_EDSS /* Extended Data Size Select */ ++ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */ ++ /* Synchronous Serial Enable (Disable for now) */ ++ | SSCR0_Motorola /* Motorola SPI Interface */ ++ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */ ++ ; ++ SSCR1_P(port) = 0; ++ SSPSP_P(port) = 0; ++ ++ /* Clear the Status */ ++ SSSR_P(port) = SSSR_P(port) & 0x00fcfffc; ++ ++ /* Now enable it */ ++ SSCR0_P(port) = ++ SSCR0_EDSS /* Extended Data Size Select */ ++ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */ ++ | SSCR0_SSE /* Synchronous Serial Enable */ ++ | SSCR0_Motorola /* Motorola SPI Interface */ ++ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */ ++ ; ++ ++ pxa_set_cken(clock, 1); ++} ++ ++static void ++start_read(struct touchscreen_data *touch) ++{ ++ unsigned long inc = (poll_sample_time * HZ) / 1000; ++ int i; ++ ++ /* Write here to the serial port. We request X and Y only for now. ++ * Then we have to wait for poll_sample_time before we read out the serial ++ * port. Then, when we read it out, we check to see if the pen is still ++ * down. If so, then we issue another request here. ++ */ ++#define TS_SAMPLES 7 ++ ++ /* ++ * We do four samples for each, and throw out the highest and lowest, then ++ * average the other two. ++ */ ++ ++ for(i = 0; i < TS_SAMPLES; i++) { ++ while(!(SSSR_P(touch->port) & SSSR_TNF)) ++ ; ++ /* It's not full. Write the command for X */ ++ SSDR_P(touch->port) = (TSC2046_SAMPLE_X|(touch->pwrbit_X))<<16; ++ } ++ ++ for(i = 0; i < TS_SAMPLES; i++) { ++ while(!(SSSR_P(touch->port) & SSSR_TNF)) ++ ; ++ /* It's not full. Write the command for Y */ ++ SSDR_P(touch->port) = (TSC2046_SAMPLE_Y|(touch->pwrbit_Y))<<16; ++ } ++ ++ /* ++ * Enable the timer. We should get an interrupt, but we want keep a timer ++ * to ensure that we can detect missing data ++ */ ++ mod_timer(&touch->timer, jiffies + inc); ++} ++ ++static void ++ts_timer_callback(unsigned long data) ++{ ++ struct touchscreen_data *ts = (struct touchscreen_data *)data; ++ int x, a[TS_SAMPLES], y; ++ static int oldx, oldy; ++ int ssrval; ++ ++ /* ++ * Check here to see if there is anything in the SPI FIFO. If so, ++ * return it if there has been a change. If not, then we have a ++ * timeout. Generate an erro somehow. ++ */ ++ ssrval = SSSR_P(ts->port); ++ ++ if(ssrval & SSSR_RNE) { /* Look at Rx Not Empty bit */ ++ int number_of_entries_in_fifo; ++ ++ /* The FIFO is not emtpy. Good! Now make sure there are at least two ++ * entries. (Should be two exactly.) */ ++ ++ number_of_entries_in_fifo = ((ssrval >> 12) & 0xf) + 1; ++ ++ if(number_of_entries_in_fifo < TS_SAMPLES * 2) { ++ /* Not ready yet. Come back later. */ ++ unsigned long inc = (poll_sample_time * HZ) / 1000; ++ mod_timer(&ts->timer, jiffies + inc); ++ return; ++ } ++ ++ if(number_of_entries_in_fifo == TS_SAMPLES * 2) { ++ int i, j; ++ ++ for(i = 0; i < TS_SAMPLES; i++) { ++ a[i] = SSDR_P(ts->port); ++ } ++ /* Sort them (bubble) */ ++ for(j = TS_SAMPLES - 1; j > 0; j--) { ++ for(i = 0; i < j; i++) { ++ if(a[i] > a[i + 1]) { ++ int tmp; ++ tmp = a[i+1]; ++ a[i+1] = a[i]; ++ a[i] = tmp; ++ } ++ } ++ } ++ ++ /* Take the average of the middle two */ ++ /* x = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */ ++ x = a[TS_SAMPLES/2]; ++ ++ for(i = 0; i < TS_SAMPLES; i++) { ++ a[i] = SSDR_P(ts->port); ++ } ++ /* Sort them (bubble) */ ++ for(j = TS_SAMPLES - 1; j > 0; j--) { ++ for(i = 0; i < j; i++) { ++ if(a[i] > a[i + 1]) { ++ int tmp; ++ tmp = a[i+1]; ++ a[i+1] = a[i]; ++ a[i] = tmp; ++ } ++ } ++ } ++ ++ ++ /* Take the average of the middle two */ ++ /* y = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */ ++ y = a[TS_SAMPLES/2]; ++ } else { ++ /* We have an error! Too many entries. */ ++ printk(KERN_ERR "TS: Expected %d entries. Got %d\n", TS_SAMPLES*2, number_of_entries_in_fifo); ++ /* Try to clear the FIFO */ ++ while(number_of_entries_in_fifo--) { ++ (void)SSDR_P(ts->port); ++ } ++ ++ if (ts->pen_down()) ++ start_read(ts); ++ ++ return; ++ } ++ } else { ++ /* Not ready yet. Come back later. */ ++ unsigned long inc = (poll_sample_time * HZ) / 1000; ++ mod_timer(&ts->timer, jiffies + inc); ++ return; ++ } ++ ++ /* ++ * Now we check to see if the pen is still down. If it is, then call ++ * start_read(). ++ */ ++ if (ts->pen_down()) ++ { ++ /* Still down */ ++ if(oldx != x || oldy != y) { ++ oldx = x; ++ oldy = y; ++ report_touchpanel(ts, 1, x, y); ++ } ++ start_read(ts); ++ } else { ++ /* Up */ ++ report_touchpanel(ts, 0, 0, 0); ++ irqblock = 0; ++ ts->state = STATE_WAIT_FOR_TOUCH; ++ /* Re-enable pen down interrupt */ ++ enable_irq(ts->irq); ++ } ++} ++ ++static int pen_down(void) ++{ ++ return ( asic3_get_gpio_status_a( &htcuniversal_asic3.dev ) & (1<dev.platform_data; ++ ++ printk("htcuniversal: ts_probe\n"); ++ ++ ts = ts_data = kmalloc (sizeof (*ts), GFP_KERNEL); ++ if (ts == NULL) { ++ printk( KERN_NOTICE "htcuniversal_ts: unable to allocate memory\n" ); ++ return -ENOMEM; ++ } ++ memset (ts, 0, sizeof (*ts)); ++ ++ ts->input = input_allocate_device(); ++ if (ts->input == NULL) { ++ printk( KERN_NOTICE "htcuniversal_ts: unable to allocation touchscreen input\n" ); ++ kfree(ts); ++ return -ENOMEM; ++ } ++ ts->input->evbit[0] = BIT(EV_ABS); ++ ts->input->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE); ++ ts->input->absmin[ABS_X] = 0; ++ ts->input->absmax[ABS_X] = 32767; ++ ts->input->absmin[ABS_Y] = 0; ++ ts->input->absmax[ABS_Y] = 32767; ++ ts->input->absmin[ABS_PRESSURE] = 0; ++ ts->input->absmax[ABS_PRESSURE] = 1; ++ ++ ts->input->name = "htcuniversal_ts"; ++ ts->input->phys = "touchscreen/htcuniversal_ts"; ++ ts->input->private = ts; ++ ++ input_register_device(ts->input); ++ ++ ts->timer.function = ts_timer_callback; ++ ts->timer.data = (unsigned long)ts; ++ ts->state = STATE_WAIT_FOR_TOUCH; ++ init_timer (&ts->timer); ++ ++ platform_set_drvdata(dev, ts); ++ ++ ts->port=-1; ++ ++ if (mach) { ++ ts->port = mach->port; ++ ts->clock = mach->clock; ++ ts->pwrbit_X = mach->pwrbit_X; ++ ts->pwrbit_Y = mach->pwrbit_Y; ++ ++ /* static irq */ ++ if (mach->irq) ++ ts->irq = mach->irq; ++ ++ if (mach->pen_down) ++ ts->pen_down=mach->pen_down; ++ } ++ ++ if (ts->port == -1) ++ { ++ printk("tsc2046: your device is not supported by this driver\n"); ++ return -ENODEV; ++ } ++ ++ /* *** Initialize the SSP interface *** */ ++ ssp_init(ts->port, ts->clock); ++ ++ while(!(SSSR_P(ts->port) & SSSR_TNF)) ++ ; ++ SSDR_P(ts->port) = (TSC2046_SAMPLE_X|(ts->pwrbit_X))<<16; ++ ++ for(retval = 0; retval < 100; retval++) { ++ if(SSSR_P(ts->port) & SSSR_RNE) { ++ while(SSSR_P(ts->port) & SSSR_RNE) { ++ (void)SSDR_P(ts->port); ++ } ++ break; ++ } ++ mdelay(1); ++ } ++ ++ if (machine_is_htcuniversal() ) ++ { ++ ts->irq = asic3_irq_base( &htcuniversal_asic3.dev ) + ASIC3_GPIOA_IRQ_BASE + GPIOA_TOUCHSCREEN_N; ++ ts->pen_down=pen_down; ++ } ++ ++ retval = request_irq(ts->irq, pen_isr, IRQF_DISABLED, "tsc2046_ts", ts); ++ if(retval) { ++ printk("Unable to get interrupt\n"); ++ input_unregister_device (ts->input); ++ return -ENODEV; ++ } ++ set_irq_type(ts->irq, IRQ_TYPE_EDGE_FALLING); ++ ++ return 0; ++} ++ ++static int ++ts_remove (struct platform_device *dev) ++{ ++ struct touchscreen_data *ts = platform_get_drvdata(dev); ++ ++ input_unregister_device (ts->input); ++ del_timer_sync (&ts->timer); ++ free_irq (ts->irq, ts); ++ pxa_set_cken(ts->clock, 0); ++ ++ kfree(ts); ++ return 0; ++} ++ ++static int ++ts_suspend (struct platform_device *dev, pm_message_t state) ++{ ++ struct touchscreen_data *ts = platform_get_drvdata(dev); ++ ++ disable_irq(ts->irq); ++ ++ printk("htcuniversal_ts2_suspend: called.\n"); ++ return 0; ++} ++ ++static int ++ts_resume (struct platform_device *dev) ++{ ++ struct touchscreen_data *ts = platform_get_drvdata(dev); ++ ++ ts->state = STATE_WAIT_FOR_TOUCH; ++ ssp_init(ts->port, ts->clock); ++ enable_irq(ts->irq); ++ ++ printk("htcuniversal_ts2_resume: called.\n"); ++ return 0; ++} ++ ++static struct platform_driver ts_driver = { ++ .probe = ts_probe, ++ .remove = ts_remove, ++ .suspend = ts_suspend, ++ .resume = ts_resume, ++ .driver = { ++ .name = "htcuniversal_ts", ++ }, ++}; ++ ++ ++static int ++ts_module_init (void) ++{ ++ printk(KERN_NOTICE "HTC Universal Touch Screen Driver\n"); ++ ++ return platform_driver_register(&ts_driver); ++} ++ ++static void ++ts_module_cleanup (void) ++{ ++ platform_driver_unregister (&ts_driver); ++} ++ ++module_init(ts_module_init); ++module_exit(ts_module_cleanup); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC"); ++MODULE_DESCRIPTION("HTC Universal Touch Screen Driver"); +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,71 @@ ++ ++/* ++ * ++ * htcuniversal_udc.c: ++ * htcuniversal specific code for the pxa27x usb device controller. ++ * ++ * Use consistent with the GNU GPL is permitted. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static void htcuniversal_udc_command(int cmd) ++{ ++ switch (cmd) { ++ case PXA2XX_UDC_CMD_DISCONNECT: ++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, ++ 1< ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include "leds.h" ++ ++#include ++#include ++#include ++#include ++ ++#ifdef DEBUG ++#define dbg(msg, ...) printk(msg, __VA_ARGS__) ++#else ++#define dbg(msg, ...) ++#endif ++ ++static ++void asic3_leds_set(struct led_classdev *led_cdev, enum led_brightness b) ++{ ++ struct asic3_led *led = container_of(led_cdev, struct asic3_led, ++ led_cdev); ++ struct asic3_leds_machinfo *machinfo = led->machinfo; ++ struct device *asic3_dev = &machinfo->asic3_pdev->dev; ++ ++ dbg("%s:%s %d(%d)-%s %d\n", __FILE__, __FUNCTION__, led->hw_num, ++ led->gpio_num, led->led_cdev.name, b); ++ ++ if (led->hw_num == -1) { ++ asic3_gpio_set_value(asic3_dev, led->gpio_num, b); ++ return; ++ } ++ ++ if (b == LED_OFF) { ++ asic3_set_led(asic3_dev, led->hw_num, 0, 16, 6); ++ asic3_set_gpio_out_c(asic3_dev, led->hw_num, 0); ++ } ++ else { ++ asic3_set_gpio_out_c(asic3_dev, led->hw_num, led->hw_num); ++ #ifdef CONFIG_LEDS_TRIGGER_HWTIMER ++ if (led_cdev->trigger && led_cdev->trigger->is_led_supported && ++ (led_cdev->trigger->is_led_supported(led_cdev) & ++ LED_SUPPORTS_HWTIMER)) { ++ struct hwtimer_data *td = led_cdev->trigger_data; ++ if (!td) return; ++ asic3_set_led(asic3_dev, led->hw_num, td->delay_on/8, ++ (td->delay_on + td->delay_off)/8, 6); ++ } ++ else ++ #endif ++ asic3_set_led(asic3_dev, led->hw_num, 16, 16, 6); ++ } ++ ++ return; ++} ++ ++static ++int asic3_leds_probe(struct platform_device *pdev) ++{ ++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data; ++ struct asic3_led *leds = machinfo->leds; ++ int ret, i = 0; ++ ++ dbg("%s:%s\n", __FILE__, __FUNCTION__); ++ ++ // Turn on clocks early, for the case if trigger would enable ++ // led immediately after led_classdev_register(). ++ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev, ++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, ++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2); ++ ++ for (i = 0; i < machinfo->num_leds; i++) { ++ leds[i].machinfo = machinfo; ++ leds[i].led_cdev.brightness_set = asic3_leds_set; ++ ret = led_classdev_register(&pdev->dev, &leds[i].led_cdev); ++ if (ret) { ++ printk(KERN_ERR "Error: can't register %s led\n", ++ leds[i].led_cdev.name); ++ goto out_err; ++ } ++ } ++ ++ return 0; ++ ++out_err: ++ while (--i >= 0) led_classdev_unregister(&leds[i].led_cdev); ++ ++ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev, ++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, ++ 0 | 0 | 0); ++ ++ return ret; ++} ++ ++static ++int asic3_leds_remove(struct platform_device *pdev) ++{ ++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data; ++ struct asic3_led *leds = machinfo->leds; ++ int i = 0; ++ ++ dbg("%s:%s\n", __FILE__, __FUNCTION__); ++ ++ for (i = 0; i < machinfo->num_leds; i++) ++ led_classdev_unregister(&leds[i].led_cdev); ++ ++ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev, ++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, ++ 0 | 0 | 0); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++ ++static ++int asic3_leds_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data; ++ struct asic3_led *leds = machinfo->leds; ++ int i = 0; ++ ++ dbg("%s:%s\n", __FILE__, __FUNCTION__); ++ ++ for (i = 0; i < machinfo->num_leds; i++) ++ led_classdev_suspend(&leds[i].led_cdev); ++ ++ return 0; ++} ++ ++static ++int asic3_leds_resume(struct platform_device *pdev) ++{ ++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data; ++ struct asic3_led *leds = machinfo->leds; ++ int i = 0; ++ ++ dbg("%s:%s\n", __FILE__, __FUNCTION__); ++ ++ for (i = 0; i < machinfo->num_leds; i++) ++ led_classdev_resume(&leds[i].led_cdev); ++ ++ return 0; ++} ++ ++#endif ++ ++static ++struct platform_driver asic3_leds_driver = { ++ .probe = asic3_leds_probe, ++ .remove = asic3_leds_remove, ++#ifdef CONFIG_PM ++ .suspend = asic3_leds_suspend, ++ .resume = asic3_leds_resume, ++#endif ++ .driver = { ++ .name = "asic3-leds", ++ }, ++}; ++ ++int asic3_leds_register(void) ++{ ++ dbg("%s:%s\n", __FILE__, __FUNCTION__); ++ return platform_driver_register(&asic3_leds_driver); ++} ++ ++void asic3_leds_unregister(void) ++{ ++ platform_driver_unregister(&asic3_leds_driver); ++ return; ++} ++ ++EXPORT_SYMBOL_GPL(asic3_leds_register); ++EXPORT_SYMBOL_GPL(asic3_leds_unregister); ++ ++MODULE_AUTHOR("Anton Vorontsov "); ++MODULE_DESCRIPTION("HTC ASIC3 LEDs driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.26-rc4/drivers/mfd/Kconfig +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/mfd/Kconfig 2008-06-01 18:49:43.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/mfd/Kconfig 2008-06-01 18:49:45.000000000 +0100 +@@ -44,6 +44,16 @@ + help + Support for TI TSC2101 Touchscreen and Audio Codec + ++config HTC_ASIC3 ++ tristate "HTC ASIC3 (iPAQ h1900/h3900/h4000/hx4700/rx3000) support" ++ ++config HTC_ASIC3_DS1WM ++ bool "Support HTC ASIC3 builtin DS1WM block" ++ help ++ Choose Y here if you want to include support for ASIC3's builtin ++ W1 controller. Some devices do not use it, and yet other have ++ separate DS1WM controller. For them, choose N. ++ + endmenu + + menu "Multimedia Capabilities Port drivers" +Index: linux-2.6.26-rc4/drivers/mfd/Makefile +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/mfd/Makefile 2008-06-01 18:49:43.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/mfd/Makefile 2008-06-01 18:49:45.000000000 +0100 +@@ -2,6 +2,8 @@ + # Makefile for multifunction miscellaneous devices + # + ++obj-$(CONFIG_HTC_ASIC3) += asic3_base.o soc-core.o ++ + obj-$(CONFIG_MFD_SM501) += sm501.o + obj-$(CONFIG_MFD_ASIC3) += asic3.o + +Index: linux-2.6.26-rc4/drivers/mfd/asic3_base.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/drivers/mfd/asic3_base.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,1208 @@ ++/* ++ * Driver interface to HTC "ASIC3" ++ * ++ * Copyright 2001 Compaq Computer Corporation. ++ * Copyright 2004-2005 Phil Blundell ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, ++ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS ++ * FITNESS FOR ANY PARTICULAR PURPOSE. ++ * ++ * Author: Andrew Christian ++ * ++ * October 2001 ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include "soc-core.h" ++ ++ ++struct asic3_data { ++ void *mapping; ++ unsigned int bus_shift; ++ int irq_base; ++ int irq_nr; ++ ++ u16 irq_bothedge[4]; ++ struct device *dev; ++ ++ struct platform_device *mmc_dev; ++}; ++ ++static DEFINE_SPINLOCK(asic3_gpio_lock); ++ ++static int asic3_remove(struct platform_device *dev); ++ ++static inline unsigned long asic3_address(struct device *dev, ++ unsigned int reg) ++{ ++ struct asic3_data *adata; ++ ++ adata = (struct asic3_data *)dev->driver_data; ++ ++ return (unsigned long)adata->mapping + (reg >> (2 - adata->bus_shift)); ++} ++ ++void asic3_write_register(struct device *dev, unsigned int reg, u32 value) ++{ ++ __raw_writew(value, asic3_address(dev, reg)); ++} ++EXPORT_SYMBOL(asic3_write_register); ++ ++u32 asic3_read_register(struct device *dev, unsigned int reg) ++{ ++ return __raw_readw(asic3_address(dev, reg)); ++} ++EXPORT_SYMBOL(asic3_read_register); ++ ++static inline void __asic3_write_register(struct asic3_data *asic, ++ unsigned int reg, u32 value) ++{ ++ __raw_writew(value, (unsigned long)asic->mapping ++ + (reg >> (2 - asic->bus_shift))); ++} ++ ++static inline u32 __asic3_read_register(struct asic3_data *asic, ++ unsigned int reg) ++{ ++ return __raw_readw((unsigned long)asic->mapping ++ + (reg >> (2 - asic->bus_shift))); ++} ++ ++#define ASIC3_GPIO_FN(get_fn_name, set_fn_name, REG) \ ++u32 get_fn_name(struct device *dev) \ ++{ \ ++ return asic3_read_register(dev, REG); \ ++} \ ++EXPORT_SYMBOL(get_fn_name); \ ++ \ ++void set_fn_name(struct device *dev, u32 bits, u32 val) \ ++{ \ ++ unsigned long flags; \ ++ \ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); \ ++ val |= (asic3_read_register(dev, REG) & ~bits); \ ++ asic3_write_register(dev, REG, val); \ ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); \ ++} \ ++EXPORT_SYMBOL(set_fn_name); ++ ++#define ASIC3_GPIO_REGISTER(ACTION, action, fn, FN) \ ++ ASIC3_GPIO_FN(asic3_get_gpio_ ## action ## _ ## fn , \ ++ asic3_set_gpio_ ## action ## _ ## fn , \ ++ _IPAQ_ASIC3_GPIO_ ## FN ## _Base \ ++ + _IPAQ_ASIC3_GPIO_ ## ACTION ) ++ ++#define ASIC3_GPIO_FUNCTIONS(fn, FN) \ ++ ASIC3_GPIO_REGISTER(Direction, dir, fn, FN) \ ++ ASIC3_GPIO_REGISTER(Out, out, fn, FN) \ ++ ASIC3_GPIO_REGISTER(SleepMask, sleepmask, fn, FN) \ ++ ASIC3_GPIO_REGISTER(SleepOut, sleepout, fn, FN) \ ++ ASIC3_GPIO_REGISTER(BattFaultOut, battfaultout, fn, FN) \ ++ ASIC3_GPIO_REGISTER(AltFunction, alt_fn, fn, FN) \ ++ ASIC3_GPIO_REGISTER(SleepConf, sleepconf, fn, FN) \ ++ ASIC3_GPIO_REGISTER(Status, status, fn, FN) ++ ++#if 0 ++ ASIC3_GPIO_REGISTER(Mask, mask, fn, FN) ++ ASIC3_GPIO_REGISTER(TriggerType, trigtype, fn, FN) ++ ASIC3_GPIO_REGISTER(EdgeTrigger, rising, fn, FN) ++ ASIC3_GPIO_REGISTER(LevelTrigger, triglevel, fn, FN) ++ ASIC3_GPIO_REGISTER(IntStatus, intstatus, fn, FN) ++#endif ++ ++ASIC3_GPIO_FUNCTIONS(a, A) ++ASIC3_GPIO_FUNCTIONS(b, B) ++ASIC3_GPIO_FUNCTIONS(c, C) ++ASIC3_GPIO_FUNCTIONS(d, D) ++ ++int asic3_gpio_get_value(struct device *dev, unsigned gpio) ++{ ++ u32 mask = ASIC3_GPIO_bit(gpio); ++ printk("%s(%d)\n", __FUNCTION__, gpio); ++ switch (gpio >> 4) { ++ case _IPAQ_ASIC3_GPIO_BANK_A: ++ return asic3_get_gpio_status_a(dev) & mask; ++ case _IPAQ_ASIC3_GPIO_BANK_B: ++ return asic3_get_gpio_status_b(dev) & mask; ++ case _IPAQ_ASIC3_GPIO_BANK_C: ++ return asic3_get_gpio_status_c(dev) & mask; ++ case _IPAQ_ASIC3_GPIO_BANK_D: ++ return asic3_get_gpio_status_d(dev) & mask; ++ } ++ ++ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio); ++ return 0; ++} ++EXPORT_SYMBOL(asic3_gpio_get_value); ++ ++void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val) ++{ ++ u32 mask = ASIC3_GPIO_bit(gpio); ++ u32 bitval = 0; ++ if (val) bitval = mask; ++ printk("%s(%d, %d)\n", __FUNCTION__, gpio, val); ++ ++ switch (gpio >> 4) { ++ case _IPAQ_ASIC3_GPIO_BANK_A: ++ asic3_set_gpio_out_a(dev, mask, bitval); ++ return; ++ case _IPAQ_ASIC3_GPIO_BANK_B: ++ asic3_set_gpio_out_b(dev, mask, bitval); ++ return; ++ case _IPAQ_ASIC3_GPIO_BANK_C: ++ asic3_set_gpio_out_c(dev, mask, bitval); ++ return; ++ case _IPAQ_ASIC3_GPIO_BANK_D: ++ asic3_set_gpio_out_d(dev, mask, bitval); ++ return; ++ } ++ ++ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio); ++} ++EXPORT_SYMBOL(asic3_gpio_set_value); ++ ++int asic3_irq_base(struct device *dev) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ ++ return asic->irq_base; ++} ++EXPORT_SYMBOL(asic3_irq_base); ++ ++static int asic3_gpio_to_irq(struct device *dev, unsigned gpio) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ printk("%s(%d)\n", __FUNCTION__, gpio); ++ ++ return asic->irq_base + gpio; ++} ++ ++void asic3_set_led(struct device *dev, int led_num, int duty_time, ++ int cycle_time, int timebase) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ unsigned int led_base; ++ ++ /* it's a macro thing: see #define _IPAQ_ASIC_LED_0_Base for why you ++ * can't substitute led_num in the macros below... ++ */ ++ ++ switch (led_num) { ++ case 0: ++ led_base = _IPAQ_ASIC3_LED_0_Base; ++ break; ++ case 1: ++ led_base = _IPAQ_ASIC3_LED_1_Base; ++ break; ++ case 2: ++ led_base = _IPAQ_ASIC3_LED_2_Base; ++ break; ++ default: ++ printk(KERN_ERR "%s: invalid led number %d", __FUNCTION__, ++ led_num); ++ return; ++ } ++ ++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_TimeBase, ++ timebase | LED_EN); ++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_PeriodTime, ++ cycle_time); ++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime, ++ 0); ++ udelay(20); /* asic voodoo - possibly need a whole duty cycle? */ ++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime, ++ duty_time); ++} ++EXPORT_SYMBOL(asic3_set_led); ++ ++void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ unsigned long flags; ++ u32 v; ++ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); ++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL)); ++ v = (v & ~bits) | val; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), v); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++EXPORT_SYMBOL(asic3_set_clock_sel); ++ ++void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ unsigned long flags; ++ u32 v; ++ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); ++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX)); ++ v = (v & ~bits) | val; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), v); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++EXPORT_SYMBOL(asic3_set_clock_cdex); ++ ++static void asic3_clock_cdex_enable(struct clk *clk) ++{ ++ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit; ++ unsigned long flags, val; ++ ++ local_irq_save(flags); ++ ++ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX)); ++ val |= clk->ctrlbit; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val); ++ ++ local_irq_restore(flags); ++} ++ ++static void asic3_clock_cdex_disable(struct clk *clk) ++{ ++ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit; ++ unsigned long flags, val; ++ ++ local_irq_save(flags); ++ ++ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX)); ++ val &= ~clk->ctrlbit; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val); ++ ++ local_irq_restore(flags); ++} ++ ++/* base clocks */ ++ ++static struct clk clk_g = { ++ .name = "gclk", ++ .rate = 0, ++ .parent = NULL, ++}; ++ ++/* clock definitions */ ++ ++static struct clk asic3_clocks[] = { ++ { ++ .name = "spi", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_SPI, ++ }, ++#ifdef CONFIG_HTC_ASIC3_DS1WM ++ { ++ .name = "ds1wm", ++ .id = -1, ++ .rate = 5000000, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_OWM, ++ }, ++#endif ++ { ++ .name = "pwm0", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_PWM0, ++ }, ++ { ++ .name = "pwm1", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_PWM1, ++ }, ++ { ++ .name = "led0", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_LED0, ++ }, ++ { ++ .name = "led1", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_LED1, ++ }, ++ { ++ .name = "led2", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_LED2, ++ }, ++ { ++ .name = "smbus", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_SMBUS, ++ }, ++ { ++ .name = "ex0", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_EX0, ++ }, ++ { ++ .name = "ex1", ++ .id = -1, ++ .parent = &clk_g, ++ .enable = asic3_clock_cdex_enable, ++ .disable = asic3_clock_cdex_disable, ++ .ctrlbit = CLOCK_CDEX_EX1, ++ }, ++}; ++ ++void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ unsigned long flags; ++ u32 v; ++ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); ++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select)); ++ v = (v & ~bits) | val; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select), v); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++EXPORT_SYMBOL(asic3_set_extcf_select); ++ ++void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ unsigned long flags; ++ u32 v; ++ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); ++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset)); ++ v = (v & ~bits) | val; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset), v); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++EXPORT_SYMBOL(asic3_set_extcf_reset); ++ ++void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ unsigned long flags; ++ u32 v; ++ ++ spin_lock_irqsave (&asic3_gpio_lock, flags); ++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf)); ++ v = (v & ~bits) | val; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf), v); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++EXPORT_SYMBOL(asic3_set_sdhwctrl); ++ ++ ++#define MAX_ASIC_ISR_LOOPS 20 ++#define _IPAQ_ASIC3_GPIO_Base_INCR \ ++ (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base) ++ ++static inline void asic3_irq_flip_edge(struct asic3_data *asic, ++ u32 base, int bit) ++{ ++ u16 edge = __asic3_read_register(asic, ++ base + _IPAQ_ASIC3_GPIO_EdgeTrigger); ++ edge ^= bit; ++ __asic3_write_register(asic, ++ base + _IPAQ_ASIC3_GPIO_EdgeTrigger, edge); ++} ++ ++static void asic3_irq_demux(unsigned int irq, struct irq_desc *desc) ++{ ++ int iter; ++ struct asic3_data *asic; ++ ++ /* Acknowledge the parrent (i.e. CPU's) IRQ */ ++ desc->chip->ack(irq); ++ ++ asic = desc->handler_data; ++ ++ /* printk( KERN_NOTICE "asic3_irq_demux: irq=%d\n", irq ); */ ++ for (iter = 0 ; iter < MAX_ASIC_ISR_LOOPS; iter++) { ++ u32 status; ++ int bank; ++ ++ status = __asic3_read_register(asic, ++ IPAQ_ASIC3_OFFSET(INTR, PIntStat)); ++ /* Check all ten register bits */ ++ if ((status & 0x3ff) == 0) ++ break; ++ ++ /* Handle GPIO IRQs */ ++ for (bank = 0; bank < 4; bank++) { ++ if (status & (1 << bank)) { ++ unsigned long base, i, istat; ++ ++ base = _IPAQ_ASIC3_GPIO_A_Base ++ + bank * _IPAQ_ASIC3_GPIO_Base_INCR; ++ istat = __asic3_read_register(asic, ++ base + _IPAQ_ASIC3_GPIO_IntStatus); ++ /* IntStatus is write 0 to clear */ ++ /* XXX could miss interrupts! */ ++ __asic3_write_register(asic, ++ base + _IPAQ_ASIC3_GPIO_IntStatus, 0); ++ ++ for (i = 0; i < 16; i++) { ++ int bit = (1 << i); ++ unsigned int irqnr; ++ if (!(istat & bit)) ++ continue; ++ ++ irqnr = asic->irq_base ++ + (16 * bank) + i; ++ desc = irq_desc + irqnr; ++ desc->handle_irq(irqnr, desc); ++ if (asic->irq_bothedge[bank] & bit) { ++ asic3_irq_flip_edge(asic, base, ++ bit); ++ } ++ } ++ } ++ } ++ ++ /* Handle remaining IRQs in the status register */ ++ { ++ int i; ++ ++ for (i = ASIC3_LED0_IRQ; i <= ASIC3_OWM_IRQ; i++) { ++ /* They start at bit 4 and go up */ ++ if (status & (1 << (i - ASIC3_LED0_IRQ + 4))) { ++ desc = irq_desc + asic->irq_base + i; ++ desc->handle_irq(asic->irq_base + i, ++ desc); ++ } ++ } ++ } ++ ++ } ++ ++ if (iter >= MAX_ASIC_ISR_LOOPS) ++ printk(KERN_ERR "%s: interrupt processing overrun\n", ++ __FUNCTION__); ++} ++ ++static inline int asic3_irq_to_bank(struct asic3_data *asic, int irq) ++{ ++ int n; ++ ++ n = (irq - asic->irq_base) >> 4; ++ ++ return (n * (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base)); ++} ++ ++static inline int asic3_irq_to_index(struct asic3_data *asic, int irq) ++{ ++ return (irq - asic->irq_base) & 15; ++} ++ ++static void asic3_mask_gpio_irq(unsigned int irq) ++{ ++ struct asic3_data *asic = get_irq_chip_data(irq); ++ u32 val, bank, index; ++ unsigned long flags; ++ ++ bank = asic3_irq_to_bank(asic, irq); ++ index = asic3_irq_to_index(asic, irq); ++ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); ++ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask); ++ val |= 1 << index; ++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++ ++static void asic3_mask_irq(unsigned int irq) ++{ ++ struct asic3_data *asic = get_irq_chip_data(irq); ++ int regval; ++ ++ if (irq < ASIC3_NR_GPIO_IRQS) { ++ printk(KERN_ERR "asic3_base: gpio mask attempt, irq %d\n", ++ irq); ++ return; ++ } ++ ++ regval = __asic3_read_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask); ++ ++ switch (irq - asic->irq_base) { ++ case ASIC3_LED0_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval & ~ASIC3_INTMASK_MASK0); ++ break; ++ case ASIC3_LED1_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval & ~ASIC3_INTMASK_MASK1); ++ break; ++ case ASIC3_LED2_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval & ~ASIC3_INTMASK_MASK2); ++ break; ++ case ASIC3_SPI_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval & ~ASIC3_INTMASK_MASK3); ++ break; ++ case ASIC3_SMBUS_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval & ~ASIC3_INTMASK_MASK4); ++ break; ++ case ASIC3_OWM_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval & ~ASIC3_INTMASK_MASK5); ++ break; ++ default: ++ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq); ++ break; ++ } ++} ++ ++static void asic3_unmask_gpio_irq(unsigned int irq) ++{ ++ struct asic3_data *asic = get_irq_chip_data(irq); ++ u32 val, bank, index; ++ unsigned long flags; ++ ++ bank = asic3_irq_to_bank(asic, irq); ++ index = asic3_irq_to_index(asic, irq); ++ ++ spin_lock_irqsave(&asic3_gpio_lock, flags); ++ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask); ++ val &= ~(1 << index); ++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++} ++ ++static void asic3_unmask_irq(unsigned int irq) ++{ ++ struct asic3_data *asic = get_irq_chip_data(irq); ++ int regval; ++ ++ if (irq < ASIC3_NR_GPIO_IRQS) { ++ printk(KERN_ERR "asic3_base: gpio unmask attempt, irq %d\n", ++ irq); ++ return; ++ } ++ ++ regval = __asic3_read_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask); ++ ++ switch (irq - asic->irq_base) { ++ case ASIC3_LED0_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval | ASIC3_INTMASK_MASK0); ++ break; ++ case ASIC3_LED1_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval | ASIC3_INTMASK_MASK1); ++ break; ++ case ASIC3_LED2_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval | ASIC3_INTMASK_MASK2); ++ break; ++ case ASIC3_SPI_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval | ASIC3_INTMASK_MASK3); ++ break; ++ case ASIC3_SMBUS_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval | ASIC3_INTMASK_MASK4); ++ break; ++ case ASIC3_OWM_IRQ: ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, ++ regval | ASIC3_INTMASK_MASK5); ++ break; ++ default: ++ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq); ++ break; ++ } ++} ++ ++static int asic3_gpio_irq_type(unsigned int irq, unsigned int type) ++{ ++ struct asic3_data *asic = get_irq_chip_data(irq); ++ u32 bank, index; ++ unsigned long flags; ++ u16 trigger, level, edge, bit; ++ ++ bank = asic3_irq_to_bank(asic, irq); ++ index = asic3_irq_to_index(asic, irq); ++ bit = 1<irq_bothedge[(irq - asic->irq_base) >> 4] &= ~bit; ++ ++ if (type == IRQT_RISING) { ++ trigger |= bit; ++ edge |= bit; ++ } else if (type == IRQT_FALLING) { ++ trigger |= bit; ++ edge &= ~bit; ++ } else if (type == IRQT_BOTHEDGE) { ++ trigger |= bit; ++ if (asic3_gpio_get_value(asic->dev, irq - asic->irq_base)) ++ edge &= ~bit; ++ else ++ edge |= bit; ++ asic->irq_bothedge[(irq - asic->irq_base) >> 4] |= bit; ++ } else if (type == IRQT_LOW) { ++ trigger &= ~bit; ++ level &= ~bit; ++ } else if (type == IRQT_HIGH) { ++ trigger &= ~bit; ++ level |= bit; ++ } else { ++ /* ++ * if type == IRQT_NOEDGE, we should mask interrupts, but ++ * be careful to not unmask them if mask was also called. ++ * Probably need internal state for mask. ++ */ ++ printk(KERN_NOTICE "asic3: irq type not changed.\n"); ++ } ++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_LevelTrigger, ++ level); ++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_EdgeTrigger, ++ edge); ++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_TriggerType, ++ trigger); ++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); ++ return 0; ++} ++ ++static struct irq_chip asic3_gpio_irq_chip = { ++ .name = "ASIC3-GPIO", ++ .ack = asic3_mask_gpio_irq, ++ .mask = asic3_mask_gpio_irq, ++ .unmask = asic3_unmask_gpio_irq, ++ .set_type = asic3_gpio_irq_type, ++}; ++ ++static struct irq_chip asic3_irq_chip = { ++ .name = "ASIC3", ++ .ack = asic3_mask_irq, ++ .mask = asic3_mask_irq, ++ .unmask = asic3_unmask_irq, ++}; ++ ++static void asic3_release(struct device *dev) ++{ ++ struct platform_device *sdev = to_platform_device(dev); ++ ++ kfree(sdev->resource); ++ kfree(sdev); ++} ++ ++int asic3_register_mmc(struct device *dev) ++{ ++ struct platform_device *sdev = kzalloc(sizeof(*sdev), GFP_KERNEL); ++ struct tmio_mmc_hwconfig *mmc_config = kmalloc(sizeof(*mmc_config), ++ GFP_KERNEL); ++ struct platform_device *pdev = to_platform_device(dev); ++ struct asic3_data *asic = dev->driver_data; ++ struct asic3_platform_data *asic3_pdata = dev->platform_data; ++ struct resource *res; ++ int rc; ++ ++ if (sdev == NULL || mmc_config == NULL) ++ return -ENOMEM; ++ ++ if (asic3_pdata->tmio_mmc_hwconfig) { ++ memcpy(mmc_config, asic3_pdata->tmio_mmc_hwconfig, ++ sizeof(*mmc_config)); ++ } else { ++ memset(mmc_config, 0, sizeof(*mmc_config)); ++ } ++ mmc_config->address_shift = asic->bus_shift; ++ ++ sdev->id = -1; ++ sdev->name = "asic3_mmc"; ++ sdev->dev.parent = dev; ++ sdev->num_resources = 2; ++ sdev->dev.platform_data = mmc_config; ++ sdev->dev.release = asic3_release; ++ ++ res = kzalloc(sdev->num_resources * sizeof(struct resource), ++ GFP_KERNEL); ++ if (res == NULL) { ++ kfree(sdev); ++ kfree(mmc_config); ++ return -ENOMEM; ++ } ++ sdev->resource = res; ++ ++ res[0].start = pdev->resource[2].start; ++ res[0].end = pdev->resource[2].end; ++ res[0].flags = IORESOURCE_MEM; ++ res[1].start = res[1].end = pdev->resource[3].start; ++ res[1].flags = IORESOURCE_IRQ; ++ ++ rc = platform_device_register(sdev); ++ if (rc) { ++ printk(KERN_ERR "asic3_base: " ++ "Could not register asic3_mmc device\n"); ++ kfree(res); ++ kfree(sdev); ++ return rc; ++ } ++ ++ asic->mmc_dev = sdev; ++ ++ return 0; ++} ++EXPORT_SYMBOL(asic3_register_mmc); ++ ++int asic3_unregister_mmc(struct device *dev) ++{ ++ struct asic3_data *asic = dev->driver_data; ++ platform_device_unregister(asic->mmc_dev); ++ asic->mmc_dev = 0; ++ ++ return 0; ++} ++EXPORT_SYMBOL(asic3_unregister_mmc); ++ ++#ifdef CONFIG_HTC_ASIC3_DS1WM ++/* ++ * DS1WM subdevice ++ */ ++ ++static void asic3_ds1wm_enable(struct platform_device *ds1wm_dev) ++{ ++ struct device *dev = ds1wm_dev->dev.parent; ++ ++ /* Turn on external clocks and the OWM clock */ ++ asic3_set_clock_cdex(dev, ++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM, ++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM); ++ ++ mdelay(1); ++ ++ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET, ++ ASIC3_EXTCF_OWM_RESET); ++ mdelay(1); ++ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET, 0); ++ mdelay(1); ++ ++ /* Clear OWM_SMB, set OWM_EN */ ++ asic3_set_extcf_select(dev, ++ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN, ++ 0 | ASIC3_EXTCF_OWM_EN); ++ ++ mdelay(1); ++} ++ ++static void asic3_ds1wm_disable(struct platform_device *ds1wm_dev) ++{ ++ struct device *dev = ds1wm_dev->dev.parent; ++ ++ asic3_set_extcf_select(dev, ++ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN, ++ 0 | 0); ++ ++ asic3_set_clock_cdex(dev, ++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM, ++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | 0); ++} ++ ++ ++static struct resource asic3_ds1wm_resources[] = { ++ { ++ .start = _IPAQ_ASIC3_OWM_Base, ++ .end = _IPAQ_ASIC3_OWM_Base + 0x14 - 1, ++ .flags = IORESOURCE_MEM, ++ }, ++ { ++ .start = ASIC3_OWM_IRQ, ++ .end = ASIC3_OWM_IRQ, ++ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | ++ IORESOURCE_IRQ_SOC_SUBDEVICE, ++ }, ++}; ++ ++static struct ds1wm_platform_data ds1wm_pd = { ++ .enable = asic3_ds1wm_enable, ++ .disable = asic3_ds1wm_disable, ++}; ++#endif ++ ++static struct soc_device_data asic3_blocks[] = { ++#ifdef CONFIG_HTC_ASIC3_DS1WM ++ { ++ .name = "ds1wm", ++ .res = asic3_ds1wm_resources, ++ .num_resources = ARRAY_SIZE(asic3_ds1wm_resources), ++ .hwconfig = &ds1wm_pd, ++ }, ++#endif ++}; ++ ++static int asic3_probe(struct platform_device *pdev) ++{ ++ struct asic3_platform_data *pdata = pdev->dev.platform_data; ++ struct asic3_data *asic; ++ struct device *dev = &pdev->dev; ++ unsigned long clksel; ++ int i, rc; ++ ++ asic = kzalloc(sizeof(struct asic3_data), GFP_KERNEL); ++ if (!asic) ++ return -ENOMEM; ++ ++ platform_set_drvdata(pdev, asic); ++ asic->dev = &pdev->dev; ++ ++ asic->mapping = ioremap(pdev->resource[0].start, IPAQ_ASIC3_MAP_SIZE); ++ if (!asic->mapping) { ++ printk(KERN_ERR "asic3: couldn't ioremap ASIC3\n"); ++ kfree (asic); ++ return -ENOMEM; ++ } ++ ++ if (pdata && pdata->bus_shift) ++ asic->bus_shift = pdata->bus_shift; ++ else ++ asic->bus_shift = 2; ++ ++ /* XXX: should get correct SD clock values from pdata struct */ ++ clksel = 0; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), clksel); ++ ++ /* Register ASIC3's clocks. */ ++ clk_g.ctrlbit = (int)asic; ++ ++ if (clk_register(&clk_g) < 0) ++ printk(KERN_ERR "asic3: failed to register ASIC3 gclk\n"); ++ ++ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++) { ++ rc = clk_register(&asic3_clocks[i]); ++ if (rc < 0) ++ printk(KERN_ERR "asic3: " ++ "failed to register clock %s (%d)\n", ++ asic3_clocks[i].name, rc); ++ } ++ ++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(A, Mask), 0xffff); ++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(B, Mask), 0xffff); ++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(C, Mask), 0xffff); ++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(D, Mask), 0xffff); ++ ++ asic3_set_gpio_sleepmask_a(dev, 0xffff, 0xffff); ++ asic3_set_gpio_sleepmask_b(dev, 0xffff, 0xffff); ++ asic3_set_gpio_sleepmask_c(dev, 0xffff, 0xffff); ++ asic3_set_gpio_sleepmask_d(dev, 0xffff, 0xffff); ++ ++ if (pdata) { ++ asic3_set_gpio_out_a(dev, 0xffff, pdata->gpio_a.init); ++ asic3_set_gpio_out_b(dev, 0xffff, pdata->gpio_b.init); ++ asic3_set_gpio_out_c(dev, 0xffff, pdata->gpio_c.init); ++ asic3_set_gpio_out_d(dev, 0xffff, pdata->gpio_d.init); ++ ++ asic3_set_gpio_dir_a(dev, 0xffff, pdata->gpio_a.dir); ++ asic3_set_gpio_dir_b(dev, 0xffff, pdata->gpio_b.dir); ++ asic3_set_gpio_dir_c(dev, 0xffff, pdata->gpio_c.dir); ++ asic3_set_gpio_dir_d(dev, 0xffff, pdata->gpio_d.dir); ++ ++ asic3_set_gpio_sleepmask_a(dev, 0xffff, ++ pdata->gpio_a.sleep_mask); ++ asic3_set_gpio_sleepmask_b(dev, 0xffff, ++ pdata->gpio_b.sleep_mask); ++ asic3_set_gpio_sleepmask_c(dev, 0xffff, ++ pdata->gpio_c.sleep_mask); ++ asic3_set_gpio_sleepmask_d(dev, 0xffff, ++ pdata->gpio_d.sleep_mask); ++ ++ asic3_set_gpio_sleepout_a(dev, 0xffff, ++ pdata->gpio_a.sleep_out); ++ asic3_set_gpio_sleepout_b(dev, 0xffff, ++ pdata->gpio_b.sleep_out); ++ asic3_set_gpio_sleepout_c(dev, 0xffff, ++ pdata->gpio_c.sleep_out); ++ asic3_set_gpio_sleepout_d(dev, 0xffff, ++ pdata->gpio_d.sleep_out); ++ ++ asic3_set_gpio_battfaultout_a(dev, 0xffff, ++ pdata->gpio_a.batt_fault_out); ++ asic3_set_gpio_battfaultout_b(dev, 0xffff, ++ pdata->gpio_b.batt_fault_out); ++ asic3_set_gpio_battfaultout_c(dev, 0xffff, ++ pdata->gpio_c.batt_fault_out); ++ asic3_set_gpio_battfaultout_d(dev, 0xffff, ++ pdata->gpio_d.batt_fault_out); ++ ++ asic3_set_gpio_sleepconf_a(dev, 0xffff, ++ pdata->gpio_a.sleep_conf); ++ asic3_set_gpio_sleepconf_b(dev, 0xffff, ++ pdata->gpio_b.sleep_conf); ++ asic3_set_gpio_sleepconf_c(dev, 0xffff, ++ pdata->gpio_c.sleep_conf); ++ asic3_set_gpio_sleepconf_d(dev, 0xffff, ++ pdata->gpio_d.sleep_conf); ++ ++ asic3_set_gpio_alt_fn_a(dev, 0xffff, ++ pdata->gpio_a.alt_function); ++ asic3_set_gpio_alt_fn_b(dev, 0xffff, ++ pdata->gpio_b.alt_function); ++ asic3_set_gpio_alt_fn_c(dev, 0xffff, ++ pdata->gpio_c.alt_function); ++ asic3_set_gpio_alt_fn_d(dev, 0xffff, ++ pdata->gpio_d.alt_function); ++ } ++ ++ asic->irq_nr = -1; ++ asic->irq_base = -1; ++ ++ if (pdev->num_resources > 1) ++ asic->irq_nr = pdev->resource[1].start; ++ ++ if (asic->irq_nr != -1) { ++ unsigned int i; ++ ++ if (!pdata->irq_base) { ++ printk(KERN_ERR "asic3: IRQ base not specified\n"); ++ asic3_remove(pdev); ++ return -EINVAL; ++ } ++ ++ asic->irq_base = pdata->irq_base; ++ ++ /* turn on clock to IRQ controller */ ++ clksel |= CLOCK_SEL_CX; ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), ++ clksel); ++ ++ printk(KERN_INFO "asic3: using irq %d-%d on irq %d\n", ++ asic->irq_base, asic->irq_base + ASIC3_NR_IRQS - 1, ++ asic->irq_nr); ++ ++ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) { ++ int irq = i + asic->irq_base; ++ if (i < ASIC3_NR_GPIO_IRQS) { ++ set_irq_chip(irq, &asic3_gpio_irq_chip); ++ set_irq_chip_data(irq, asic); ++ set_irq_handler(irq, handle_level_irq); ++ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); ++ } else { ++ /* The remaining IRQs are not GPIO */ ++ set_irq_chip(irq, &asic3_irq_chip); ++ set_irq_chip_data(irq, asic); ++ set_irq_handler(irq, handle_level_irq); ++ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); ++ } ++ } ++ ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), ++ ASIC3_INTMASK_GINTMASK); ++ ++ set_irq_chained_handler(asic->irq_nr, asic3_irq_demux); ++ set_irq_type(asic->irq_nr, IRQT_RISING); ++ set_irq_data(asic->irq_nr, asic); ++ } ++ ++#ifdef CONFIG_HTC_ASIC3_DS1WM ++ ds1wm_pd.bus_shift = asic->bus_shift; ++#endif ++ ++ pdata->gpiodev_ops.get = asic3_gpio_get_value; ++ pdata->gpiodev_ops.set = asic3_gpio_set_value; ++ pdata->gpiodev_ops.to_irq = asic3_gpio_to_irq; ++ ++ soc_add_devices(pdev, asic3_blocks, ARRAY_SIZE(asic3_blocks), ++ &pdev->resource[0], ++ asic->bus_shift - ASIC3_DEFAULT_ADDR_SHIFT, ++ asic->irq_base); ++ ++ if (pdev->num_resources > 2) { ++ int rc; ++ rc = asic3_register_mmc(dev); ++ if (rc) { ++ asic3_remove(pdev); ++ return rc; ++ } ++ } ++ ++ if (pdata && pdata->num_child_platform_devs != 0) ++ platform_add_devices(pdata->child_platform_devs, ++ pdata->num_child_platform_devs); ++ ++ return 0; ++} ++ ++static int asic3_remove(struct platform_device *pdev) ++{ ++ struct asic3_platform_data *pdata = pdev->dev.platform_data; ++ struct asic3_data *asic = platform_get_drvdata(pdev); ++ int i; ++ ++ if (pdata && pdata->num_child_platform_devs != 0) { ++ for (i = 0; i < pdata->num_child_platform_devs; i++) { ++ platform_device_unregister( ++ pdata->child_platform_devs[i]); ++ } ++ } ++ ++ if (asic->irq_nr != -1) { ++ unsigned int i; ++ ++ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) { ++ int irq = i + asic->irq_base; ++ set_irq_flags(irq, 0); ++ set_irq_handler (irq, NULL); ++ set_irq_chip (irq, NULL); ++ set_irq_chip_data(irq, NULL); ++ } ++ ++ set_irq_chained_handler(asic->irq_nr, NULL); ++ } ++ ++ if (asic->mmc_dev) ++ asic3_unregister_mmc(&pdev->dev); ++ ++ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++) ++ clk_unregister(&asic3_clocks[i]); ++ clk_unregister(&clk_g); ++ ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), 0); ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), 0); ++ ++ iounmap(asic->mapping); ++ ++ kfree(asic); ++ ++ return 0; ++} ++ ++static void asic3_shutdown(struct platform_device *pdev) ++{ ++} ++ ++#define ASIC3_SUSPEND_CDEX_MASK \ ++ (CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2) ++static unsigned short suspend_cdex; ++ ++static int asic3_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct asic3_data *asic = platform_get_drvdata(pdev); ++ suspend_cdex = __asic3_read_register(asic, ++ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX); ++ /* The LEDs are still active during suspend */ ++ __asic3_write_register(asic, ++ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX, ++ suspend_cdex & ASIC3_SUSPEND_CDEX_MASK); ++ return 0; ++} ++ ++static int asic3_resume(struct platform_device *pdev) ++{ ++ struct asic3_data *asic = platform_get_drvdata(pdev); ++ unsigned short intmask; ++ ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), ++ suspend_cdex); ++ ++ if (asic->irq_nr != -1) { ++ /* Toggle the interrupt mask to try to get ASIC3 to show ++ * the CPU an interrupt edge. For more details see the ++ * kernel-discuss thread around 13 June 2005 with the ++ * subject "asic3 suspend / resume". */ ++ intmask = __asic3_read_register(asic, ++ IPAQ_ASIC3_OFFSET(INTR, IntMask)); ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), ++ intmask & ~ASIC3_INTMASK_GINTMASK); ++ mdelay(1); ++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), ++ intmask | ASIC3_INTMASK_GINTMASK); ++ } ++ ++ return 0; ++} ++ ++static struct platform_driver asic3_device_driver = { ++ .driver = { ++ .name = "asic3", ++ }, ++ .probe = asic3_probe, ++ .remove = asic3_remove, ++ .suspend = asic3_suspend, ++ .resume = asic3_resume, ++ .shutdown = asic3_shutdown, ++}; ++ ++static int __init asic3_base_init(void) ++{ ++ int retval = 0; ++ retval = platform_driver_register(&asic3_device_driver); ++ return retval; ++} ++ ++static void __exit asic3_base_exit(void) ++{ ++ platform_driver_unregister(&asic3_device_driver); ++} ++ ++#ifdef MODULE ++module_init(asic3_base_init); ++#else /* start early for dependencies */ ++subsys_initcall(asic3_base_init); ++#endif ++module_exit(asic3_base_exit); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Phil Blundell "); ++MODULE_DESCRIPTION("Core driver for HTC ASIC3"); ++MODULE_SUPPORTED_DEVICE("asic3"); +Index: linux-2.6.26-rc4/drivers/mfd/soc-core.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/drivers/mfd/soc-core.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,106 @@ ++/* ++ * drivers/soc/soc-core.c ++ * ++ * core SoC support ++ * Copyright (c) 2006 Ian Molton ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This file contains functionality used by many SoC type devices. ++ * ++ * Created: 2006-11-28 ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include "soc-core.h" ++ ++void soc_free_devices(struct platform_device *devices, int nr_devs) ++{ ++ struct platform_device *dev = devices; ++ int i; ++ ++ for (i = 0; i < nr_devs; i++) { ++ struct resource *res = dev->resource; ++ platform_device_unregister(dev++); ++ kfree(res); ++ } ++ kfree(devices); ++} ++EXPORT_SYMBOL_GPL(soc_free_devices); ++ ++#define SIGNED_SHIFT(val, shift) ((shift) >= 0 ? ((val) << (shift)) : ((val) >> -(shift))) ++ ++struct platform_device *soc_add_devices(struct platform_device *dev, ++ struct soc_device_data *soc, int nr_devs, ++ struct resource *mem, ++ int relative_addr_shift, int irq_base) ++{ ++ struct platform_device *devices; ++ int i, r, base; ++ ++ devices = kzalloc(nr_devs * sizeof(struct platform_device), GFP_KERNEL); ++ if (!devices) ++ return NULL; ++ ++ for (i = 0; i < nr_devs; i++) { ++ struct platform_device *sdev = &devices[i]; ++ struct soc_device_data *blk = &soc[i]; ++ struct resource *res; ++ ++ sdev->id = -1; ++ sdev->name = blk->name; ++ ++ sdev->dev.parent = &dev->dev; ++ sdev->dev.platform_data = (void *)blk->hwconfig; ++ sdev->num_resources = blk->num_resources; ++ ++ /* Allocate space for the subdevice resources */ ++ res = kzalloc (blk->num_resources * sizeof (struct resource), GFP_KERNEL); ++ if (!res) ++ goto fail; ++ ++ for (r = 0 ; r < blk->num_resources ; r++) { ++ res[r].name = blk->res[r].name; // Fixme - should copy ++ ++ /* Find out base to use */ ++ base = 0; ++ if (blk->res[r].flags & IORESOURCE_MEM) { ++ base = mem->start; ++ } else if ((blk->res[r].flags & IORESOURCE_IRQ) && ++ (blk->res[r].flags & IORESOURCE_IRQ_SOC_SUBDEVICE)) { ++ base = irq_base; ++ } ++ ++ /* Adjust resource */ ++ if (blk->res[r].flags & IORESOURCE_MEM) { ++ res[r].parent = mem; ++ res[r].start = base + SIGNED_SHIFT(blk->res[r].start, relative_addr_shift); ++ res[r].end = base + SIGNED_SHIFT(blk->res[r].end, relative_addr_shift); ++ } else { ++ res[r].start = base + blk->res[r].start; ++ res[r].end = base + blk->res[r].end; ++ } ++ res[r].flags = blk->res[r].flags; ++ } ++ ++ sdev->resource = res; ++ if (platform_device_register(sdev)) { ++ kfree(res); ++ goto fail; ++ } ++ ++ printk(KERN_INFO "SoC: registering %s\n", blk->name); ++ } ++ return devices; ++ ++fail: ++ soc_free_devices(devices, i + 1); ++ return NULL; ++} ++EXPORT_SYMBOL_GPL(soc_add_devices); +Index: linux-2.6.26-rc4/drivers/mfd/soc-core.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/drivers/mfd/soc-core.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,30 @@ ++/* ++ * drivers/soc/soc-core.h ++ * ++ * core SoC support ++ * Copyright (c) 2006 Ian Molton ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This file contains prototypes for the functions in soc-core.c ++ * ++ * Created: 2006-11-28 ++ * ++ */ ++ ++struct soc_device_data { ++ char *name; ++ struct resource *res; ++ int num_resources; ++ void *hwconfig; /* platform_data to pass to the subdevice */ ++}; ++ ++struct platform_device *soc_add_devices(struct platform_device *dev, ++ struct soc_device_data *soc, int n_devs, ++ struct resource *mem, ++ int relative_addr_shift, int irq_base); ++ ++void soc_free_devices(struct platform_device *devices, int nr_devs); ++ +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/clock.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/clock.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,27 @@ ++/* ++ * linux/include/asm-arm/arch-pxa/clock.h ++ * ++ * Copyright (C) 2006 Erik Hovland ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++struct clk { ++ struct list_head node; ++ struct module *owner; ++ struct clk *parent; ++ const char *name; ++ int id; ++ unsigned int enabled; ++ unsigned long rate; ++ unsigned long ctrlbit; ++ ++ void (*enable)(struct clk *); ++ void (*disable)(struct clk *); ++}; ++ ++ ++extern int clk_register(struct clk *clk); ++extern void clk_unregister(struct clk *clk); +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal-asic.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal-asic.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,213 @@ ++/* ++ * include/asm/arm/arch-pxa/htcuniversal-asic.h ++ * ++ * Authors: Giuseppe Zompatori ++ * ++ * based on previews work, see below: ++ * ++ * include/asm/arm/arch-pxa/hx4700-asic.h ++ * Copyright (c) 2004 SDG Systems, LLC ++ * ++ */ ++ ++#ifndef _HTCUNIVERSAL_ASIC_H_ ++#define _HTCUNIVERSAL_ASIC_H_ ++ ++#include ++ ++/* ASIC3 */ ++ ++#define HTCUNIVERSAL_ASIC3_GPIO_PHYS PXA_CS4_PHYS ++#define HTCUNIVERSAL_ASIC3_MMC_PHYS PXA_CS3_PHYS ++ ++/* TODO: some information is missing here */ ++ ++/* ASIC3 GPIO A bank */ ++ ++#define GPIOA_I2C_EN 0 /* Output */ ++#define GPIOA_SPK_PWR1_ON 1 /* Output */ ++#define GPIOA_AUDIO_PWR_ON 2 /* Output */ ++#define GPIOA_EARPHONE_PWR_ON 3 /* Output */ ++ ++#define GPIOA_UNKNOWN4 4 /* Output */ ++#define GPIOA_BUTTON_BACKLIGHT_N 5 /* Input */ ++#define GPIOA_SPK_PWR2_ON 6 /* Output */ ++#define GPIOA_BUTTON_RECORD_N 7 /* Input */ ++ ++#define GPIOA_BUTTON_CAMERA_N 8 /* Input */ ++#define GPIOA_UNKNOWN9 9 /* Output */ ++#define GPIOA_FLASHLIGHT 10 /* Output */ ++#define GPIOA_COVER_ROTATE_N 11 /* Input */ ++ ++#define GPIOA_TOUCHSCREEN_N 12 /* Input */ ++#define GPIOA_VOL_UP_N 13 /* Input */ ++#define GPIOA_VOL_DOWN_N 14 /* Input */ ++#define GPIOA_LCD_PWR5_ON 15 /* Output */ ++ ++/* ASIC3 GPIO B bank */ ++ ++#define GPIOB_BB_READY 0 /* Input */ ++#define GPIOB_CODEC_PDN 1 /* Output */ ++#define GPIOB_UNKNOWN2 2 /* Input */ ++#define GPIOB_BB_UNKNOWN3 3 /* Input */ ++ ++#define GPIOB_BT_IRQ 4 /* Input */ ++#define GPIOB_CLAMSHELL_N 5 /* Input */ ++#define GPIOB_LCD_PWR3_ON 6 /* Output */ ++#define GPIOB_BB_ALERT 7 /* Input */ ++ ++#define GPIOB_BB_RESET2 8 /* Output */ ++#define GPIOB_EARPHONE_N 9 /* Input */ ++#define GPIOB_MICRECORD_N 10 /* Input */ ++#define GPIOB_NIGHT_SENSOR 11 /* Input */ ++ ++#define GPIOB_UMTS_DCD 12 /* Input */ ++#define GPIOB_UNKNOWN13 13 /* Input */ ++#define GPIOB_CHARGE_EN 14 /* Output */ ++#define GPIOB_USB_PUEN 15 /* Output */ ++ ++/* ASIC3 GPIO C bank */ ++ ++#define GPIOC_LED_BTWIFI 0 /* Output */ ++#define GPIOC_LED_RED 1 /* Output */ ++#define GPIOC_LED_GREEN 2 /* Output */ ++#define GPIOC_BOARDID3 3 /* Input */ ++ ++#define GPIOC_WIFI_IRQ_N 4 /* Input */ ++#define GPIOC_WIFI_RESET 5 /* Output */ ++#define GPIOC_WIFI_PWR1_ON 6 /* Output */ ++#define GPIOC_BT_RESET 7 /* Output */ ++ ++#define GPIOC_UNKNOWN8 8 /* Output */ ++#define GPIOC_LCD_PWR1_ON 9 /* Output */ ++#define GPIOC_LCD_PWR2_ON 10 /* Output */ ++#define GPIOC_BOARDID2 11 /* Input */ ++ ++#define GPIOC_BOARDID1 12 /* Input */ ++#define GPIOC_BOARDID0 13 /* Input */ ++#define GPIOC_BT_PWR_ON 14 /* Output */ ++#define GPIOC_CHARGE_ON 15 /* Output */ ++ ++/* ASIC3 GPIO D bank */ ++ ++#define GPIOD_KEY_OK_N 0 /* Input */ ++#define GPIOD_KEY_RIGHT_N 1 /* Input */ ++#define GPIOD_KEY_LEFT_N 2 /* Input */ ++#define GPIOD_KEY_DOWN_N 3 /* Input */ ++ ++#define GPIOD_KEY_UP_N 4 /* Input */ ++#define GPIOD_SDIO_DET 5 /* Input */ ++#define GPIOD_WIFI_PWR2_ON 6 /* Output */ ++#define GPIOD_HW_REBOOT 7 /* Output */ ++ ++#define GPIOD_BB_RESET1 8 /* Output */ ++#define GPIOD_UNKNOWN9 9 /* Output */ ++#define GPIOD_VIBRA_PWR_ON 10 /* Output */ ++#define GPIOD_WIFI_PWR3_ON 11 /* Output */ ++ ++#define GPIOD_FL_PWR_ON 12 /* Output */ ++#define GPIOD_LCD_PWR4_ON 13 /* Output */ ++#define GPIOD_BL_KEYP_PWR_ON 14 /* Output */ ++#define GPIOD_BL_KEYB_PWR_ON 15 /* Output */ ++ ++extern struct platform_device htcuniversal_asic3; ++ ++/* ASIC3 GPIO A bank */ ++ ++#define GPIO_I2C_EN 0*16+GPIOA_I2C_EN ++#define GPIO_SPK_PWR1_ON 0*16+GPIOA_SPK_PWR1_ON ++#define GPIO_AUDIO_PWR_ON 0*16+GPIOA_AUDIO_PWR_ON ++#define GPIO_EARPHONE_PWR_ON 0*16+GPIOA_EARPHONE_PWR_ON ++ ++#define GPIO_UNKNOWNA4 0*16+GPIOA_UNKNOWN4 ++#define GPIO_BUTTON_BACKLIGHT_N 0*16+GPIOA_BUTTON_BACKLIGHT_N ++#define GPIO_SPK_PWR2_ON 0*16+GPIOA_SPK_PWR2_ON ++#define GPIO_BUTTON_RECORD_N 0*16+GPIOA_BUTTON_RECORD_N ++ ++#define GPIO_BUTTON_CAMERA_N 0*16+GPIOA_BUTTON_CAMERA_N ++#define GPIO_UNKNOWNA9 0*16+GPIOA_UNKNOWN9 ++#define GPIO_FLASHLIGHT 0*16+GPIOA_FLASHLIGHT ++#define GPIO_COVER_ROTATE_N 0*16+GPIOA_COVER_ROTATE_N ++ ++#define GPIO_TOUCHSCREEN_N 0*16+GPIOA_TOUCHSCREEN_N ++#define GPIO_VOL_UP_N 0*16+GPIOA_VOL_UP_N ++#define GPIO_VOL_DOWN_N 0*16+GPIOA_VOL_DOWN_N ++#define GPIO_LCD_PWR5_ON 0*16+GPIOA_LCD_PWR5_ON ++ ++/* ASIC3 GPIO B bank */ ++ ++#define GPIO_BB_READY 1*16+GPIOB_BB_READY ++#define GPIO_CODEC_PDN 1*16+GPIOB_CODEC_PDN ++#define GPIO_UNKNOWNB2 1*16+GPIOB_UNKNOWN2 ++#define GPIO_BB_UNKNOWN3 1*16+GPIOB_BB_UNKNOWN3 ++ ++#define GPIO_BT_IRQ 1*16+GPIOB_BT_IRQ ++#define GPIO_CLAMSHELL_N 1*16+GPIOB_CLAMSHELL_N ++#define GPIO_LCD_PWR3_ON 1*16+GPIOB_LCD_PWR3_ON ++#define GPIO_BB_ALERT 1*16+GPIOB_BB_ALERT ++ ++#define GPIO_BB_RESET2 1*16+GPIOB_BB_RESET2 ++#define GPIO_EARPHONE_N 1*16+GPIOB_EARPHONE_N ++#define GPIO_MICRECORD_N 1*16+GPIOB_MICRECORD_N ++#define GPIO_NIGHT_SENSOR 1*16+GPIOB_NIGHT_SENSOR ++ ++#define GPIO_UMTS_DCD 1*16+GPIOB_UMTS_DCD ++#define GPIO_UNKNOWNB13 1*16+GPIOB_UNKNOWN13 ++#define GPIO_CHARGE_EN 1*16+GPIOB_CHARGE_EN ++#define GPIO_USB_PUEN 1*16+GPIOB_USB_PUEN ++ ++/* ASIC3 GPIO C bank */ ++ ++#define GPIO_LED_BTWIFI 2*16+GPIOC_LED_BTWIFI ++#define GPIO_LED_RED 2*16+GPIOC_LED_RED ++#define GPIO_LED_GREEN 2*16+GPIOC_LED_GREEN ++#define GPIO_BOARDID3 2*16+GPIOC_BOARDID3 ++ ++#define GPIO_WIFI_IRQ_N 2*16+GPIOC_WIFI_IRQ_N ++#define GPIO_WIFI_RESET 2*16+GPIOC_WIFI_RESET ++#define GPIO_WIFI_PWR1_ON 2*16+GPIOC_WIFI_PWR1_ON ++#define GPIO_BT_RESET 2*16+GPIOC_BT_RESET ++ ++#define GPIO_UNKNOWNC8 2*16+GPIOC_UNKNOWN8 ++#define GPIO_LCD_PWR1_ON 2*16+GPIOC_LCD_PWR1_ON ++#define GPIO_LCD_PWR2_ON 2*16+GPIOC_LCD_PWR2_ON ++#define GPIO_BOARDID2 2*16+GPIOC_BOARDID2 ++ ++#define GPIO_BOARDID1 2*16+GPIOC_BOARDID1 ++#define GPIO_BOARDID0 2*16+GPIOC_BOARDID0 ++#define GPIO_BT_PWR_ON 2*16+GPIOC_BT_PWR_ON ++#define GPIO_CHARGE_ON 2*16+GPIOC_CHARGE_ON ++ ++/* ASIC3 GPIO D bank */ ++ ++#define GPIO_KEY_OK_N 3*16+GPIOD_KEY_OK_N ++#define GPIO_KEY_RIGHT_N 3*16+GPIOD_KEY_RIGHT_N ++#define GPIO_KEY_LEFT_N 3*16+GPIOD_KEY_LEFT_N ++#define GPIO_KEY_DOWN_N 3*16+GPIOD_KEY_DOWN_N ++ ++#define GPIO_KEY_UP_N 3*16+GPIOD_KEY_UP_N ++#define GPIO_SDIO_DET 3*16+GPIOD_SDIO_DET ++#define GPIO_WIFI_PWR2_ON 3*16+GPIOD_WIFI_PWR2_ON ++#define GPIO_HW_REBOOT 3*16+GPIOD_HW_REBOOT ++ ++#define GPIO_BB_RESET1 3*16+GPIOD_BB_RESET1 ++#define GPIO_UNKNOWND9 3*16+GPIOD_UNKNOWN9 ++#define GPIO_VIBRA_PWR_ON 3*16+GPIOD_VIBRA_PWR_ON ++#define GPIO_WIFI_PWR3_ON 3*16+GPIOD_WIFI_PWR3_ON ++ ++#define GPIO_FL_PWR_ON 3*16+GPIOD_FL_PWR_ON ++#define GPIO_LCD_PWR4_ON 3*16+GPIOD_LCD_PWR4_ON ++#define GPIO_BL_KEYP_PWR_ON 3*16+GPIOD_BL_KEYP_PWR_ON ++#define GPIO_BL_KEYB_PWR_ON 3*16+GPIOD_BL_KEYB_PWR_ON ++ ++#define HTCUNIVERSAL_EGPIO_BASE PXA_CS2_PHYS+0x02000000 ++ ++#define EGPIO4_ON 4 /* something */ ++#define EGPIO5_BT_3V3_ON 5 /* Bluetooth related */ ++#define EGPIO6_WIFI_ON 6 /* WLAN related*/ ++ ++extern void htcuniversal_egpio_enable( u_int16_t bits ); ++extern void htcuniversal_egpio_disable( u_int16_t bits ); ++ ++#endif /* _HTCUNIVERSAL_ASIC_H_ */ ++ +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal-gpio.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,220 @@ ++/* ++ * include/asm-arm/arch-pxa/htcuniversal-gpio.h ++ * History: ++ * ++ * 2004-12-10 Michael Opdenacker. Wrote down GPIO settings as identified by Jamey Hicks. ++ * Reused the h2200-gpio.h file as a template. ++ */ ++ ++#ifndef _HTCUNIVERSAL_GPIO_H_ ++#define _HTCUNIVERSAL_GPIO_H_ ++ ++#include ++ ++#define GET_HTCUNIVERSAL_GPIO(gpio) \ ++ (GPLR(GPIO_NR_HTCUNIVERSAL_ ## gpio) & GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio)) ++ ++#define SET_HTCUNIVERSAL_GPIO(gpio, setp) \ ++do { \ ++if (setp) \ ++ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \ ++else \ ++ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \ ++} while (0) ++ ++#define SET_HTCUNIVERSAL_GPIO_N(gpio, setp) \ ++do { \ ++if (setp) \ ++ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \ ++else \ ++ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \ ++} while (0) ++ ++#define HTCUNIVERSAL_IRQ(gpio) \ ++ IRQ_GPIO(GPIO_NR_HTCUNIVERSAL_ ## gpio) ++ ++#define GPIO_NR_HTCUNIVERSAL_KEY_ON_N 0 ++#define GPIO_NR_HTCUNIVERSAL_GP_RST_N 1 ++ ++#define GPIO_NR_HTCUNIVERSAL_USB_DET 9 ++#define GPIO_NR_HTCUNIVERSAL_POWER_DET 10 ++ ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD7 12 ++#define GPIO_NR_HTCUNIVERSAL_ASIC3_SDIO_INT_N 13 ++#define GPIO_NR_HTCUNIVERSAL_ASIC3_EXT_INT 14 ++#define GPIO_NR_HTCUNIVERSAL_CS1_N 15 ++ ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD6 17 ++#define GPIO_NR_HTCUNIVERSAL_RDY 18 ++ ++#define GPIO_NR_HTCUNIVERSAL_PHONE_START 19 ++ ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 22 ++#define GPIO_NR_HTCUNIVERSAL_SPI_CLK 23 ++#define GPIO_NR_HTCUNIVERSAL_SPI_FRM 24 ++#define GPIO_NR_HTCUNIVERSAL_SPI_DO 25 ++#define GPIO_NR_HTCUNIVERSAL_SPI_DI 26 ++ ++#define GPIO_NR_HTCUNIVERSAL_CODEC_ON 27 ++#define GPIO_NR_HTCUNIVERSAL_I2S_BCK 28 ++#define GPIO_NR_HTCUNIVERSAL_I2S_DIN 29 ++#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT 30 ++#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC 31 ++ ++#define GPIO_NR_HTCUNIVERSAL_RS232_ON 32 ++#define GPIO_NR_HTCUNIVERSAL_CS5_N 33 ++ ++#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD 34 ++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS 35 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7 36 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3 37 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4 38 ++#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD 39 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 40 ++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS 41 ++#define GPIO_NR_HTCUNIVERSAL_BT_RXD 42 ++#define GPIO_NR_HTCUNIVERSAL_BT_TXD 43 ++#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS 44 ++#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS 45 ++ ++#define GPIO_NR_HTCUNIVERSAL_SIR_RXD 42 ++#define GPIO_NR_HTCUNIVERSAL_SIR_TXD 43 ++ ++#define GPIO_NR_HTCUNIVERSAL_POE_N 48 ++#define GPIO_NR_HTCUNIVERSAL_PWE_N 49 ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD3 50 ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD2 51 ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD4 52 ++ ++#define GPIO_NR_HTCUNIVERSAL_CIF_MCLK 53 ++#define GPIO_NR_HTCUNIVERSAL_CIF_PCLK 54 ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD1 55 ++ ++#define GPIO_NR_HTCUNIVERSAL_LDD0 58 ++#define GPIO_NR_HTCUNIVERSAL_LDD1 59 ++#define GPIO_NR_HTCUNIVERSAL_LDD2 60 ++#define GPIO_NR_HTCUNIVERSAL_LDD3 61 ++#define GPIO_NR_HTCUNIVERSAL_LDD4 62 ++#define GPIO_NR_HTCUNIVERSAL_LDD5 63 ++#define GPIO_NR_HTCUNIVERSAL_LDD6 64 ++#define GPIO_NR_HTCUNIVERSAL_LDD7 65 ++#define GPIO_NR_HTCUNIVERSAL_LDD8 66 ++#define GPIO_NR_HTCUNIVERSAL_LDD9 67 ++#define GPIO_NR_HTCUNIVERSAL_LDD10 68 ++#define GPIO_NR_HTCUNIVERSAL_LDD11 69 ++#define GPIO_NR_HTCUNIVERSAL_LDD12 70 ++#define GPIO_NR_HTCUNIVERSAL_LDD13 71 ++#define GPIO_NR_HTCUNIVERSAL_LDD14 72 ++#define GPIO_NR_HTCUNIVERSAL_LDD15 73 ++ ++#define GPIO_NR_HTCUNIVERSAL_LFCLK_RD 74 ++#define GPIO_NR_HTCUNIVERSAL_LFCLK_A0 75 ++#define GPIO_NR_HTCUNIVERSAL_LFCLK_WR 76 ++#define GPIO_NR_HTCUNIVERSAL_LBIAS 77 ++ ++#define GPIO_NR_HTCUNIVERSAL_CS2_N 78 ++#define GPIO_NR_HTCUNIVERSAL_CS3_N 79 ++#define GPIO_NR_HTCUNIVERSAL_CS4_N 80 ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD0 81 ++#define GPIO_NR_HTCUNIVERSAL_CIF_DD5 82 ++ ++#define GPIO_NR_HTCUNIVERSAL_CIF_LV 84 ++#define GPIO_NR_HTCUNIVERSAL_CIF_FV 85 ++ ++#define GPIO_NR_HTCUNIVERSAL_LCD1 86 ++#define GPIO_NR_HTCUNIVERSAL_LCD2 87 ++ ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5 90 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6 91 ++ ++#define GPIO_NR_HTCUNIVERSAL_DREQ1 97 ++ ++#define GPIO_NR_HTCUNIVERSAL_PHONE_RESET 98 ++ ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0 100 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1 101 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2 102 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 103 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 104 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 105 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 106 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 107 ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 108 ++ ++#define GPIO_NR_HTCUNIVERSAL_PHONE_UNKNOWN 109 ++#define GPIO_NR_HTCUNIVERSAL_PHONE_OFF 110 ++ ++#define GPIO_NR_HTCUNIVERSAL_USB_PUEN 112 ++#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK 113 ++ ++#define GPIO_NR_HTCUNIVERSAL_PWM_OUT1 115 ++ ++#define GPIO_NR_HTCUNIVERSAL_I2C_SCL 117 ++#define GPIO_NR_HTCUNIVERSAL_I2C_SDA 118 ++ ++#if 0 ++#define GPIO_NR_HTCUNIVERSAL_CPU_BATT_FAULT_N ++#define GPIO_NR_HTCUNIVERSAL_ASIC3_RESET_N ++#define GPIO_NR_HTCUNIVERSAL_CHARGE_EN_N ++#define GPIO_NR_HTCUNIVERSAL_FLASH_VPEN ++#define GPIO_NR_HTCUNIVERSAL_BATT_OFF ++#define GPIO_NR_HTCUNIVERSAL_USB_CHARGE_RATE ++#define GPIO_NR_HTCUNIVERSAL_BL_DETECT_N ++#define GPIO_NR_HTCUNIVERSAL_CPU_HW_RESET_N ++#endif ++ ++ ++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD (23 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD (24 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD (25 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD (26 | GPIO_ALT_FN_1_IN) ++ ++#define GPIO_NR_HTCUNIVERSAL_I2S_BCK_MD (28 | GPIO_ALT_FN_1_OUT) ++#define GPIO_NR_HTCUNIVERSAL_I2S_DIN_MD (29 | GPIO_ALT_FN_2_IN) ++#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT_MD (30 | GPIO_ALT_FN_1_OUT) ++#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC_MD (31 | GPIO_ALT_FN_1_OUT) ++ ++#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD (34 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD (35 | GPIO_ALT_FN_1_IN) ++ ++#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD (39 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD (41 | GPIO_ALT_FN_2_OUT) ++ ++#define GPIO_NR_HTCUNIVERSAL_BT_RXD_MD (42 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_BT_TXD_MD (43 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD (44 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD (45 | GPIO_ALT_FN_2_OUT) ++ ++#define GPIO_NR_HTCUNIVERSAL_SIR_RXD_MD (46 | GPIO_ALT_FN_2_IN) ++#define GPIO_NR_HTCUNIVERSAL_SIR_TXD_MD (47 | GPIO_ALT_FN_1_OUT) ++ ++#define GPIO_NR_HTCUNIVERSAL_POE_N_MD (48 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH) ++#define GPIO_NR_HTCUNIVERSAL_PWE_N_MD (49 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH) ++ ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN0 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN1 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN2 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN3 | GPIO_ALT_FN_3_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN4 | GPIO_ALT_FN_2_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN5 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN6 | GPIO_ALT_FN_1_IN) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN7 | GPIO_ALT_FN_3_IN) ++ ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 | GPIO_ALT_FN_2_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 | GPIO_ALT_FN_1_OUT) ++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 | GPIO_ALT_FN_1_OUT) ++ ++ ++#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT) ++ ++#define GPIO_NR_HTCUNIVERSAL_PWM1OUT_MD (115 | GPIO_ALT_FN_3_OUT) ++ ++#define GPIO_NR_HTCUNIVERSAL_I2C_SCL_MD (117 | GPIO_ALT_FN_1_OUT) ++#define GPIO_NR_HTCUNIVERSAL_I2C_SDA_MD (118 | GPIO_ALT_FN_1_OUT) ++ ++#endif /* _HTCUNIVERSAL_GPIO_H */ +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal-init.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal-init.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,14 @@ ++/* ++ * include/asm/arm/arch-pxa/htcuniversal-init.h ++ * Copyright (c) 2004 SDG Systems, LLC ++ */ ++ ++#ifndef _HTCUNIVERSAL_INIT_H_ ++#define _HTCUNIVERSAL_INIT_H_ ++ ++/* htcuniversal initialization data should be found here ++ * See -init.h files from other devices for details ++ */ ++ ++#endif /* _HTCUNIVERSAL_INIT_H_ */ ++ +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/htcuniversal.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,3 @@ ++#include ++ ++#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa-pm_ll.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa-pm_ll.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,6 @@ ++struct pxa_ll_pm_ops { ++ void (*suspend)(unsigned long); ++ void (*resume)(void); ++}; ++ ++extern struct pxa_ll_pm_ops *pxa_pm_set_ll_ops(struct pxa_ll_pm_ops *new_ops); +Index: linux-2.6.26-rc4/include/asm-arm/hardware/asic3_keys.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/hardware/asic3_keys.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,18 @@ ++#include ++ ++struct asic3_keys_button { ++ /* Configuration parameters */ ++ int keycode; ++ int gpio; ++ int active_low; ++ char *desc; ++ int type; ++ /* Internal state vars - add below */ ++}; ++ ++struct asic3_keys_platform_data { ++ struct asic3_keys_button *buttons; ++ int nbuttons; ++ struct input_dev *input; ++ struct device *asic3_dev; ++}; +Index: linux-2.6.26-rc4/include/asm-arm/hardware/asic3_leds.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/hardware/asic3_leds.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,34 @@ ++/* ++ * LEDs support for HTC ASIC3 devices. ++ * ++ * Copyright (c) 2006 Anton Vorontsov ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++ ++struct asic3_leds_machinfo; ++ ++struct asic3_led { ++ struct led_classdev led_cdev; ++ int hw_num; /* Number of "hardware-accelerated" led */ ++ int gpio_num; /* Number of GPIO if hw_num == -1 */ ++ struct asic3_leds_machinfo *machinfo; ++}; ++ ++struct asic3_leds_machinfo { ++ int num_leds; ++ struct asic3_led *leds; ++ struct platform_device *asic3_pdev; ++}; ++ ++extern int asic3_leds_register(void); ++extern void asic3_leds_unregister(void); ++ +Index: linux-2.6.26-rc4/include/asm-arm/hardware/ipaq-asic3.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/hardware/ipaq-asic3.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,602 @@ ++/* ++ * ++ * Definitions for the HTC ASIC3 chip found in several handheld devices ++ * ++ * Copyright 2001 Compaq Computer Corporation. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, ++ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS ++ * FITNESS FOR ANY PARTICULAR PURPOSE. ++ * ++ * Author: Andrew Christian ++ * ++ */ ++ ++#ifndef IPAQ_ASIC3_H ++#define IPAQ_ASIC3_H ++ ++/****************************************************/ ++/* IPAQ, ASIC #3, replaces ASIC #1 */ ++ ++#define IPAQ_ASIC3_OFFSET(x,y) (_IPAQ_ASIC3_ ## x ## _Base + _IPAQ_ASIC3_ ## x ## _ ## y) ++#define IPAQ_ASIC3_GPIO_OFFSET(x,y) (_IPAQ_ASIC3_GPIO_ ## x ## _Base + _IPAQ_ASIC3_GPIO_ ## y) ++ ++ ++/* All offsets below are specified with the following address bus shift */ ++#define ASIC3_DEFAULT_ADDR_SHIFT 2 ++ ++#define _IPAQ_ASIC3_GPIO_A_Base 0x0000 ++#define _IPAQ_ASIC3_GPIO_B_Base 0x0100 ++#define _IPAQ_ASIC3_GPIO_C_Base 0x0200 ++#define _IPAQ_ASIC3_GPIO_D_Base 0x0300 ++ ++#define _IPAQ_ASIC3_GPIO_Mask 0x00 /* R/W 0:don't mask, 1:mask interrupt */ ++#define _IPAQ_ASIC3_GPIO_Direction 0x04 /* R/W 0:input, 1:output */ ++#define _IPAQ_ASIC3_GPIO_Out 0x08 /* R/W 0:output low, 1:output high */ ++#define _IPAQ_ASIC3_GPIO_TriggerType 0x0c /* R/W 0:level, 1:edge */ ++#define _IPAQ_ASIC3_GPIO_EdgeTrigger 0x10 /* R/W 0:falling, 1:rising */ ++#define _IPAQ_ASIC3_GPIO_LevelTrigger 0x14 /* R/W 0:low, 1:high level detect */ ++#define _IPAQ_ASIC3_GPIO_SleepMask 0x18 /* R/W 0:don't mask, 1:mask trigger in sleep mode */ ++#define _IPAQ_ASIC3_GPIO_SleepOut 0x1c /* R/W level 0:low, 1:high in sleep mode */ ++#define _IPAQ_ASIC3_GPIO_BattFaultOut 0x20 /* R/W level 0:low, 1:high in batt_fault */ ++#define _IPAQ_ASIC3_GPIO_IntStatus 0x24 /* R/W 0:none, 1:detect */ ++#define _IPAQ_ASIC3_GPIO_AltFunction 0x28 /* R/W 0:normal control 1:LED register control */ ++#define _IPAQ_ASIC3_GPIO_SleepConf 0x2c /* R/W bit 1: autosleep 0: disable gposlpout in normal mode, enable gposlpout in sleep mode */ ++#define _IPAQ_ASIC3_GPIO_Status 0x30 /* R Pin status */ ++ ++#define IPAQ_ASIC3_GPIO_A_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Mask ) ++#define IPAQ_ASIC3_GPIO_A_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Direction ) ++#define IPAQ_ASIC3_GPIO_A_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Out ) ++#define IPAQ_ASIC3_GPIO_A_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, A, TriggerType ) ++#define IPAQ_ASIC3_GPIO_A_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, A, EdgeTrigger ) ++#define IPAQ_ASIC3_GPIO_A_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, A, LevelTrigger ) ++#define IPAQ_ASIC3_GPIO_A_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepMask ) ++#define IPAQ_ASIC3_GPIO_A_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepOut ) ++#define IPAQ_ASIC3_GPIO_A_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, BattFaultOut ) ++#define IPAQ_ASIC3_GPIO_A_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, IntStatus ) ++#define IPAQ_ASIC3_GPIO_A_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, A, AltFunction ) ++#define IPAQ_ASIC3_GPIO_A_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepConf ) ++#define IPAQ_ASIC3_GPIO_A_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Status ) ++ ++#define IPAQ_ASIC3_GPIO_B_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Mask ) ++#define IPAQ_ASIC3_GPIO_B_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Direction ) ++#define IPAQ_ASIC3_GPIO_B_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Out ) ++#define IPAQ_ASIC3_GPIO_B_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, B, TriggerType ) ++#define IPAQ_ASIC3_GPIO_B_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, B, EdgeTrigger ) ++#define IPAQ_ASIC3_GPIO_B_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, B, LevelTrigger ) ++#define IPAQ_ASIC3_GPIO_B_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepMask ) ++#define IPAQ_ASIC3_GPIO_B_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepOut ) ++#define IPAQ_ASIC3_GPIO_B_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, BattFaultOut ) ++#define IPAQ_ASIC3_GPIO_B_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, IntStatus ) ++#define IPAQ_ASIC3_GPIO_B_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, B, AltFunction ) ++#define IPAQ_ASIC3_GPIO_B_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepConf ) ++#define IPAQ_ASIC3_GPIO_B_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Status ) ++ ++#define IPAQ_ASIC3_GPIO_C_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Mask ) ++#define IPAQ_ASIC3_GPIO_C_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Direction ) ++#define IPAQ_ASIC3_GPIO_C_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Out ) ++#define IPAQ_ASIC3_GPIO_C_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, C, TriggerType ) ++#define IPAQ_ASIC3_GPIO_C_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, C, EdgeTrigger ) ++#define IPAQ_ASIC3_GPIO_C_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, C, LevelTrigger ) ++#define IPAQ_ASIC3_GPIO_C_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepMask ) ++#define IPAQ_ASIC3_GPIO_C_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepOut ) ++#define IPAQ_ASIC3_GPIO_C_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, BattFaultOut ) ++#define IPAQ_ASIC3_GPIO_C_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, IntStatus ) ++#define IPAQ_ASIC3_GPIO_C_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, C, AltFunction ) ++#define IPAQ_ASIC3_GPIO_C_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepConf ) ++#define IPAQ_ASIC3_GPIO_C_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Status ) ++ ++#define IPAQ_ASIC3_GPIO_D_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Mask ) ++#define IPAQ_ASIC3_GPIO_D_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Direction ) ++#define IPAQ_ASIC3_GPIO_D_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Out ) ++#define IPAQ_ASIC3_GPIO_D_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, D, TriggerType ) ++#define IPAQ_ASIC3_GPIO_D_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, D, EdgeTrigger ) ++#define IPAQ_ASIC3_GPIO_D_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, D, LevelTrigger ) ++#define IPAQ_ASIC3_GPIO_D_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepMask ) ++#define IPAQ_ASIC3_GPIO_D_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepOut ) ++#define IPAQ_ASIC3_GPIO_D_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, BattFaultOut ) ++#define IPAQ_ASIC3_GPIO_D_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, IntStatus ) ++#define IPAQ_ASIC3_GPIO_D_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, D, AltFunction ) ++#define IPAQ_ASIC3_GPIO_D_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepConf ) ++#define IPAQ_ASIC3_GPIO_D_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Status ) ++ ++#define _IPAQ_ASIC3_SPI_Base 0x0400 ++#define _IPAQ_ASIC3_SPI_Control 0x0000 ++#define _IPAQ_ASIC3_SPI_TxData 0x0004 ++#define _IPAQ_ASIC3_SPI_RxData 0x0008 ++#define _IPAQ_ASIC3_SPI_Int 0x000c ++#define _IPAQ_ASIC3_SPI_Status 0x0010 ++ ++#define IPAQ_ASIC3_SPI_Control(_b) IPAQ_ASIC3( _b, u16, SPI, Control ) ++#define IPAQ_ASIC3_SPI_TxData(_b) IPAQ_ASIC3( _b, u16, SPI, TxData ) ++#define IPAQ_ASIC3_SPI_RxData(_b) IPAQ_ASIC3( _b, u16, SPI, RxData ) ++#define IPAQ_ASIC3_SPI_Int(_b) IPAQ_ASIC3( _b, u16, SPI, Int ) ++#define IPAQ_ASIC3_SPI_Status(_b) IPAQ_ASIC3( _b, u16, SPI, Status ) ++ ++#define SPI_CONTROL_SPR(clk) ((clk) & 0x0f) /* Clock rate */ ++ ++#define _IPAQ_ASIC3_PWM_0_Base 0x0500 ++#define _IPAQ_ASIC3_PWM_1_Base 0x0600 ++#define _IPAQ_ASIC3_PWM_TimeBase 0x0000 ++#define _IPAQ_ASIC3_PWM_PeriodTime 0x0004 ++#define _IPAQ_ASIC3_PWM_DutyTime 0x0008 ++ ++#define IPAQ_ASIC3_PWM_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, TimeBase ) ++#define IPAQ_ASIC3_PWM_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, PeriodTime ) ++#define IPAQ_ASIC3_PWM_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, DutyTime ) ++ ++#define PWM_TIMEBASE_VALUE(x) ((x)&0xf) /* Low 4 bits sets time base */ ++#define PWM_TIMEBASE_ENABLE (1 << 4) /* Enable clock */ ++ ++#define _IPAQ_ASIC3_LED_0_Base 0x0700 ++#define _IPAQ_ASIC3_LED_1_Base 0x0800 ++#define _IPAQ_ASIC3_LED_2_Base 0x0900 ++#define _IPAQ_ASIC3_LED_TimeBase 0x0000 /* R/W 7 bits */ ++#define _IPAQ_ASIC3_LED_PeriodTime 0x0004 /* R/W 12 bits */ ++#define _IPAQ_ASIC3_LED_DutyTime 0x0008 /* R/W 12 bits */ ++#define _IPAQ_ASIC3_LED_AutoStopCount 0x000c /* R/W 16 bits */ ++ ++#define IPAQ_ASIC3_LED_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u8, LED, x, TimeBase ) ++#define IPAQ_ASIC3_LED_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, PeriodTime ) ++#define IPAQ_ASIC3_LED_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, DutyTime ) ++#define IPAQ_ASIC3_LED_AutoStopCount(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, AutoStopCount ) ++ ++/* LED TimeBase bits - match ASIC2 */ ++#define LED_TBS 0x0f /* Low 4 bits sets time base, max = 13 */ ++ /* Note: max = 5 on hx4700 */ ++ /* 0: maximum time base */ ++ /* 1: maximum time base / 2 */ ++ /* n: maximum time base / 2^n */ ++ ++#define LED_EN (1 << 4) /* LED ON/OFF 0:off, 1:on */ ++#define LED_AUTOSTOP (1 << 5) /* LED ON/OFF auto stop set 0:disable, 1:enable */ ++#define LED_ALWAYS (1 << 6) /* LED Interrupt Mask 0:No mask, 1:mask */ ++ ++#define _IPAQ_ASIC3_CLOCK_Base 0x0A00 ++#define _IPAQ_ASIC3_CLOCK_CDEX 0x00 ++#define _IPAQ_ASIC3_CLOCK_SEL 0x04 ++ ++#define IPAQ_ASIC3_CLOCK_CDEX(_b) IPAQ_ASIC3( _b, u16, CLOCK, CDEX ) ++#define IPAQ_ASIC3_CLOCK_SEL(_b) IPAQ_ASIC3( _b, u16, CLOCK, SEL ) ++ ++#define CLOCK_CDEX_SOURCE (1 << 0) /* 2 bits */ ++#define CLOCK_CDEX_SOURCE0 (1 << 0) ++#define CLOCK_CDEX_SOURCE1 (1 << 1) ++#define CLOCK_CDEX_SPI (1 << 2) ++#define CLOCK_CDEX_OWM (1 << 3) ++#define CLOCK_CDEX_PWM0 (1 << 4) ++#define CLOCK_CDEX_PWM1 (1 << 5) ++#define CLOCK_CDEX_LED0 (1 << 6) ++#define CLOCK_CDEX_LED1 (1 << 7) ++#define CLOCK_CDEX_LED2 (1 << 8) ++ ++#define CLOCK_CDEX_SD_HOST (1 << 9) /* R/W: SD host clock source 24.576M/12.288M */ ++#define CLOCK_CDEX_SD_BUS (1 << 10) /* R/W: SD bus clock source control 24.576M/12.288M */ ++#define CLOCK_CDEX_SMBUS (1 << 11) ++#define CLOCK_CDEX_CONTROL_CX (1 << 12) ++ ++#define CLOCK_CDEX_EX0 (1 << 13) /* R/W: 32.768 kHz crystal */ ++#define CLOCK_CDEX_EX1 (1 << 14) /* R/W: 24.576 MHz crystal */ ++ ++#define CLOCK_SEL_SD_HCLK_SEL (1 << 0) /* R/W: SDIO host clock select - 1: 24.576 Mhz, 0: 12.288 MHz */ ++#define CLOCK_SEL_SD_BCLK_SEL (1 << 1) /* R/W: SDIO bus clock select - 1: 24.576 MHz, 0: 12.288 MHz */ ++#define CLOCK_SEL_CX (1 << 2) /* R/W: INT clock source control (32.768 kHz) */ ++ ++ ++#define _IPAQ_ASIC3_INTR_Base 0x0B00 ++ ++#define _IPAQ_ASIC3_INTR_IntMask 0x00 /* Interrupt mask control */ ++#define _IPAQ_ASIC3_INTR_PIntStat 0x04 /* Peripheral interrupt status */ ++#define _IPAQ_ASIC3_INTR_IntCPS 0x08 /* Interrupt timer clock pre-scale */ ++#define _IPAQ_ASIC3_INTR_IntTBS 0x0c /* Interrupt timer set */ ++ ++#define IPAQ_ASIC3_INTR_IntMask(_b) IPAQ_ASIC3( _b, u8, INTR, IntMask ) ++#define IPAQ_ASIC3_INTR_PIntStat(_b) IPAQ_ASIC3( _b, u8, INTR, PIntStat ) ++#define IPAQ_ASIC3_INTR_IntCPS(_b) IPAQ_ASIC3( _b, u8, INTR, IntCPS ) ++#define IPAQ_ASIC3_INTR_IntTBS(_b) IPAQ_ASIC3( _b, u16, INTR, IntTBS ) ++ ++#define ASIC3_INTMASK_GINTMASK (1 << 0) /* Global interrupt mask 1:enable */ ++#define ASIC3_INTMASK_GINTEL (1 << 1) /* 1: rising edge, 0: hi level */ ++#define ASIC3_INTMASK_MASK0 (1 << 2) ++#define ASIC3_INTMASK_MASK1 (1 << 3) ++#define ASIC3_INTMASK_MASK2 (1 << 4) ++#define ASIC3_INTMASK_MASK3 (1 << 5) ++#define ASIC3_INTMASK_MASK4 (1 << 6) ++#define ASIC3_INTMASK_MASK5 (1 << 7) ++ ++#define ASIC3_INTR_PERIPHERAL_A (1 << 0) ++#define ASIC3_INTR_PERIPHERAL_B (1 << 1) ++#define ASIC3_INTR_PERIPHERAL_C (1 << 2) ++#define ASIC3_INTR_PERIPHERAL_D (1 << 3) ++#define ASIC3_INTR_LED0 (1 << 4) ++#define ASIC3_INTR_LED1 (1 << 5) ++#define ASIC3_INTR_LED2 (1 << 6) ++#define ASIC3_INTR_SPI (1 << 7) ++#define ASIC3_INTR_SMBUS (1 << 8) ++#define ASIC3_INTR_OWM (1 << 9) ++ ++#define ASIC3_INTR_CPS(x) ((x)&0x0f) /* 4 bits, max 14 */ ++#define ASIC3_INTR_CPS_SET ( 1 << 4 ) /* Time base enable */ ++ ++ ++/* Basic control of the SD ASIC */ ++#define _IPAQ_ASIC3_SDHWCTRL_Base 0x0E00 ++ ++#define _IPAQ_ASIC3_SDHWCTRL_SDConf 0x00 ++#define IPAQ_ASIC3_SDHWCTRL_SDConf(_b) IPAQ_ASIC3( _b, u8, SDHWCTRL, SDConf ) ++ ++#define ASIC3_SDHWCTRL_SUSPEND (1 << 0) /* 1=suspend all SD operations */ ++#define ASIC3_SDHWCTRL_CLKSEL (1 << 1) /* 1=SDICK, 0=HCLK */ ++#define ASIC3_SDHWCTRL_PCLR (1 << 2) /* All registers of SDIO cleared */ ++#define ASIC3_SDHWCTRL_LEVCD (1 << 3) /* Level of SD card detection: 1:high, 0:low */ ++#define ASIC3_SDHWCTRL_LEVWP (1 << 4) /* Level of SD card write protection: 1=low, 0=high */ ++#define ASIC3_SDHWCTRL_SDLED (1 << 5) /* SD card LED signal 1=enable, 0=disable */ ++#define ASIC3_SDHWCTRL_SDPWR (1 << 6) /* SD card power supply control 1=enable */ ++ ++ ++/* This is a pointer to an array of 12 u32 values - but only the lower 2 bytes matter */ ++/* Use it as "IPAQ_ASIC3_HWPROTECT_ARRAY[x]" */ ++ ++#define _IPAQ_ASIC3_HWPROTECT_Base 0x1000 ++#define IPAQ_ASIC3_HWPROTECT_ARRAY ((volatile u32*)(_IPAQ_ASIC3_Base + _IPAQ_ASIC3_HWPROTECT_Base)) ++#define HWPROTECT_ARRAY_LEN 12 ++#define HWPROTECT_ARRAY_VALUES {0x4854,0x432d,0x5344,0x494f,0x2050,0x2f4e,0x3a33,0x3048,0x3830,0x3032,0x382d,0x3030} ++ ++ ++#define _IPAQ_ASIC3_EXTCF_Base 0x1100 ++ ++#define _IPAQ_ASIC3_EXTCF_Select 0x00 ++#define _IPAQ_ASIC3_EXTCF_Reset 0x04 ++ ++#define IPAQ_ASIC3_EXTCF_Select(_b) IPAQ_ASIC3( _b, u16, EXTCF, Select ) ++#define IPAQ_ASIC3_EXTCF_Reset(_b) IPAQ_ASIC3( _b, u16, EXTCF, Reset ) ++ ++#define ASIC3_EXTCF_SMOD0 (1 << 0) /* slot number of mode 0 */ ++#define ASIC3_EXTCF_SMOD1 (1 << 1) /* slot number of mode 1 */ ++#define ASIC3_EXTCF_SMOD2 (1 << 2) /* slot number of mode 2 */ ++#define ASIC3_EXTCF_OWM_EN (1 << 4) /* enable onewire module */ ++#define ASIC3_EXTCF_OWM_SMB (1 << 5) /* OWM bus selection */ ++#define ASIC3_EXTCF_OWM_RESET (1 << 6) /* undocumented, used by OWM and CF */ ++#define ASIC3_EXTCF_CF0_SLEEP_MODE (1 << 7) /* CF0 sleep state control */ ++#define ASIC3_EXTCF_CF1_SLEEP_MODE (1 << 8) /* CF1 sleep state control */ ++#define ASIC3_EXTCF_CF0_PWAIT_EN (1 << 10) /* CF0 PWAIT_n control */ ++#define ASIC3_EXTCF_CF1_PWAIT_EN (1 << 11) /* CF1 PWAIT_n control */ ++#define ASIC3_EXTCF_CF0_BUF_EN (1 << 12) /* CF0 buffer control */ ++#define ASIC3_EXTCF_CF1_BUF_EN (1 << 13) /* CF1 buffer control */ ++#define ASIC3_EXTCF_SD_MEM_ENABLE (1 << 14) ++#define ASIC3_EXTCF_CF_SLEEP (1 << 15) /* CF sleep mode control */ ++ ++/***************************************************************************** ++ * The Onewire interface registers ++ * ++ * OWM_CMD ++ * OWM_DAT ++ * OWM_INTR ++ * OWM_INTEN ++ * OWM_CLKDIV ++ * ++ *****************************************************************************/ ++ ++#define _IPAQ_ASIC3_OWM_Base 0xC00 ++ ++#define _IPAQ_ASIC3_OWM_CMD 0x00 ++#define _IPAQ_ASIC3_OWM_DAT 0x04 ++#define _IPAQ_ASIC3_OWM_INTR 0x08 ++#define _IPAQ_ASIC3_OWM_INTEN 0x0C ++#define _IPAQ_ASIC3_OWM_CLKDIV 0x10 ++ ++#define ASIC3_OWM_CMD_ONEWR (1 << 0) ++#define ASIC3_OWM_CMD_SRA (1 << 1) ++#define ASIC3_OWM_CMD_DQO (1 << 2) ++#define ASIC3_OWM_CMD_DQI (1 << 3) ++ ++#define ASIC3_OWM_INTR_PD (1 << 0) ++#define ASIC3_OWM_INTR_PDR (1 << 1) ++#define ASIC3_OWM_INTR_TBE (1 << 2) ++#define ASIC3_OWM_INTR_TEMP (1 << 3) ++#define ASIC3_OWM_INTR_RBF (1 << 4) ++ ++#define ASIC3_OWM_INTEN_EPD (1 << 0) ++#define ASIC3_OWM_INTEN_IAS (1 << 1) ++#define ASIC3_OWM_INTEN_ETBE (1 << 2) ++#define ASIC3_OWM_INTEN_ETMT (1 << 3) ++#define ASIC3_OWM_INTEN_ERBF (1 << 4) ++ ++#define ASIC3_OWM_CLKDIV_PRE (3 << 0) /* two bits wide at bit position 0 */ ++#define ASIC3_OWM_CLKDIV_DIV (7 << 2) /* 3 bits wide at bit position 2 */ ++ ++ ++/***************************************************************************** ++ * The SD configuration registers are at a completely different location ++ * in memory. They are divided into three sets of registers: ++ * ++ * SD_CONFIG Core configuration register ++ * SD_CTRL Control registers for SD operations ++ * SDIO_CTRL Control registers for SDIO operations ++ * ++ *****************************************************************************/ ++ ++#define IPAQ_ASIC3_SD_CONFIG(_b, s,x) \ ++ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CONFIG_Base + (_IPAQ_ASIC3_SD_CONFIG_ ## x)))) ++ ++#define _IPAQ_ASIC3_SD_CONFIG_Base 0x0400 // Assumes 32 bit addressing ++ ++#define _IPAQ_ASIC3_SD_CONFIG_Command 0x08 /* R/W: Command */ ++#define _IPAQ_ASIC3_SD_CONFIG_Addr0 0x20 /* [9:31] SD Control Register Base Address */ ++#define _IPAQ_ASIC3_SD_CONFIG_Addr1 0x24 /* [9:31] SD Control Register Base Address */ ++#define _IPAQ_ASIC3_SD_CONFIG_IntPin 0x78 /* R/O: interrupt assigned to pin */ ++#define _IPAQ_ASIC3_SD_CONFIG_ClkStop 0x80 /* Set to 0x1f to clock SD controller, 0 otherwise. */ ++ /* at 0x82 - Gated Clock Control */ ++#define _IPAQ_ASIC3_SD_CONFIG_ClockMode 0x84 /* Control clock of SD controller */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus 0x88 /* R/0: read status of SD pins */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power1 0x90 /* Power1 - manual power control */ ++ /* Power2 is at 0x92 - auto power up after card inserted */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power3 0x94 /* auto power down when card removed */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect 0x98 /* */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Slot 0xA0 /* R/O: define support slot number */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1 0x1E0 /* Could be used for gated clock (don't use) */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk2 0x1E2 /* Could be used for gated clock (don't use) */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_OutAndEnable 0x1E8 /* GPIO Output Reg. , at 0x1EA - GPIO Output Enable Reg. */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_Status 0x1EC /* GPIO Status Reg. */ ++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3 0x1F0 /* Bit 1: double buffer/single buffer */ ++ ++#define IPAQ_ASIC3_SD_CONFIG_Command(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Command ) ++#define IPAQ_ASIC3_SD_CONFIG_Addr0(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr0 ) ++#define IPAQ_ASIC3_SD_CONFIG_Addr1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr1 ) ++#define IPAQ_ASIC3_SD_CONFIG_IntPin(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, IntPin ) ++#define IPAQ_ASIC3_SD_CONFIG_ClkStop(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClkStop ) ++#define IPAQ_ASIC3_SD_CONFIG_ClockMode(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClockMode ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_PinStatus ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power1 ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power3 ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_CardDetect ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_Slot(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Slot ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk1 ) ++#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk3 ) ++ ++#define SD_CONFIG_ ++ ++#define SD_CONFIG_COMMAND_MAE (1<<1) /* Memory access enable (set to 1 to access SD Controller) */ ++ ++#define SD_CONFIG_CLK_ENABLE_ALL 0x1f ++ ++#define SD_CONFIG_POWER1_PC_33V 0x0200 /* Set for 3.3 volts */ ++#define SD_CONFIG_POWER1_PC_OFF 0x0000 /* Turn off power */ ++ ++#define SD_CONFIG_CARDDETECTMODE_CLK ((x)&0x3) /* two bits - number of cycles for card detection */ ++ ++ ++#define _IPAQ_ASIC3_SD_CTRL_Base 0x1000 ++ ++#define IPAQ_ASIC3_SD(_b, s,x) \ ++ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CTRL_Base + (_IPAQ_ASIC3_SD_CTRL_ ## x)))) ++ ++#define _IPAQ_ASIC3_SD_CTRL_Cmd 0x00 ++#define _IPAQ_ASIC3_SD_CTRL_Arg0 0x08 ++#define _IPAQ_ASIC3_SD_CTRL_Arg1 0x0C ++#define _IPAQ_ASIC3_SD_CTRL_StopInternal 0x10 ++#define _IPAQ_ASIC3_SD_CTRL_TransferSectorCount 0x14 ++#define _IPAQ_ASIC3_SD_CTRL_Response0 0x18 ++#define _IPAQ_ASIC3_SD_CTRL_Response1 0x1C ++#define _IPAQ_ASIC3_SD_CTRL_Response2 0x20 ++#define _IPAQ_ASIC3_SD_CTRL_Response3 0x24 ++#define _IPAQ_ASIC3_SD_CTRL_Response4 0x28 ++#define _IPAQ_ASIC3_SD_CTRL_Response5 0x2C ++#define _IPAQ_ASIC3_SD_CTRL_Response6 0x30 ++#define _IPAQ_ASIC3_SD_CTRL_Response7 0x34 ++#define _IPAQ_ASIC3_SD_CTRL_CardStatus 0x38 ++#define _IPAQ_ASIC3_SD_CTRL_BufferCtrl 0x3C ++#define _IPAQ_ASIC3_SD_CTRL_IntMaskCard 0x40 ++#define _IPAQ_ASIC3_SD_CTRL_IntMaskBuffer 0x44 ++#define _IPAQ_ASIC3_SD_CTRL_CardClockCtrl 0x48 ++#define _IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen 0x4C ++#define _IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup 0x50 ++#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus0 0x58 ++#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus1 0x5C ++#define _IPAQ_ASIC3_SD_CTRL_DataPort 0x60 ++#define _IPAQ_ASIC3_SD_CTRL_TransactionCtrl 0x68 ++#define _IPAQ_ASIC3_SD_CTRL_SoftwareReset 0x1C0 ++ ++#define IPAQ_ASIC3_SD_CTRL_Cmd(_b) IPAQ_ASIC3_SD( _b, u16, Cmd ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Arg0(_b) IPAQ_ASIC3_SD( _b, u16, Arg0 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Arg1(_b) IPAQ_ASIC3_SD( _b, u16, Arg1 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_StopInternal(_b) IPAQ_ASIC3_SD( _b, u16, StopInternal ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_TransferSectorCount(_b) IPAQ_ASIC3_SD( _b, u16, TransferSectorCount ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response0(_b) IPAQ_ASIC3_SD( _b, u16, Response0 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response1(_b) IPAQ_ASIC3_SD( _b, u16, Response1 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response2(_b) IPAQ_ASIC3_SD( _b, u16, Response2 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response3(_b) IPAQ_ASIC3_SD( _b, u16, Response3 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response4(_b) IPAQ_ASIC3_SD( _b, u16, Response4 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response5(_b) IPAQ_ASIC3_SD( _b, u16, Response5 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response6(_b) IPAQ_ASIC3_SD( _b, u16, Response6 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_Response7(_b) IPAQ_ASIC3_SD( _b, u16, Response7 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_CardStatus(_b) IPAQ_ASIC3_SD( _b, u16, CardStatus ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SD( _b, u16, BufferCtrl ) /* and error status*/ ++#define IPAQ_ASIC3_SD_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskCard ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskBuffer ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_CardClockCtrl(_b) IPAQ_ASIC3_SD( _b, u16, CardClockCtrl ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen(_b) IPAQ_ASIC3_SD( _b, u16, MemCardXferDataLen ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup(_b) IPAQ_ASIC3_SD( _b, u16, MemCardOptionSetup ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus0 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus1 ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_DataPort(_b) IPAQ_ASIC3_SD( _b, u16, DataPort ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SD( _b, u16, TransactionCtrl ) /* */ ++#define IPAQ_ASIC3_SD_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SD( _b, u16, SoftwareReset ) /* */ ++ ++#define SD_CTRL_SOFTWARE_RESET_CLEAR (1<<0) ++ ++#define SD_CTRL_TRANSACTIONCONTROL_SET (1<<8) // 0x0100 ++ ++#define SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD (1<<15)// 0x8000 ++#define SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK (1<<8) // 0x0100 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_512 (1<<7) // 0x0080 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_256 (1<<6) // 0x0040 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_128 (1<<5) // 0x0020 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_64 (1<<4) // 0x0010 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_32 (1<<3) // 0x0008 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_16 (1<<2) // 0x0004 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_8 (1<<1) // 0x0002 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_4 (1<<0) // 0x0001 ++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_2 (0<<0) // 0x0000 ++ ++#define MEM_CARD_OPTION_REQUIRED 0x000e ++#define MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(x) (((x)&0x0f)<<4) /* Four bits */ ++#define MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT (1<<14) // 0x4000 ++#define MEM_CARD_OPTION_DATA_XFR_WIDTH_1 (1<<15) // 0x8000 ++#define MEM_CARD_OPTION_DATA_XFR_WIDTH_4 (0<<15) //~0x8000 ++ ++#define SD_CTRL_COMMAND_INDEX(x) ((x)&0x3f) /* 0=CMD0, 1=CMD1, ..., 63=CMD63 */ ++#define SD_CTRL_COMMAND_TYPE_CMD (0 << 6) ++#define SD_CTRL_COMMAND_TYPE_ACMD (1 << 6) ++#define SD_CTRL_COMMAND_TYPE_AUTHENTICATION (2 << 6) ++#define SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL (0 << 8) ++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1 (4 << 8) ++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B (5 << 8) ++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2 (6 << 8) ++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3 (7 << 8) ++#define SD_CTRL_COMMAND_DATA_PRESENT (1 << 11) ++#define SD_CTRL_COMMAND_TRANSFER_READ (1 << 12) ++#define SD_CTRL_COMMAND_TRANSFER_WRITE (0 << 12) ++#define SD_CTRL_COMMAND_MULTI_BLOCK (1 << 13) ++#define SD_CTRL_COMMAND_SECURITY_CMD (1 << 14) ++ ++#define SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12 (1 << 0) ++#define SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12 (1 << 8) ++ ++#define SD_CTRL_CARDSTATUS_RESPONSE_END (1 << 0) ++#define SD_CTRL_CARDSTATUS_RW_END (1 << 2) ++#define SD_CTRL_CARDSTATUS_CARD_REMOVED_0 (1 << 3) ++#define SD_CTRL_CARDSTATUS_CARD_INSERTED_0 (1 << 4) ++#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_0 (1 << 5) ++#define SD_CTRL_CARDSTATUS_WRITE_PROTECT (1 << 7) ++#define SD_CTRL_CARDSTATUS_CARD_REMOVED_3 (1 << 8) ++#define SD_CTRL_CARDSTATUS_CARD_INSERTED_3 (1 << 9) ++#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_3 (1 << 10) ++ ++#define SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR (1 << 0) // 0x0001 ++#define SD_CTRL_BUFFERSTATUS_CRC_ERROR (1 << 1) // 0x0002 ++#define SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR (1 << 2) // 0x0004 ++#define SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT (1 << 3) // 0x0008 ++#define SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW (1 << 4) // 0x0010 ++#define SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW (1 << 5) // 0x0020 ++#define SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT (1 << 6) // 0x0040 ++#define SD_CTRL_BUFFERSTATUS_UNK7 (1 << 7) // 0x0080 ++#define SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE (1 << 8) // 0x0100 ++#define SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200 ++#define SD_CTRL_BUFFERSTATUS_ILLEGAL_FUNCTION (1 << 13)// 0x2000 ++#define SD_CTRL_BUFFERSTATUS_CMD_BUSY (1 << 14)// 0x4000 ++#define SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS (1 << 15)// 0x8000 ++ ++#define SD_CTRL_INTMASKCARD_RESPONSE_END (1 << 0) // 0x0001 ++#define SD_CTRL_INTMASKCARD_RW_END (1 << 2) // 0x0004 ++#define SD_CTRL_INTMASKCARD_CARD_REMOVED_0 (1 << 3) // 0x0008 ++#define SD_CTRL_INTMASKCARD_CARD_INSERTED_0 (1 << 4) // 0x0010 ++#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 (1 << 5) // 0x0020 ++#define SD_CTRL_INTMASKCARD_UNK6 (1 << 6) // 0x0040 ++#define SD_CTRL_INTMASKCARD_WRITE_PROTECT (1 << 7) // 0x0080 ++#define SD_CTRL_INTMASKCARD_CARD_REMOVED_3 (1 << 8) // 0x0100 ++#define SD_CTRL_INTMASKCARD_CARD_INSERTED_3 (1 << 9) // 0x0200 ++#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 (1 << 10)// 0x0400 ++ ++#define SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR (1 << 0) // 0x0001 ++#define SD_CTRL_INTMASKBUFFER_CRC_ERROR (1 << 1) // 0x0002 ++#define SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR (1 << 2) // 0x0004 ++#define SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT (1 << 3) // 0x0008 ++#define SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW (1 << 4) // 0x0010 ++#define SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW (1 << 5) // 0x0020 ++#define SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT (1 << 6) // 0x0040 ++#define SD_CTRL_INTMASKBUFFER_UNK7 (1 << 7) // 0x0080 ++#define SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE (1 << 8) // 0x0100 ++#define SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200 ++#define SD_CTRL_INTMASKBUFFER_ILLEGAL_FUNCTION (1 << 13)// 0x2000 ++#define SD_CTRL_INTMASKBUFFER_CMD_BUSY (1 << 14)// 0x4000 ++#define SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS (1 << 15)// 0x8000 ++ ++#define SD_CTRL_DETAIL0_RESPONSE_CMD_ERROR (1 << 0) // 0x0001 ++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 2) // 0x0004 ++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_CMD12 (1 << 3) // 0x0008 ++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_READ_DATA (1 << 4) // 0x0010 ++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_WRITE_CRC_STATUS (1 << 5) // 0x0020 ++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 8) // 0x0100 ++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_CMD12 (1 << 9) // 0x0200 ++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_READ_DATA (1 << 10)// 0x0400 ++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_WRITE_CMD (1 << 11)// 0x0800 ++ ++#define SD_CTRL_DETAIL1_NO_CMD_RESPONSE (1 << 0) // 0x0001 ++#define SD_CTRL_DETAIL1_TIMEOUT_READ_DATA (1 << 4) // 0x0010 ++#define SD_CTRL_DETAIL1_TIMEOUT_CRS_STATUS (1 << 5) // 0x0020 ++#define SD_CTRL_DETAIL1_TIMEOUT_CRC_BUSY (1 << 6) // 0x0040 ++ ++#define _IPAQ_ASIC3_SDIO_CTRL_Base 0x1200 ++ ++#define IPAQ_ASIC3_SDIO(_b, s,x) \ ++ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SDIO_CTRL_Base + (_IPAQ_ASIC3_SDIO_CTRL_ ## x)))) ++ ++#define _IPAQ_ASIC3_SDIO_CTRL_Cmd 0x00 ++#define _IPAQ_ASIC3_SDIO_CTRL_CardPortSel 0x04 ++#define _IPAQ_ASIC3_SDIO_CTRL_Arg0 0x08 ++#define _IPAQ_ASIC3_SDIO_CTRL_Arg1 0x0C ++#define _IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount 0x14 ++#define _IPAQ_ASIC3_SDIO_CTRL_Response0 0x18 ++#define _IPAQ_ASIC3_SDIO_CTRL_Response1 0x1C ++#define _IPAQ_ASIC3_SDIO_CTRL_Response2 0x20 ++#define _IPAQ_ASIC3_SDIO_CTRL_Response3 0x24 ++#define _IPAQ_ASIC3_SDIO_CTRL_Response4 0x28 ++#define _IPAQ_ASIC3_SDIO_CTRL_Response5 0x2C ++#define _IPAQ_ASIC3_SDIO_CTRL_Response6 0x30 ++#define _IPAQ_ASIC3_SDIO_CTRL_Response7 0x34 ++#define _IPAQ_ASIC3_SDIO_CTRL_CardStatus 0x38 ++#define _IPAQ_ASIC3_SDIO_CTRL_BufferCtrl 0x3C ++#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskCard 0x40 ++#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer 0x44 ++#define _IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen 0x4C ++#define _IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup 0x50 ++#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0 0x54 ++#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1 0x58 ++#define _IPAQ_ASIC3_SDIO_CTRL_DataPort 0x60 ++#define _IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl 0x68 ++#define _IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl 0x6C ++#define _IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl 0x70 ++#define _IPAQ_ASIC3_SDIO_CTRL_HostInformation 0x74 ++#define _IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl 0x78 ++#define _IPAQ_ASIC3_SDIO_CTRL_LEDCtrl 0x7C ++#define _IPAQ_ASIC3_SDIO_CTRL_SoftwareReset 0x1C0 ++ ++#define IPAQ_ASIC3_SDIO_CTRL_Cmd(_b) IPAQ_ASIC3_SDIO( _b, u16, Cmd ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_CardPortSel(_b) IPAQ_ASIC3_SDIO( _b, u16, CardPortSel ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Arg0(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg0 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Arg1(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg1 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount(_b) IPAQ_ASIC3_SDIO( _b, u16, TransferBlockCount ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response0(_b) IPAQ_ASIC3_SDIO( _b, u16, Response0 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response1(_b) IPAQ_ASIC3_SDIO( _b, u16, Response1 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response2(_b) IPAQ_ASIC3_SDIO( _b, u16, Response2 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response3(_b) IPAQ_ASIC3_SDIO( _b, u16, Response3 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response4(_b) IPAQ_ASIC3_SDIO( _b, u16, Response4 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response5(_b) IPAQ_ASIC3_SDIO( _b, u16, Response5 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response6(_b) IPAQ_ASIC3_SDIO( _b, u16, Response6 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_Response7(_b) IPAQ_ASIC3_SDIO( _b, u16, Response7 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_CardStatus(_b) IPAQ_ASIC3_SDIO( _b, u16, CardStatus ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, BufferCtrl ) /* and error status*/ ++#define IPAQ_ASIC3_SDIO_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskCard ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskBuffer ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen(_b) IPAQ_ASIC3_SDIO( _b, u16, CardXferDataLen ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup(_b) IPAQ_ASIC3_SDIO( _b, u16, CardOptionSetup ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus0 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus1 ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_DataPort(_b) IPAQ_ASIC3_SDIO( _b, u16, DataPort ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, TransactionCtrl ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, CardIntCtrl ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ClocknWaitCtrl ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_HostInformation(_b) IPAQ_ASIC3_SDIO( _b, u16, HostInformation ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorCtrl ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_LEDCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, LEDCtrl ) /* */ ++#define IPAQ_ASIC3_SDIO_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SDIO( _b, u16, SoftwareReset ) /* */ ++ ++#define IPAQ_ASIC3_MAP_SIZE 0x2000 ++ ++#endif +Index: linux-2.6.26-rc4/include/linux/gpiodev.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/linux/gpiodev.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,44 @@ ++#ifndef __GPIODEV_H ++#define __GPIODEV_H ++ ++#include ++#include ++#include ++ ++/* Interface */ ++ ++/* This structure must be first member of device platform_data structure ++ of a device which provides gpiodev interface. All method pointers ++ must be non-NULL, so stubs must be used for non-implemented ones. */ ++struct gpiodev_ops { ++ int (*get)(struct device *this, unsigned gpio_no); ++ void (*set)(struct device *this, unsigned gpio_no, int val); ++ int (*to_irq)(struct device *this, unsigned gpio_no); ++}; ++ ++/* Generalized GPIO structure */ ++ ++struct gpio { ++ struct device *gpio_dev; ++ unsigned gpio_no; ++}; ++ ++/* API functions */ ++ ++static inline int gpiodev_get_value(struct gpio *gpio) ++{ ++ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data; ++ return ops->get(gpio->gpio_dev, gpio->gpio_no); ++} ++static inline void gpiodev_set_value(struct gpio *gpio, int val) ++{ ++ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data; ++ ops->set(gpio->gpio_dev, gpio->gpio_no, val); ++} ++static inline int gpiodev_to_irq(struct gpio *gpio) ++{ ++ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data; ++ return ops->to_irq(gpio->gpio_dev, gpio->gpio_no); ++} ++ ++#endif /* __GPIODEV_H */ +Index: linux-2.6.26-rc4/include/linux/input_pda.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/linux/input_pda.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,47 @@ ++#ifndef _INPUT_PDA_H ++#define _INPUT_PDA_H ++ ++/* ++ * This is temporary virtual button key codes map ++ * for keyboardless handheld computers. ++ * Its purpose is to provide map common to all devices ++ * and known to work with current software and its bugs ++ * and misfeatures. Once issues with the software are ++ * solved, codes from input.h will be used directly ++ * (missing key definitions will be added). ++ */ ++ ++/* Some directly usable keycodes: ++KEY_POWER - Power/suspend button ++KEY_ENTER - Enter/Action/Central button on joypad ++KEY_UP ++KEY_DOWN ++KEY_LEFT ++KEY_RIGHT ++*/ ++ ++/* XXX Instead of using any values in include/linux/input.h, we have to use ++ use values < 128 due to some munging that kdrive does to get keystrokes. ++ When kdrive gets its key events from evdev instead of the console, ++ we should be able to switch to using input.h values and get rid of ++ xmodmap. */ ++ ++#define _KEY_APP1 KEY_F9 // xmodmap sees 67 + 8 = 75 ++#define _KEY_APP2 KEY_F10 // xmodmap 76 ++#define _KEY_APP3 KEY_F11 // xmodmap 95 ++#define _KEY_APP4 KEY_F12 // xmodmap 96 ++ ++#define _KEY_RECORD KEY_RO ++ ++/* It is highly recommended to use exactly 4 codes above for ++ 4 buttons the device has. This will ensure that console and ++ framebuffer applications (e.g. games) will work ok on all ++ devices. If you'd like more distinguishable names, following ++ convenience defines are provided, suiting many devices. */ ++ ++#define _KEY_CALENDAR _KEY_APP1 ++#define _KEY_CONTACTS _KEY_APP2 ++#define _KEY_MAIL _KEY_APP3 ++#define _KEY_HOMEPAGE _KEY_APP4 ++ ++#endif +Index: linux-2.6.26-rc4/include/linux/soc/asic3_base.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/linux/soc/asic3_base.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,104 @@ ++#include ++#include ++ ++/* Private API - for ASIC3 devices internal use only */ ++#define HDR_IPAQ_ASIC3_ACTION(ACTION,action,fn,FN) \ ++u32 asic3_get_gpio_ ## action ## _ ## fn (struct device *dev); \ ++void asic3_set_gpio_ ## action ## _ ## fn (struct device *dev, u32 bits, u32 val); ++ ++#define HDR_IPAQ_ASIC3_FN(fn,FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( MASK,mask,fn,FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( DIR, dir, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( OUT, out, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( LEVELTRI, trigtype, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( RISING, rising, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( LEVEL, triglevel, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( SLEEP_MASK, sleepmask, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( SLEEP_OUT, sleepout, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( BATT_FAULT_OUT, battfaultout, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( INT_STATUS, intstatus, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( ALT_FUNCTION, alt_fn, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( SLEEP_CONF, sleepconf, fn, FN) \ ++ HDR_IPAQ_ASIC3_ACTION ( STATUS, status, fn, FN) ++ ++/* Public API */ ++ ++#define ASIC3_GPIOA_IRQ_BASE 0 ++#define ASIC3_GPIOB_IRQ_BASE 16 ++#define ASIC3_GPIOC_IRQ_BASE 32 ++#define ASIC3_GPIOD_IRQ_BASE 48 ++#define ASIC3_LED0_IRQ 64 ++#define ASIC3_LED1_IRQ 65 ++#define ASIC3_LED2_IRQ 66 ++#define ASIC3_SPI_IRQ 67 ++#define ASIC3_SMBUS_IRQ 68 ++#define ASIC3_OWM_IRQ 69 ++ ++#define ASIC3_NR_GPIO_IRQS 64 /* 16 bits each GPIO A...D banks */ ++#define ASIC3_NR_IRQS (ASIC3_OWM_IRQ + 1) ++ ++extern int asic3_irq_base(struct device *dev); ++ ++extern void asic3_write_register(struct device *dev, unsigned int reg, ++ u32 value); ++extern u32 asic3_read_register(struct device *dev, unsigned int reg); ++ ++/* old clock api */ ++extern void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val); ++extern u32 asic3_get_clock_cdex(struct device *dev); ++extern void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val); ++ ++extern void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val); ++extern void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val); ++extern void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val); ++ ++extern void asic3_set_led(struct device *dev, int led_num, int duty_time, ++ int cycle_time, int timebase); ++ ++extern int asic3_register_mmc(struct device *dev); ++extern int asic3_unregister_mmc(struct device *dev); ++ ++/* Accessors for GPIO banks */ ++HDR_IPAQ_ASIC3_FN(a, A) ++HDR_IPAQ_ASIC3_FN(b, B) ++HDR_IPAQ_ASIC3_FN(c, C) ++HDR_IPAQ_ASIC3_FN(d, D) ++ ++#define _IPAQ_ASIC3_GPIO_BANK_A 0 ++#define _IPAQ_ASIC3_GPIO_BANK_B 1 ++#define _IPAQ_ASIC3_GPIO_BANK_C 2 ++#define _IPAQ_ASIC3_GPIO_BANK_D 3 ++ ++#define ASIC3_GPIO_bit(gpio) (1 << (gpio & 0xf)) ++ ++extern int asic3_get_gpio_bit(struct device *dev, int gpio); ++extern void asic3_set_gpio_bit(struct device *dev, int gpio, int val); ++extern int asic3_gpio_get_value(struct device *dev, unsigned gpio); ++extern void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val); ++ ++ ++struct tmio_mmc_hwconfig; ++ ++struct asic3_platform_data ++{ ++ // Must be first member ++ struct gpiodev_ops gpiodev_ops; ++ ++ struct { ++ u32 dir; ++ u32 init; ++ u32 sleep_mask; ++ u32 sleep_out; ++ u32 batt_fault_out; ++ u32 sleep_conf; ++ u32 alt_function; ++ } gpio_a, gpio_b, gpio_c, gpio_d; ++ ++ int irq_base; ++ unsigned int bus_shift; ++ ++ struct platform_device **child_platform_devs; ++ int num_child_platform_devs; ++ ++ struct tmio_mmc_hwconfig *tmio_mmc_hwconfig; ++}; +Index: linux-2.6.26-rc4/include/linux/soc/tmio_mmc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/linux/soc/tmio_mmc.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,17 @@ ++#include ++ ++#define MMC_CLOCK_DISABLED 0 ++#define MMC_CLOCK_ENABLED 1 ++ ++#define TMIO_WP_ALWAYS_RW ((void*)-1) ++ ++struct tmio_mmc_hwconfig { ++ void (*hwinit)(struct platform_device *sdev); ++ void (*set_mmc_clock)(struct platform_device *sdev, int state); ++ ++ /* NULL - use ASIC3 signal, ++ TMIO_WP_ALWAYS_RW - assume always R/W (e.g. miniSD) ++ otherwise - machine-specific handler */ ++ int (*mmc_get_ro)(struct platform_device *pdev); ++ short address_shift; ++}; +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa-regs.h +=================================================================== +--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa-regs.h 2008-06-01 18:49:45.000000000 +0100 +@@ -1117,6 +1117,8 @@ + #define PWM_PWDUTY1 __REG(0x40C00004) /* PWM 1 Duty Cycle Register */ + #define PWM_PERVAL1 __REG(0x40C00008) /* PWM 1 Period Control Register */ + ++#define LCCR4_13M_PCD_EN (1<<25) /* 13M PCD enable */ ++#define LCCR4_PCDDIV (1<<31) /* PCD selection */ + + /* + * Interrupt Controller +Index: linux-2.6.26-rc4/drivers/mmc/host/Kconfig +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/mmc/host/Kconfig 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/mmc/host/Kconfig 2008-06-01 18:49:45.000000000 +0100 +@@ -130,3 +130,9 @@ + + If unsure, or if your system has no SPI master driver, say N. + ++config MMC_ASIC3 ++ tristate "HTC ASIC3 SD/MMC support" ++ depends on MMC && HTC_ASIC3 ++ help ++ This provides support for the ASIC3 SD/MMC controller, used ++ in the iPAQ hx4700 and others. +Index: linux-2.6.26-rc4/drivers/mmc/host/Makefile +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/mmc/host/Makefile 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/mmc/host/Makefile 2008-06-01 18:49:45.000000000 +0100 +@@ -13,6 +13,7 @@ + obj-$(CONFIG_MMC_RICOH_MMC) += ricoh_mmc.o + obj-$(CONFIG_MMC_WBSD) += wbsd.o + obj-$(CONFIG_MMC_AU1X) += au1xmmc.o ++obj-$(CONFIG_MMC_ASIC3) += asic3_mmc.o + obj-$(CONFIG_MMC_OMAP) += omap.o + obj-$(CONFIG_MMC_AT91) += at91_mci.o + obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o +Index: linux-2.6.26-rc4/drivers/mmc/host/asic3_mmc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/drivers/mmc/host/asic3_mmc.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,900 @@ ++/* Note that this driver can likely be merged into the tmio driver, so ++ * consider this code temporary. It works, though. ++ */ ++/* ++ * linux/drivers/mmc/asic3_mmc.c ++ * ++ * Copyright (c) 2005 SDG Systems, LLC ++ * ++ * based on tmio_mmc.c ++ * Copyright (C) 2004 Ian Molton ++ * ++ * Refactored to support all ASIC3 devices, 2006 Paul Sokolovsky ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * Driver for the SD / SDIO cell found in: ++ * ++ * TC6393XB ++ * ++ * This driver draws mainly on scattered spec sheets, Reverse engineering ++ * of the toshiba e800 SD driver and some parts of the 2.4 ASIC3 driver (4 bit ++ * support). ++ * ++ * Supports MMC 1 bit transfers and SD 1 and 4 bit modes. ++ * ++ * TODO: ++ * Eliminate FIXMEs ++ * SDIO support ++ * Power management ++ * Handle MMC errors (at all) ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++//#include ++#include ++#include ++//#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include "asic3_mmc.h" ++ ++struct asic3_mmc_host { ++ void *ctl_base; ++ struct device *asic3_dev; /* asic3 device */ ++ struct tmio_mmc_hwconfig *hwconfig; /* HW config data/handlers, guaranteed != NULL */ ++ unsigned long bus_shift; ++ struct mmc_command *cmd; ++ struct mmc_request *mrq; ++ struct mmc_data *data; ++ struct mmc_host *mmc; ++ int irq; ++ unsigned short clock_for_sd; ++ ++ /* I/O related stuff */ ++ struct scatterlist *sg_ptr; ++ unsigned int sg_len; ++ unsigned int sg_off; ++}; ++ ++static void ++mmc_finish_request(struct asic3_mmc_host *host) ++{ ++ struct mmc_request *mrq = host->mrq; ++ ++ /* Write something to end the command */ ++ host->mrq = NULL; ++ host->cmd = NULL; ++ host->data = NULL; ++ ++ mmc_request_done(host->mmc, mrq); ++} ++ ++ ++#define ASIC3_MMC_REG(host, block, reg) (*((volatile u16 *) ((host->ctl_base) + ((_IPAQ_ASIC3_## block ## _Base + _IPAQ_ASIC3_ ## block ## _ ## reg) >> (2 - host->bus_shift))) )) ++ ++static void ++mmc_start_command(struct asic3_mmc_host *host, struct mmc_command *cmd) ++{ ++ struct mmc_data *data = host->data; ++ int c = cmd->opcode; ++ ++ DBG("Opcode: %d, base: %p\n", cmd->opcode, host->ctl_base); ++ ++ if(cmd->opcode == MMC_STOP_TRANSMISSION) { ++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12; ++ cmd->resp[0] = cmd->opcode; ++ cmd->resp[1] = 0; ++ cmd->resp[2] = 0; ++ cmd->resp[3] = 0; ++ cmd->resp[4] = 0; ++ return; ++ } ++ ++ switch(cmd->flags & 0x1f) { ++ case MMC_RSP_NONE: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL; break; ++ case MMC_RSP_R1: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1; break; ++ case MMC_RSP_R1B: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B; break; ++ case MMC_RSP_R2: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2; break; ++ case MMC_RSP_R3: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3; break; ++ default: ++ DBG("Unknown response type %d\n", cmd->flags & 0x1f); ++ break; ++ } ++ ++ host->cmd = cmd; ++ ++ if(cmd->opcode == MMC_APP_CMD) { ++ c |= APP_CMD; ++ } ++ if (cmd->opcode == MMC_GO_IDLE_STATE) { ++ c |= (3 << 8); /* This was removed from ipaq-asic3.h for some reason */ ++ } ++ if(data) { ++ c |= SD_CTRL_COMMAND_DATA_PRESENT; ++ if(data->blocks > 1) { ++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12; ++ c |= SD_CTRL_COMMAND_MULTI_BLOCK; ++ } ++ if(data->flags & MMC_DATA_READ) { ++ c |= SD_CTRL_COMMAND_TRANSFER_READ; ++ } ++ /* MMC_DATA_WRITE does not require a bit to be set */ ++ } ++ ++ /* Enable the command and data interrupts */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~( ++ SD_CTRL_INTMASKCARD_RESPONSE_END ++ | SD_CTRL_INTMASKCARD_RW_END ++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0 ++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0 ++#if 0 ++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3 ++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3 ++#endif ++ ); ++ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = ~( ++ SD_CTRL_INTMASKBUFFER_UNK7 ++ | SD_CTRL_INTMASKBUFFER_CMD_BUSY ++#if 0 ++ | SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR ++ | SD_CTRL_INTMASKBUFFER_CRC_ERROR ++ | SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR ++ | SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT ++ | SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW ++ | SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW ++ | SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT ++ | SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE ++ | SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE ++ | SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS ++#endif ++ ); ++ ++ /* Send the command */ ++ ASIC3_MMC_REG(host, SD_CTRL, Arg1) = cmd->arg >> 16; ++ ASIC3_MMC_REG(host, SD_CTRL, Arg0) = cmd->arg & 0xffff; ++ ASIC3_MMC_REG(host, SD_CTRL, Cmd) = c; ++} ++ ++/* This chip always returns (at least?) as much data as you ask for. I'm ++ * unsure what happens if you ask for less than a block. This should be looked ++ * into to ensure that a funny length read doesnt mess up the controller data ++ * state machine. ++ * ++ * Aric: Statement above may not apply to ASIC3. ++ * ++ * FIXME - this chip cannot do 1 and 2 byte data requests in 4 bit mode ++ * ++ * Aric: Statement above may not apply to ASIC3. ++ */ ++ ++static struct tasklet_struct mmc_data_read_tasklet; ++ ++static void ++mmc_data_transfer(unsigned long h) ++{ ++ struct asic3_mmc_host *host = (struct asic3_mmc_host *)h; ++ struct mmc_data *data = host->data; ++ unsigned short *buf; ++ int count; ++ /* unsigned long flags; */ ++ ++ if(!data){ ++ printk(KERN_WARNING DRIVER_NAME ": Spurious Data IRQ\n"); ++ return; ++ } ++ ++ /* local_irq_save(flags); */ ++ /* buf = kmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */ ++ buf = kmap(host->sg_ptr->page); ++ buf += host->sg_ptr->offset/2 + host->sg_off/2; ++ ++ /* ++ * Ensure we dont read more than one block. The chip will interrupt us ++ * When the next block is available. ++ */ ++ count = host->sg_ptr->length - host->sg_off; ++ if(count > data->blksz) { ++ count = data->blksz; ++ } ++ ++ DBG("count: %08x, page: %p, offset: %08x flags %08x\n", ++ count, host->sg_ptr->page, host->sg_off, data->flags); ++ ++ host->sg_off += count; ++ ++ /* Transfer the data */ ++ if(data->flags & MMC_DATA_READ) { ++ while(count > 0) { ++ /* Read two bytes from SD/MMC controller. */ ++ *buf = ASIC3_MMC_REG(host, SD_CTRL, DataPort); ++ buf++; ++ count -= 2; ++ } ++ //flush_dcache_page(host->sg_ptr->page); ++ } else { ++ while(count > 0) { ++ /* Write two bytes to SD/MMC controller. */ ++ ASIC3_MMC_REG(host, SD_CTRL, DataPort) = *buf; ++ buf++; ++ count -= 2; ++ } ++ } ++ ++ /* kunmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */ ++ kunmap(host->sg_ptr->page); ++ /* local_irq_restore(flags); */ ++ if(host->sg_off == host->sg_ptr->length) { ++ host->sg_ptr++; ++ host->sg_off = 0; ++ --host->sg_len; ++ } ++ ++ return; ++} ++ ++static void ++mmc_data_end_irq(struct asic3_mmc_host *host) ++{ ++ struct mmc_data *data = host->data; ++ ++ host->data = NULL; ++ ++ if(!data){ ++ printk(KERN_WARNING DRIVER_NAME ": Spurious data end IRQ\n"); ++ return; ++ } ++ ++ if (data->error == MMC_ERR_NONE) { ++ data->bytes_xfered = data->blocks * data->blksz; ++ } else { ++ data->bytes_xfered = 0; ++ } ++ ++ DBG("Completed data request\n"); ++ ++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0; ++ ++ /* Make sure read enable interrupt and write enable interrupt are disabled */ ++ if(data->flags & MMC_DATA_READ) { ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE; ++ } else { ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE; ++ } ++ ++ mmc_finish_request(host); ++} ++ ++static void ++mmc_cmd_irq(struct asic3_mmc_host *host, unsigned int buffer_stat) ++{ ++ struct mmc_command *cmd = host->cmd; ++ u8 *buf = (u8 *)cmd->resp; ++ u16 data; ++ ++ if(!host->cmd) { ++ printk(KERN_WARNING DRIVER_NAME ": Spurious CMD irq\n"); ++ return; ++ } ++ ++ host->cmd = NULL; ++ if(cmd->flags & MMC_RSP_PRESENT && cmd->flags & MMC_RSP_136) { ++ /* R2 */ ++ buf[12] = 0xff; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response0); ++ buf[13] = data & 0xff; ++ buf[14] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response1); ++ buf[15] = data & 0xff; ++ buf[8] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response2); ++ buf[9] = data & 0xff; ++ buf[10] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response3); ++ buf[11] = data & 0xff; ++ buf[4] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response4); ++ buf[5] = data & 0xff; ++ buf[6] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response5); ++ buf[7] = data & 0xff; ++ buf[0] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response6); ++ buf[1] = data & 0xff; ++ buf[2] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response7); ++ buf[3] = data & 0xff; ++ } else if(cmd->flags & MMC_RSP_PRESENT) { ++ /* R1, R1B, R3 */ ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response0); ++ buf[0] = data & 0xff; ++ buf[1] = data >> 8; ++ data = ASIC3_MMC_REG(host, SD_CTRL, Response1); ++ buf[2] = data & 0xff; ++ buf[3] = data >> 8; ++ } ++ DBG("Response: %08x %08x %08x %08x\n", cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]); ++ ++ if(buffer_stat & SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT) { ++ cmd->error = MMC_ERR_TIMEOUT; ++ } else if((buffer_stat & SD_CTRL_BUFFERSTATUS_CRC_ERROR) && (cmd->flags & MMC_RSP_CRC)) { ++ cmd->error = MMC_ERR_BADCRC; ++ } else if(buffer_stat & ++ ( ++ SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS ++ | SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR ++ | SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR ++ | SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW ++ | SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW ++ | SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT ++ ) ++ ) { ++ DBG("Buffer status ERROR 0x%04x - inside check buffer\n", buffer_stat); ++ DBG("detail0 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0)); ++ DBG("detail1 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1)); ++ cmd->error = MMC_ERR_FAILED; ++ } ++ ++ if(cmd->error == MMC_ERR_NONE) { ++ switch (cmd->opcode) { ++ case SD_APP_SET_BUS_WIDTH: ++ if(cmd->arg == SD_BUS_WIDTH_4) { ++ host->clock_for_sd = SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD; ++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) = ++ MEM_CARD_OPTION_REQUIRED ++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14) ++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT ++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_4; ++ } else { ++ host->clock_for_sd = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) = ++ MEM_CARD_OPTION_REQUIRED ++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14) ++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT ++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1; ++ } ++ break; ++ case MMC_SELECT_CARD: ++ if((cmd->arg >> 16) == 0) { ++ /* We have been deselected. */ ++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) = ++ MEM_CARD_OPTION_REQUIRED ++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14) ++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT ++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1; ++ } ++ } ++ } ++ ++ /* ++ * If there is data to handle we enable data IRQs here, and we will ++ * ultimatley finish the request in the mmc_data_end_irq handler. ++ */ ++ if(host->data && (cmd->error == MMC_ERR_NONE)){ ++ if(host->data->flags & MMC_DATA_READ) { ++ /* Enable the read enable interrupt */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &= ++ ~SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE; ++ } else { ++ /* Enable the write enable interrupt */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &= ++ ~SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE; ++ } ++ } else { ++ /* There's no data, or we encountered an error, so finish now. */ ++ mmc_finish_request(host); ++ } ++ ++ return; ++} ++ ++static void hwinit2_irqsafe(struct asic3_mmc_host *host); ++ ++static irqreturn_t ++mmc_irq(int irq, void *irq_desc) ++{ ++ struct asic3_mmc_host *host; ++ unsigned int breg, bmask, bstatus, creg, cmask, cstatus; ++ ++ host = irq_desc; ++ ++ /* asic3 bstatus has errors */ ++ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl); ++ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer); ++ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus); ++ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard); ++ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS; ++ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS; ++ ++ if (!breg && !creg) { ++ /* This occurs sometimes for no known reason. It doesn't hurt ++ * anything, so I don't print it. */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &= ~breg; ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) &= ~creg; ++ goto out; ++ } ++ ++ while (breg || creg) { ++ ++ /* XXX TODO: Need to handle errors in breg here. */ ++ ++ /* ++ * Card insert/remove. The mmc controlling code is stateless. That ++ * is, it doesn't care if it was an insert or a remove. It treats ++ * both the same. ++ */ ++ /* XXX Asic3 has _3 versions of these status bits, too, for a second slot, perhaps? */ ++ if (creg & (SD_CTRL_CARDSTATUS_CARD_INSERTED_0 | SD_CTRL_CARDSTATUS_CARD_REMOVED_0)) { ++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &= ++ ~(SD_CTRL_CARDSTATUS_CARD_REMOVED_0 | SD_CTRL_CARDSTATUS_CARD_INSERTED_0); ++ if(creg & SD_CTRL_CARDSTATUS_CARD_INSERTED_0) { ++ hwinit2_irqsafe(host); ++ } ++ mmc_detect_change(host->mmc,1); ++ } ++ ++ /* Command completion */ ++ if (creg & SD_CTRL_CARDSTATUS_RESPONSE_END) { ++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &= ++ ~(SD_CTRL_CARDSTATUS_RESPONSE_END); ++ mmc_cmd_irq(host, bstatus); ++ } ++ ++ /* Data transfer */ ++ if (breg & (SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE)) { ++ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) &= ++ ~(SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE); ++ tasklet_schedule(&mmc_data_read_tasklet); ++ } ++ ++ /* Data transfer completion */ ++ if (creg & SD_CTRL_CARDSTATUS_RW_END) { ++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &= ~(SD_CTRL_CARDSTATUS_RW_END); ++ mmc_data_end_irq(host); ++ } ++ ++ /* Check status - keep going until we've handled it all */ ++ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl); ++ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer); ++ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus); ++ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard); ++ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS; ++ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS; ++ } ++ ++out: ++ /* Ensure all interrupt sources are cleared */ ++ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0; ++ return IRQ_HANDLED; ++} ++ ++static void ++mmc_start_data(struct asic3_mmc_host *host, struct mmc_data *data) ++{ ++ DBG("setup data transfer: blocksize %08x nr_blocks %d, page: %08x, offset: %08x\n", data->blksz, ++ data->blocks, (int)data->sg->page, data->sg->offset); ++ ++ host->sg_len = data->sg_len; ++ host->sg_ptr = data->sg; ++ host->sg_off = 0; ++ host->data = data; ++ ++ /* Set transfer length and blocksize */ ++ ASIC3_MMC_REG(host, SD_CTRL, TransferSectorCount) = data->blocks; ++ ASIC3_MMC_REG(host, SD_CTRL, MemCardXferDataLen) = data->blksz; ++} ++ ++/* Process requests from the MMC layer */ ++static void ++mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) ++{ ++ struct asic3_mmc_host *host = mmc_priv(mmc); ++ ++ WARN_ON(host->mrq != NULL); ++ ++ host->mrq = mrq; ++ ++ /* If we're performing a data request we need to setup some ++ extra information */ ++ if(mrq->data) { ++ mmc_start_data(host, mrq->data); ++ } ++ ++ mmc_start_command(host, mrq->cmd); ++} ++ ++/* Set MMC clock / power. ++ * Note: This controller uses a simple divider scheme therefore it cannot run ++ * a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as MMC ++ * wont run that fast, it has to be clocked at 12MHz which is the next slowest ++ * setting. This is likely not an issue because we are doing single 16-bit ++ * writes for data I/O. ++ */ ++static void ++mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ++{ ++ struct asic3_mmc_host *host = mmc_priv(mmc); ++ u32 clk = 0; ++ ++ DBG("clock %uHz busmode %u powermode %u Vdd %u\n", ++ ios->clock, ios->bus_mode, ios->power_mode, ios->vdd); ++ ++ if (ios->clock) { ++ clk = 0x80; /* slowest by default */ ++ if(ios->clock >= 24000000 / 256) clk >>= 1; ++ if(ios->clock >= 24000000 / 128) clk >>= 1; ++ if(ios->clock >= 24000000 / 64) clk >>= 1; ++ if(ios->clock >= 24000000 / 32) clk >>= 1; ++ if(ios->clock >= 24000000 / 16) clk >>= 1; ++ if(ios->clock >= 24000000 / 8) clk >>= 1; ++ if(ios->clock >= 24000000 / 4) clk >>= 1; ++ if(ios->clock >= 24000000 / 2) clk >>= 1; ++ if(ios->clock >= 24000000 / 1) clk >>= 1; ++ if(clk == 0) { /* For fastest speed we disable the divider. */ ++ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0; ++ } else { ++ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 1; ++ } ++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = ++ host->clock_for_sd ++ | SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK ++ | clk; ++ msleep(10); ++ } else { ++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0; ++ } ++ ++ switch (ios->power_mode) { ++ case MMC_POWER_OFF: ++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0; ++ msleep(1); ++ break; ++ case MMC_POWER_UP: ++ break; ++ case MMC_POWER_ON: ++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = SD_CONFIG_POWER1_PC_33V; ++ msleep(20); ++ break; ++ } ++} ++ ++static int ++mmc_get_ro(struct mmc_host *mmc) ++{ ++ struct asic3_mmc_host *host = mmc_priv(mmc); ++ ++ /* Call custom handler for RO status */ ++ if(host->hwconfig->mmc_get_ro) { ++ /* Special case for cards w/o WP lock (like miniSD) */ ++ if (host->hwconfig->mmc_get_ro == (void*)-1) { ++ return 0; ++ } else { ++ struct platform_device *pdev = to_platform_device(mmc_dev(mmc)); ++ return host->hwconfig->mmc_get_ro(pdev); ++ } ++ } ++ ++ /* WRITE_PROTECT is active low */ ++ return (ASIC3_MMC_REG(host, SD_CTRL, CardStatus) & SD_CTRL_CARDSTATUS_WRITE_PROTECT)?0:1; ++} ++ ++static struct mmc_host_ops mmc_ops = { ++ .request = mmc_request, ++ .set_ios = mmc_set_ios, ++ .get_ro = mmc_get_ro, ++}; ++ ++static void ++hwinit2_irqsafe(struct asic3_mmc_host *host) ++{ ++ ASIC3_MMC_REG(host, SD_CONFIG, Addr1) = 0x0000; ++ ASIC3_MMC_REG(host, SD_CONFIG, Addr0) = 0x0800; ++ ++ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = SD_CONFIG_CLKSTOP_ENABLE_ALL; ++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_CardDetect) = 2; ++ ASIC3_MMC_REG(host, SD_CONFIG, Command) = SD_CONFIG_COMMAND_MAE; ++ ++ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 0; /* reset on */ ++ mdelay(2); ++ ++ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 1; /* reset off */ ++ mdelay(2); ++ ++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) = ++ MEM_CARD_OPTION_REQUIRED ++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14) ++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT ++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1 ++ ; ++ host->clock_for_sd = 0; ++ ++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0; ++ ++ ASIC3_MMC_REG(host, SDIO_CTRL, ClocknWaitCtrl) = 0x100; ++ /* *((unsigned short *)(((char *)host->ctl_base) + 0x938)) = 0x100; */ ++ ++ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0; ++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0; ++ ++ mdelay(1); ++ ++ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~( ++ SD_CTRL_INTMASKCARD_RESPONSE_END ++ | SD_CTRL_INTMASKCARD_RW_END ++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0 ++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0 ++#if 0 ++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3 ++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3 ++#endif ++ ) ++ ; /* check */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = 0xffff; /* IRQs off */ ++ ++ /* ++ * ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = SD_CTRL_TRANSACTIONCONTROL_SET; ++ * Wince has 0x1000 ++ */ ++ /* ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = 0x1000; */ ++ ++ ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SDPWR, ASIC3_SDHWCTRL_SDPWR); /* turn on power at controller(?) */ ++ ++} ++ ++static void ++hwinit(struct asic3_mmc_host *host, struct platform_device *pdev) ++{ ++ /* Call custom handler for enabling clock (if needed) */ ++ if(host->hwconfig->set_mmc_clock) ++ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_ENABLED); ++ ++ /* Not sure if it must be done bit by bit, but leaving as-is */ ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVCD, ASIC3_SDHWCTRL_LEVCD); ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVWP, ASIC3_SDHWCTRL_LEVWP); ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0); ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_PCLR, 0); ++ ++ asic3_set_clock_cdex (host->asic3_dev, ++ CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0, CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0); ++ msleep(1); ++ ++ asic3_set_clock_sel (host->asic3_dev, ++ CLOCK_SEL_SD_HCLK_SEL | CLOCK_SEL_SD_BCLK_SEL, ++ CLOCK_SEL_SD_HCLK_SEL | 0); /* ? */ ++ ++ asic3_set_clock_cdex (host->asic3_dev, ++ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS, ++ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS); ++ msleep(1); ++ ++ asic3_set_extcf_select(host->asic3_dev, ASIC3_EXTCF_SD_MEM_ENABLE, ASIC3_EXTCF_SD_MEM_ENABLE); ++ ++ /* Long Delay */ ++ if( !machine_is_h4700()) ++ msleep(500); ++ ++ hwinit2_irqsafe(host); ++} ++ ++#ifdef CONFIG_PM ++static int ++mmc_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct mmc_host *mmc = platform_get_drvdata(pdev); ++ struct asic3_mmc_host *host = mmc_priv(mmc); ++ int ret; ++ ++ ret = mmc_suspend_host(mmc, state); ++ ++ if (ret) { ++ printk(KERN_ERR DRIVER_NAME ": Could not suspend MMC host, hardware not suspended"); ++ return ret; ++ } ++ ++ /* disable the card insert / remove interrupt while sleeping */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~( ++ SD_CTRL_INTMASKCARD_RESPONSE_END ++ | SD_CTRL_INTMASKCARD_RW_END); ++ ++ /* disable clock */ ++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0; ++ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = 0; ++ ++ /* power down */ ++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0; ++ ++ asic3_set_clock_cdex (host->asic3_dev, ++ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS, 0); ++ ++ /* disable core clock */ ++ if(host->hwconfig->set_mmc_clock) ++ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_DISABLED); ++ ++ /* Put in suspend mode */ ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, ASIC3_SDHWCTRL_SUSPEND); ++ return 0; ++} ++ ++static int ++mmc_resume(struct platform_device *pdev) ++{ ++ struct mmc_host *mmc = platform_get_drvdata(pdev); ++ struct asic3_mmc_host *host = mmc_priv(mmc); ++ ++ printk(KERN_INFO "%s: starting resume\n", DRIVER_NAME); ++ ++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0); ++ hwinit(host, pdev); ++ ++ /* re-enable card remove / insert interrupt */ ++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~( ++ SD_CTRL_INTMASKCARD_RESPONSE_END ++ | SD_CTRL_INTMASKCARD_RW_END ++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0 ++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0 ); ++ ++ mmc_resume_host(mmc); ++ ++ printk(KERN_INFO "%s: finished resume\n", DRIVER_NAME); ++ return 0; ++} ++#endif ++ ++static int ++mmc_probe(struct platform_device *pdev) ++{ ++ struct mmc_host *mmc; ++ struct asic3_mmc_host *host = NULL; ++ int retval = 0; ++ struct tmio_mmc_hwconfig *mmc_config = (struct tmio_mmc_hwconfig *)pdev->dev.platform_data; ++ ++ /* bus_shift is mandatory */ ++ if (!mmc_config) { ++ printk(KERN_ERR DRIVER_NAME ": Invalid configuration\n"); ++ return -EINVAL; ++ } ++ ++ mmc = mmc_alloc_host(sizeof(struct asic3_mmc_host) + 128, &pdev->dev); ++ if (!mmc) { ++ retval = -ENOMEM; ++ goto exceptional_return; ++ } ++ ++ host = mmc_priv(mmc); ++ host->mmc = mmc; ++ platform_set_drvdata(pdev, mmc); ++ ++ host->ctl_base = 0; ++ host->hwconfig = mmc_config; ++ host->bus_shift = mmc_config->address_shift; ++ host->asic3_dev = pdev->dev.parent; ++ host->clock_for_sd = 0; ++ ++ tasklet_init(&mmc_data_read_tasklet, mmc_data_transfer, (unsigned long)host); ++ ++ host->ctl_base = ioremap_nocache ((unsigned long)pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start); ++ if(!host->ctl_base){ ++ printk(KERN_ERR DRIVER_NAME ": Could not map ASIC3 SD controller\n"); ++ retval = -ENODEV; ++ goto exceptional_return; ++ } ++ ++ printk(DRIVER_NAME ": ASIC3 MMC/SD Driver, controller at 0x%lx\n", (unsigned long)pdev->resource[0].start); ++ ++ mmc->ops = &mmc_ops; ++ mmc->caps = MMC_CAP_4_BIT_DATA; ++ mmc->f_min = 46875; /* ARIC: not sure what these should be */ ++ mmc->f_max = 24000000; /* ARIC: not sure what these should be */ ++ mmc->ocr_avail = MMC_VDD_32_33; ++ ++ hwinit(host, pdev); ++ ++ ++ host->irq = pdev->resource[1].start; ++ ++ retval = request_irq(host->irq, mmc_irq, 0, DRIVER_NAME, host); ++ if(retval) { ++ printk(KERN_ERR DRIVER_NAME ": Unable to get interrupt\n"); ++ retval = -ENODEV; ++ goto exceptional_return; ++ } ++ set_irq_type(host->irq, IRQT_FALLING); ++ ++ mmc_add_host(mmc); ++ ++#ifdef CONFIG_PM ++ // resume_timer.function = resume_timer_callback; ++ // resume_timer.data = 0; ++ // init_timer(&resume_timer); ++#endif ++ ++ return 0; ++ ++exceptional_return: ++ if (mmc) { ++ mmc_free_host(mmc); ++ } ++ if(host && host->ctl_base) iounmap(host->ctl_base); ++ return retval; ++} ++ ++static int ++mmc_remove(struct platform_device *pdev) ++{ ++ struct mmc_host *mmc = platform_get_drvdata(pdev); ++ ++ platform_set_drvdata(pdev, NULL); ++ ++ if (mmc) { ++ struct asic3_mmc_host *host = mmc_priv(mmc); ++ mmc_remove_host(mmc); ++ free_irq(host->irq, host); ++ /* FIXME - we might want to consider stopping the chip here... */ ++ iounmap(host->ctl_base); ++ mmc_free_host(mmc); /* FIXME - why does this call hang? */ ++ } ++ return 0; ++} ++ ++/* ------------------- device registration ----------------------- */ ++ ++static struct platform_driver mmc_asic3_driver = { ++ .driver = { ++ .name = DRIVER_NAME, ++ }, ++ .probe = mmc_probe, ++ .remove = mmc_remove, ++#ifdef CONFIG_PM ++ .suspend = mmc_suspend, ++ .resume = mmc_resume, ++#endif ++}; ++ ++static int __init mmc_init(void) ++{ ++ return platform_driver_register(&mmc_asic3_driver); ++} ++ ++static void __exit mmc_exit(void) ++{ ++ platform_driver_unregister(&mmc_asic3_driver); ++} ++ ++late_initcall(mmc_init); ++module_exit(mmc_exit); ++ ++MODULE_DESCRIPTION("HTC ASIC3 SD/MMC driver"); ++MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC"); ++MODULE_LICENSE("GPL"); ++ +Index: linux-2.6.26-rc4/drivers/mmc/host/asic3_mmc.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/drivers/mmc/host/asic3_mmc.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,25 @@ ++#ifndef __ASIC3_MMC_H ++#define __ASIC3_MMC_H ++ ++#define DRIVER_NAME "asic3_mmc" ++ ++#ifdef CONFIG_MMC_DEBUG ++#define DBG(x...) printk(DRIVER_NAME ": " x) ++#else ++#define DBG(x...) do { } while (0) ++#endif ++ ++/* Response types */ ++#define APP_CMD 0x0040 ++ ++#define SD_CONFIG_CLKSTOP_ENABLE_ALL 0x1f ++ ++#define DONT_CARE_CARD_BITS ( \ ++ SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 \ ++ | SD_CTRL_INTMASKCARD_WRITE_PROTECT \ ++ | SD_CTRL_INTMASKCARD_UNK6 \ ++ | SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 \ ++ ) ++#define DONT_CARE_BUFFER_BITS ( SD_CTRL_INTMASKBUFFER_UNK7 | SD_CTRL_INTMASKBUFFER_CMD_BUSY ) ++ ++#endif // __ASIC3_MMC_H +Index: linux-2.6.26-rc4/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/input/keyboard/Makefile 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/input/keyboard/Makefile 2008-06-01 18:52:37.000000000 +0100 +@@ -15,6 +15,7 @@ + obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o + obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o + obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o ++obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o + obj-$(CONFIG_KEYBOARD_TOSA) += tosakbd.o + obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o + obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o +Index: linux-2.6.26-rc4/drivers/input/keyboard/asic3_keys.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/drivers/input/keyboard/asic3_keys.c 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,131 @@ ++/* ++ * Generic buttons driver for ASIC3 SoC. ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * Copyright (C) 2003 Joshua Wise ++ * Copyright (C) 2005 Pawel Kolodziejski ++ * Copyright (C) 2006 Paul Sokolovsky ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static irqreturn_t asic3_keys_asic_handle(int irq, void *data) ++{ ++ struct asic3_keys_platform_data *pdata = data; ++ int i, base_irq; ++ ++ base_irq = asic3_irq_base(pdata->asic3_dev); ++ for (i = 0; i < pdata->nbuttons; i++) { ++ struct asic3_keys_button *b = &pdata->buttons[i]; ++ if ((base_irq + b->gpio) == irq) { ++ int state = !!asic3_gpio_get_value(pdata->asic3_dev, b->gpio); ++ ++ if (pdata->buttons[i].type == EV_SW) ++ input_report_switch(pdata->input, pdata->buttons[i].keycode, state ^ b->active_low); ++ else ++ input_report_key(pdata->input, b->keycode, state ^ b->active_low); ++ input_sync(pdata->input); ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static int __devinit asic3_keys_probe(struct platform_device *pdev) ++{ ++ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data; ++ int i, base_irq; ++ int j, ret; ++ ++ pdata->input = input_allocate_device(); ++ ++ base_irq = asic3_irq_base(pdata->asic3_dev); ++ ++ for (i = 0; i < pdata->nbuttons; i++) { ++ struct asic3_keys_button *b = &pdata->buttons[i]; ++ set_bit(b->keycode, pdata->input->keybit); ++ ret=request_irq(base_irq + b->gpio, asic3_keys_asic_handle, SA_SAMPLE_RANDOM, b->desc, pdata); ++ if (ret) ++ { ++ printk(KERN_NOTICE "Failed to allocate asic3_keys irq=%d.\n",b->gpio); ++ ++ for(j=0; jbuttons[i].gpio, NULL); ++ ++ input_unregister_device (pdata->input); ++ ++ return -ENODEV; ++ } ++ ++ set_irq_type(base_irq + b->gpio, IRQT_BOTHEDGE); ++ if (pdata->buttons[i].type == EV_SW) { ++ pdata->input->evbit[0] |= BIT(EV_SW); ++ set_bit(b->keycode, pdata->input->swbit); ++ } else { ++ pdata->input->evbit[0] |= BIT(EV_KEY); ++ set_bit(b->keycode, pdata->input->keybit); ++ } ++ } ++ ++ pdata->input->name = pdev->name; ++ input_register_device(pdata->input); ++ ++ return 0; ++} ++ ++static int __devexit asic3_keys_remove(struct platform_device *pdev) ++{ ++ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data; ++ int i, base_irq; ++ ++ base_irq = asic3_irq_base(pdata->asic3_dev); ++ for (i = 0; i < pdata->nbuttons; i++) { ++ free_irq(base_irq + pdata->buttons[i].gpio, NULL); ++ } ++ ++ input_unregister_device(pdata->input); ++ ++ return 0; ++} ++ ++ ++static struct platform_driver asic3_keys_driver = { ++ .probe = asic3_keys_probe, ++ .remove = __devexit_p(asic3_keys_remove), ++ .driver = { ++ .name = "asic3-keys", ++ }, ++}; ++ ++static int __init asic3_keys_init(void) ++{ ++ return platform_driver_register(&asic3_keys_driver); ++} ++ ++static void __exit asic3_keys_exit(void) ++{ ++ platform_driver_unregister(&asic3_keys_driver); ++} ++ ++module_init(asic3_keys_init); ++module_exit(asic3_keys_exit); ++ ++MODULE_AUTHOR("Joshua Wise, Pawel Kolodziejski, Paul Sokolovsky"); ++MODULE_DESCRIPTION("Buttons driver for HTC ASIC3 SoC"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/irqs.h +=================================================================== +--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/irqs.h 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/irqs.h 2008-06-01 18:49:45.000000000 +0100 +@@ -184,6 +184,8 @@ + defined(CONFIG_MACH_PCM027) || \ + defined(CONFIG_MACH_MAGICIAN) + #define NR_IRQS (IRQ_BOARD_END) ++#elif defined(CONFIG_MACH_HTCUNIVERSAL) ++#define NR_IRQS (IRQ_BOARD_START + 96) + #else + #define NR_IRQS (IRQ_BOARD_START) + #endif +Index: linux-2.6.26-rc4/include/linux/ioport.h +=================================================================== +--- linux-2.6.26-rc4.orig/include/linux/ioport.h 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/include/linux/ioport.h 2008-06-01 18:49:45.000000000 +0100 +@@ -59,6 +59,7 @@ + #define IORESOURCE_IRQ_HIGHLEVEL (1<<2) + #define IORESOURCE_IRQ_LOWLEVEL (1<<3) + #define IORESOURCE_IRQ_SHAREABLE (1<<4) ++#define IORESOURCE_IRQ_SOC_SUBDEVICE (1<<5) + + /* ISA PnP DMA specific bits (IORESOURCE_BITS) */ + #define IORESOURCE_DMA_TYPE_MASK (3<<0) +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/serial.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/serial.h 2008-06-01 18:49:45.000000000 +0100 +@@ -0,0 +1,78 @@ ++/* ++ * linux/include/asm-arm/arch-pxa/serial.h ++ * ++ * Author: Nicolas Pitre ++ * Copyright: (C) 2001 MontaVista Software Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++ ++#define BAUD_BASE 921600 ++ ++/* Standard COM flags */ ++#define STD_COM_FLAGS (ASYNC_SKIP_TEST) ++ ++#define STD_SERIAL_PORT_DEFNS \ ++ { \ ++ type: PORT_PXA, \ ++ xmit_fifo_size: 64, \ ++ baud_base: BAUD_BASE, \ ++ iomem_base: &FFUART, \ ++ iomem_reg_shift: 2, \ ++ io_type: SERIAL_IO_MEM, \ ++ irq: IRQ_FFUART, \ ++ flags: STD_COM_FLAGS, \ ++ }, { \ ++ type: PORT_PXA, \ ++ xmit_fifo_size: 64, \ ++ baud_base: BAUD_BASE, \ ++ iomem_base: &STUART, \ ++ iomem_reg_shift: 2, \ ++ io_type: SERIAL_IO_MEM, \ ++ irq: IRQ_STUART, \ ++ flags: STD_COM_FLAGS, \ ++ }, { \ ++ type: PORT_PXA, \ ++ xmit_fifo_size: 64, \ ++ baud_base: BAUD_BASE, \ ++ iomem_base: &BTUART, \ ++ iomem_reg_shift: 2, \ ++ io_type: SERIAL_IO_MEM, \ ++ irq: IRQ_BTUART, \ ++ flags: STD_COM_FLAGS, \ ++ } ++ ++#define EXTRA_SERIAL_PORT_DEFNS ++ ++struct platform_pxa_serial_funcs { ++ ++ /* Initialize whatever is connected to this serial port. */ ++ void (*configure)(int state); ++#define PXA_UART_CFG_PRE_STARTUP 0 ++#define PXA_UART_CFG_POST_STARTUP 1 ++#define PXA_UART_CFG_PRE_SHUTDOWN 2 ++#define PXA_UART_CFG_POST_SHUTDOWN 3 ++ ++ /* Enable or disable the individual transmitter/receiver submodules. ++ * On transceivers without echo cancellation (e.g. SIR) ++ * transmitter always has priority; e.g. if both bits are set, ++ * only the transmitter is enabled. */ ++ void (*set_txrx)(int txrx); ++#define PXA_SERIAL_TX 1 ++#define PXA_SERIAL_RX 2 ++ ++ /* Get the current state of tx/rx. */ ++ int (*get_txrx)(void); ++ ++ int (*suspend)(struct platform_device *dev, pm_message_t state); ++ int (*resume)(struct platform_device *dev); ++}; ++ ++void pxa_set_ffuart_info(struct platform_pxa_serial_funcs *ffuart_funcs); ++void pxa_set_btuart_info(struct platform_pxa_serial_funcs *btuart_funcs); ++void pxa_set_stuart_info(struct platform_pxa_serial_funcs *stuart_funcs); ++void pxa_set_hwuart_info(struct platform_pxa_serial_funcs *hwuart_funcs); +Index: linux-2.6.26-rc4/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/serial/pxa.c 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/serial/pxa.c 2008-06-01 18:49:45.000000000 +0100 +@@ -47,6 +47,7 @@ + #include + #include + #include ++#include + #include + + +@@ -60,6 +61,14 @@ + char *name; + }; + ++ ++#define IS_METHOD(dev, method) (dev && (dev)->platform_data && ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method) ++#define METHOD_CALL(dev, method) \ ++ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method() ++#define SAFE_METHOD_CALL(dev, method, args...) \ ++ if (IS_METHOD(dev, method)) \ ++ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method(args) ++ + static inline unsigned int serial_in(struct uart_pxa_port *up, int offset) + { + offset <<= 2; +@@ -347,6 +356,9 @@ + unsigned long flags; + int retval; + ++ /* Perform platform-specific port initialization, if needed. */ ++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_STARTUP); ++ + if (port->line == 3) /* HWUART */ + up->mcr |= UART_MCR_AFE; + else +@@ -404,6 +416,12 @@ + (void) serial_in(up, UART_IIR); + (void) serial_in(up, UART_MSR); + ++ /* ++ * Perform platform-specific port initialization if needed ++ */ ++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_STARTUP); ++ SAFE_METHOD_CALL(port->dev, set_txrx, PXA_SERIAL_RX); ++ + return 0; + } + +@@ -412,6 +430,8 @@ + struct uart_pxa_port *up = (struct uart_pxa_port *)port; + unsigned long flags; + ++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_SHUTDOWN); ++ + free_irq(up->port.irq, up); + + /* +@@ -433,6 +453,8 @@ + UART_FCR_CLEAR_RCVR | + UART_FCR_CLEAR_XMIT); + serial_out(up, UART_FCR, 0); ++ ++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_SHUTDOWN); + } + + static void +Index: linux-2.6.26-rc4/drivers/leds/Makefile +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/leds/Makefile 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/leds/Makefile 2008-06-01 18:49:45.000000000 +0100 +@@ -14,6 +14,7 @@ + obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o + obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o + obj-$(CONFIG_LEDS_H1940) += leds-h1940.o ++obj-$(CONFIG_LEDS_ASIC3) += leds-asic3.o + obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o + obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o + obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o +Index: linux-2.6.26-rc4/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/input/keyboard/Kconfig 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/input/keyboard/Kconfig 2008-06-01 18:52:13.000000000 +0100 +@@ -132,6 +132,13 @@ + To compile this driver as a module, choose M here: the + module will be called stowaway. + ++config KEYBOARD_ASIC3 ++ tristate "Buttons on ASIC3 SoC GPIOs (iPaqs, etc.)" ++ depends on HTC_ASIC3 ++ help ++ This enables support for the buttons attached to GPIOs of ++ HTC ASIC3 peripheral controller. ++ + config KEYBOARD_CORGI + tristate "Corgi keyboard" + depends on PXA_SHARPSL diff --git a/packages/linux/linux-rp-2.6.26/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.26/pxa-serial-hack.patch new file mode 100644 index 0000000000..bf20f46a05 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/pxa-serial-hack.patch @@ -0,0 +1,90 @@ +--- + drivers/serial/8250.c | 5 +++++ + drivers/serial/serial_core.c | 1 + + drivers/serial/serial_cs.c | 12 +++++++++--- + include/linux/serial_core.h | 1 + + 4 files changed, 16 insertions(+), 3 deletions(-) + +Index: linux-2.6.20/drivers/serial/8250.c +=================================================================== +--- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100 ++++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100 +@@ -2429,7 +2429,12 @@ + .driver_name = "serial", + .dev_name = "ttyS", + .major = TTY_MAJOR, ++#ifdef CONFIG_SERIAL_PXA ++ .minor = 64 + 4, ++ .name_base = 4, ++#else + .minor = 64, ++#endif + .nr = UART_NR, + .cons = SERIAL8250_CONSOLE, + }; +Index: linux-2.6.20/drivers/serial/serial_core.c +=================================================================== +--- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000 ++++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100 +@@ -2068,7 +2068,8 @@ + printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n", + port->dev ? port->dev->bus_id : "", + port->dev ? ": " : "", +- drv->dev_name, port->line, address, port->irq, uart_type(port)); ++ drv->dev_name, port->line + drv->name_base, address, port->irq, ++ uart_type(port)); + } + + static void +@@ -2183,6 +2184,7 @@ + normal->owner = drv->owner; + normal->driver_name = drv->driver_name; + normal->name = drv->dev_name; ++ normal->name_base = drv->name_base; + normal->major = drv->major; + normal->minor_start = drv->minor; + normal->type = TTY_DRIVER_TYPE_SERIAL; +Index: linux-2.6.20/include/linux/serial_core.h +=================================================================== +--- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000 ++++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100 +@@ -341,6 +341,7 @@ + struct module *owner; + const char *driver_name; + const char *dev_name; ++ int name_base; + int major; + int minor; + int nr; +Index: linux-2.6.20/drivers/serial/serial_cs.c +=================================================================== +--- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000 ++++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100 +@@ -390,7 +390,7 @@ + kio_addr_t iobase, int irq) + { + struct uart_port port; +- int line; ++ int line, linestart; + + memset(&port, 0, sizeof (struct uart_port)); + port.iobase = iobase; +@@ -411,10 +411,16 @@ + return -EINVAL; + } + ++#if CONFIG_SERIAL_PXA ++ linestart = 4; ++#else ++ linestart = 0; ++#endif ++ + info->line[info->ndev] = line; +- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line); ++ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart); + info->node[info->ndev].major = TTY_MAJOR; +- info->node[info->ndev].minor = 0x40 + line; ++ info->node[info->ndev].minor = 0x40 + line + linestart; + if (info->ndev > 0) + info->node[info->ndev - 1].next = &info->node[info->ndev]; + info->ndev++; diff --git a/packages/linux/linux-rp-2.6.26/pxa_fb_overlay.patch b/packages/linux/linux-rp-2.6.26/pxa_fb_overlay.patch new file mode 100644 index 0000000000..49c59b3275 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/pxa_fb_overlay.patch @@ -0,0 +1,26 @@ +--- + drivers/video/pxafb.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: linux-2.6.22/drivers/video/pxafb.h +=================================================================== +--- linux-2.6.22.orig/drivers/video/pxafb.h 2007-09-25 15:44:42.000000000 +0200 ++++ linux-2.6.22/drivers/video/pxafb.h 2007-09-25 15:45:07.000000000 +0200 +@@ -36,7 +36,7 @@ + struct fb_bitfield transp; + }; + +-#ifdef CONFIG_PXA27x ++#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) + /* PXA Overlay Framebuffer Support */ + struct overlayfb_info + { +@@ -142,7 +142,7 @@ + wait_queue_head_t ctrlr_wait; + struct work_struct task; + +-#ifdef CONFIG_PXA27x ++#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) + /* PXA Overlay Framebuffer Support */ + struct overlayfb_info *overlay1fb; + struct overlayfb_info *overlay2fb; diff --git a/packages/linux/linux-rp-2.6.26/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.26/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch new file mode 100644 index 0000000000..b513ba1466 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch @@ -0,0 +1,155 @@ + +From: Petr Vandrovec + +Patch below adds support for using different prescaler than 16 for 16c950 +chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash +card, which comes (apparently) with 806kHz clocks, and so you have to +program prescaler for division by 7, and DLAB to 1, to get 115200Bd. + +To get card properly running you also have to add lines below to +/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but +50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code +specifying baud_rate in serial_cs, I assume that specifying it in +serial.opts is right way to do this type of things. + +Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible +baud rate passed to uart code was uartclk / 16 while correct value for +these devices (and for 16c950) is uartclk / 4. + +Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with +baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such +devices exist, but we should not ignore spd_cust, user probably knows why +he asked for spd_cust. + +serial.opts: + +case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in +'0279,950b-2-GPRS Modem---') + SERIAL_OPTS="baud_base 50400" + ;; +esac + +Cc: David Woodhouse +Signed-off-by: Andrew Morton +--- + + drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 64 insertions(+), 18 deletions(-) + +Index: linux-2.6.21/drivers/serial/8250.c +=================================================================== +--- linux-2.6.21.orig/drivers/serial/8250.c 2007-07-01 16:59:52.000000000 +0100 ++++ linux-2.6.21/drivers/serial/8250.c 2007-07-01 17:01:21.000000000 +0100 +@@ -1964,24 +1964,58 @@ static void serial8250_shutdown(struct u + serial_unlink_irq_chain(up); + } + +-static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud) ++static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud, ++ unsigned int *prescaler) + { +- unsigned int quot; +- +- /* +- * Handle magic divisors for baud rates above baud_base on +- * SMSC SuperIO chips. ++ /* ++ * Use special handling only if user did not supply its own divider. ++ * spd_cust is defined in terms of baud_base, so always use default ++ * prescaler when spd_cust is requested. + */ +- if ((port->flags & UPF_MAGIC_MULTIPLIER) && +- baud == (port->uartclk/4)) +- quot = 0x8001; +- else if ((port->flags & UPF_MAGIC_MULTIPLIER) && +- baud == (port->uartclk/8)) +- quot = 0x8002; +- else +- quot = uart_get_divisor(port, baud); + +- return quot; ++ *prescaler = 16; ++ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) { ++ unsigned int quot = port->uartclk / baud; ++ ++ /* ++ * Handle magic divisors for baud rates above baud_base on ++ * SMSC SuperIO chips. ++ */ ++ if (port->flags & UPF_MAGIC_MULTIPLIER) { ++ if (quot == 4) { ++ return 0x8001; ++ } else if (quot == 8) { ++ return 0x8002; ++ } ++ } ++ if (port->type == PORT_16C950) { ++ /* ++ * This computes TCR value (4 to 16), not CPR value (which can ++ * be between 1.000 and 31.875) - chip I have uses XTAL of ++ * 806400Hz, and so a division by 7 is required to get 115200Bd. ++ * I'm leaving CPR disabled for now, until someone will ++ * hit even more exotic XTAL (it is needed to get 500kbps ++ * or 1000kbps from 18.432MHz XTAL, but I have no device ++ * which would benefit from doing that). ++ * ++ * If we can use divide by 16, use it. Otherwise look for ++ * better prescaler, from 15 to 4. If quotient cannot ++ * be divided by any integer value between 4 and 15, use 4. ++ */ ++ if (quot & 0x0F) { ++ unsigned int div; ++ ++ for (div = 15; div > 4; div--) { ++ if (quot % div == 0) { ++ break; ++ } ++ } ++ *prescaler = div; ++ return quot / div; ++ } ++ } ++ } ++ return uart_get_divisor(port, baud); + } + + static void +@@ -1991,7 +2025,7 @@ serial8250_set_termios(struct uart_port + struct uart_8250_port *up = (struct uart_8250_port *)port; + unsigned char cval, fcr = 0; + unsigned long flags; +- unsigned int baud, quot; ++ unsigned int baud, quot, prescaler; + + switch (termios->c_cflag & CSIZE) { + case CS5: +@@ -2023,8 +2057,13 @@ serial8250_set_termios(struct uart_port + /* + * Ask the core to calculate the divisor for us. + */ +- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); +- quot = serial8250_get_divisor(port, baud); ++ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) { ++ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4); ++ } else { ++ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); ++ } ++ quot = serial8250_get_divisor(port, baud, &prescaler); ++ + + /* + * Oxford Semi 952 rev B workaround +@@ -2139,6 +2178,13 @@ serial8250_set_termios(struct uart_port + serial_dl_write(up, quot); + + /* ++ * Program prescaler for 16C950 chips. ++ */ ++ if (up->port.type == PORT_16C950) { ++ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler); ++ } ++ ++ /* + * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR + * is written without DLAB set, this mode will be disabled. + */ diff --git a/packages/linux/linux-rp-2.6.26/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.26/sharpsl-rc-r1.patch new file mode 100644 index 0000000000..a9d939d076 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/sharpsl-rc-r1.patch @@ -0,0 +1,555 @@ +This patch adds support for Sharp CE-RH2 on Spitz. + +It is not clean enough to be upstreamed: +- It is a bit syslog-noisy. +- Does not support other Zaurus models. +- Maybe split to more parts: + * MAX1111 driver + * linear input device + * virtual keyboard on top of linear input device + +Index: linux-2.6.26/arch/arm/mach-pxa/spitz.c +=================================================================== +--- linux-2.6.26.orig/arch/arm/mach-pxa/spitz.c 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/arch/arm/mach-pxa/spitz.c 2008-07-15 10:11:15.000000000 +0000 +@@ -261,6 +261,13 @@ + .id = -1, + }; + ++/* ++ * Spitz Remote Control Device ++ */ ++static struct platform_device sharpsl_rc_device = { ++ .name = "sharpsl-remote-control", ++ .id = -1, ++}; + + /* + * Spitz LEDs +@@ -522,6 +529,7 @@ + &spitzscoop_device, + &spitzssp_device, + &spitzkbd_device, ++ &sharpsl_rc_device, + &spitzts_device, + &spitzbl_device, + &spitzled_device, +Index: linux-2.6.26/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.26.orig/drivers/input/keyboard/Kconfig 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/drivers/input/keyboard/Kconfig 2008-07-15 10:11:15.000000000 +0000 +@@ -175,6 +175,17 @@ + + Say Y only if you know, what you are doing! + ++config SHARPSL_RC ++ tristate "Sharp SL-Cxx00 Remote Control" ++ depends on PXA_SHARPSL ++ default y ++ help ++ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00, ++ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called sharpsl_rc. ++ + config KEYBOARD_AMIGA + tristate "Amiga keyboard" + depends on AMIGA +Index: linux-2.6.26/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.26.orig/drivers/input/keyboard/Makefile 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/drivers/input/keyboard/Makefile 2008-07-15 10:11:15.000000000 +0000 +@@ -26,4 +26,5 @@ + obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o + obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o + obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o ++obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o + obj-$(CONFIG_KEYBOARD_SH_KEYSC) += sh_keysc.o +Index: linux-2.6.26/drivers/input/keyboard/sharpsl_rc.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.26/drivers/input/keyboard/sharpsl_rc.c 2008-07-15 10:11:15.000000000 +0000 +@@ -0,0 +1,319 @@ ++/* ++ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00) ++ * ++ * Copyright (c) 2004-2005 Richard Purdie ++ * ++ * Based on corgikbd.c and Sharp's RC driver ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ */ ++ ++#define DEBUG 1 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args) ++ ++struct remote_control_key { ++ unsigned char min; ++ unsigned char max; ++ unsigned char key; ++}; ++ ++static struct remote_control_key remote_keys_spitz[] = { ++ /* CE-RH2 values */ ++ { 25, 35, KEY_STOPCD}, ++ { 55, 65, KEY_PLAYPAUSE}, ++ { 85, 95, KEY_NEXTSONG}, ++ { 115, 125, KEY_VOLUMEUP}, ++ { 145, 155, KEY_PREVIOUSSONG}, ++ { 180, 190, KEY_MUTE}, ++ { 215, 225, KEY_VOLUMEDOWN}, ++}; ++static struct remote_control_key remote_keys_corgi[] = { ++ /* CE-RH1 values */ ++ { 27, 35, KEY_STOPCD}, ++ { 7, 13, KEY_PLAYPAUSE}, ++ { 77, 93, KEY_NEXTSONG}, ++ { 115, 132, KEY_VOLUMEUP}, ++ { 46, 58, KEY_PREVIOUSSONG}, ++ { 170, 186, KEY_VOLUMEDOWN}, ++}; ++ ++#define RELEASE_HI 230 ++#define MAX_EARPHONE 6 ++#define RC_POLL_MS 10 ++#define RC_FINISH_MS 500 ++#define WAIT_STATE 3 ++#define NOISE_THRESHOLD 100 ++ ++struct sharpsl_rc { ++ struct input_dev *input; ++ struct device *dev; ++ ++ spinlock_t lock; ++ struct timer_list rctimer; ++ struct timer_list rctimer_finish; ++ ++ unsigned int handling_press; ++ unsigned int noise; ++ unsigned int state; ++ unsigned int last_key; ++}; ++ ++static int get_remocon_raw(void) ++{ ++ int i, val; ++ struct remote_control_key *remote_keys; ++ ++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) ++ remote_keys = remote_keys_spitz; ++ else ++ remote_keys = remote_keys_corgi; ++ ++ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM); ++ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ? ++ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi)); ++ ++i) { ++ if (val >= remote_keys[i].min ++ && val <= remote_keys[i].max) { ++ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key); ++ return remote_keys[i].key; ++ } ++ } ++ return 0; ++} ++ ++static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id) ++{ ++ struct sharpsl_rc *data = dev_id; ++ DPRINTK("sharpsl_rc_interrupt %d\n", irq); ++ if (!data->handling_press) { ++ DPRINTK("handling interrupt"); ++ data->handling_press = 1; ++ data->noise = 0; ++ data->state = 0; ++ data->last_key = 0; ++ ++ if (machine_is_borzoi() || machine_is_spitz()) ++ reset_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP); ++ else if (machine_is_akita()) ++ akita_reset_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP); ++ else ++ reset_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP); ++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS)); ++ } ++ return IRQ_HANDLED; ++} ++ ++static void sharpsl_rc_timer_callback(unsigned long dataPtr) ++{ ++ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr; ++ int timer = 1; ++ int key = get_remocon_raw(); ++ DPRINTK("timer callback, key: %d", key); ++ ++ //wait for value to stabilize ++ if (data->state < WAIT_STATE) { ++ if (data->last_key != key) { ++ ++data->noise; ++ if (data->noise > NOISE_THRESHOLD) { ++ DPRINTK("too much noise, bailing"); ++ timer = 0; ++ } ++ data->state = 0; ++ } else { ++ ++data->state; ++ } ++ data->last_key = key; ++ ++ //stable value, send event ++ } else if (data->state == WAIT_STATE) { ++ data->noise = 0; ++ //non-key returned, skip the rest of the states and bail now ++ if (data->last_key == 0) { ++ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise); ++ timer = 0; ++ //send button press ++ } else { ++ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise); ++ input_report_key(data->input, data->last_key, 1); ++ } ++ ++data->state; ++ ++ //wait until key is released ++ } else if (data->state < WAIT_STATE * 2) { ++ if (key == data->last_key ++ && data->noise < NOISE_THRESHOLD) { ++ data->state = WAIT_STATE + 1; ++ ++data->noise; ++ } else { ++ ++data->state; ++ } ++ //key is released, send event ++ } else { ++ //send button release ++ DPRINTK("release key %d", data->last_key); ++ input_report_key(data->input, data->last_key, 0); ++ timer = 0; ++ } ++ if (timer) { ++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS)); ++ } else { ++ if (machine_is_borzoi() || machine_is_spitz()) ++ set_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP); ++ else if (machine_is_akita()) ++ akita_set_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP); ++ else ++ set_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP); ++ data->handling_press = 0; ++ } ++} ++ ++static int __init sharpsl_rc_probe(struct platform_device *pdev) ++{ ++ struct sharpsl_rc *sharpsl_rc; ++ struct input_dev *input_dev; ++ int i, ret; ++ struct remote_control_key *remote_keys; ++ ++ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n"); ++ ++ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL); ++ input_dev = input_allocate_device(); ++ if (!sharpsl_rc || !input_dev) { ++ kfree(sharpsl_rc); ++ input_free_device(input_dev); ++ return -ENOMEM; ++ } ++ ++ platform_set_drvdata(pdev, sharpsl_rc); ++ ++ sharpsl_rc->dev = &pdev->dev; ++ sharpsl_rc->input = input_dev; ++ spin_lock_init(&sharpsl_rc->lock); ++ ++ /* Init Remote Control Timer */ ++ init_timer(&sharpsl_rc->rctimer); ++ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback; ++ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc; ++ ++ input_dev->name = "Sharp Remote Control CE-RHX"; ++ input_dev->phys = "sharpsl_rc/input0"; ++ input_dev->id.bustype = BUS_HOST; ++ input_dev->id.vendor = 0x0001; ++ input_dev->id.product = 0x0001; ++ input_dev->id.version = 0x0100; ++ input_dev->dev.parent = &pdev->dev; ++ ++ input_dev->evbit[0] = BIT(EV_KEY); ++ ++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) ++ remote_keys = remote_keys_spitz; ++ else ++ remote_keys = remote_keys_corgi; ++ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ? ++ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi)); ++ ++i) ++ set_bit(remote_keys[i].key, input_dev->keybit); ++ ++ ret = input_register_device(sharpsl_rc->input); ++ if (ret) { ++ dev_dbg(&pdev->dev, "Failed to register Sharp Remote input device\n"); ++ kfree(sharpsl_rc); ++ input_free_device(input_dev); ++ return ret; ++ } ++ ++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) { ++ pxa_gpio_mode(SPITZ_GPIO_AK_INT | GPIO_IN); ++ ret = request_irq(SPITZ_IRQ_GPIO_AK_INT, ++ sharpsl_rc_interrupt, ++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED, ++ "sharpsl_rc", ++ sharpsl_rc); ++ } else { ++ pxa_gpio_mode(CORGI_GPIO_AK_INT | GPIO_IN); ++ ret = request_irq(CORGI_IRQ_GPIO_AK_INT, ++ sharpsl_rc_interrupt, ++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED, ++ "sharpsl_rc", ++ sharpsl_rc); ++ } ++ if (ret < 0) { ++ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i); ++ kfree(sharpsl_rc); ++ input_free_device(input_dev); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int sharpsl_rc_remove(struct platform_device *pdev) ++{ ++ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev); ++ ++ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n"); ++ ++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) ++ free_irq(SPITZ_IRQ_GPIO_AK_INT, sharpsl_rc); ++ else ++ free_irq(CORGI_IRQ_GPIO_AK_INT, sharpsl_rc); ++ del_timer_sync(&sharpsl_rc->rctimer); ++ input_unregister_device(sharpsl_rc->input); ++ kfree(sharpsl_rc); ++ ++ return 0; ++} ++ ++static struct platform_driver sharpsl_rc_driver = { ++ .probe = sharpsl_rc_probe, ++ .remove = sharpsl_rc_remove, ++ .suspend = NULL, ++ .resume = NULL, ++ .driver = { ++ .name = "sharpsl-remote-control", ++ }, ++}; ++ ++static int __devinit sharpsl_rc_init(void) ++{ ++ printk("sharpsl_rc_init\n"); ++ return platform_driver_register(&sharpsl_rc_driver); ++} ++ ++static void __exit sharpsl_rc_exit(void) ++{ ++ printk("sharpsl_rc_exit\n"); ++ platform_driver_unregister(&sharpsl_rc_driver); ++} ++ ++module_init(sharpsl_rc_init); ++module_exit(sharpsl_rc_exit); ++ ++MODULE_AUTHOR("Justin Patrin "); ++MODULE_AUTHOR("Richard Purdie "); ++MODULE_DESCRIPTION("SharpSL Remote Control Driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.26/drivers/input/keyboard/spitzkbd.c +=================================================================== +--- linux-2.6.26.orig/drivers/input/keyboard/spitzkbd.c 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/drivers/input/keyboard/spitzkbd.c 2008-07-15 10:11:15.000000000 +0000 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -280,13 +281,21 @@ + static int sharpsl_hinge_state; + static int hinge_count; + ++void spitzkbd_handle_sharpsl_rc(void *arg) { ++ request_module("sharpsl_rc"); ++} ++ ++DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc); ++ + static void spitzkbd_hinge_timer(unsigned long data) + { + struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data; + unsigned long state; + unsigned long flags; ++ unsigned int headphone, remote; + + state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB)); ++ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)); + state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)); + if (state != sharpsl_hinge_state) { + hinge_count = 0; +@@ -300,9 +309,18 @@ + + input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0)); + input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0)); +- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0)); ++ ++ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0); ++ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone); ++ ++ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0); ++ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote); + input_sync(spitzkbd_data->input); + ++ if (remote) { ++ schedule_work(&spitzkbd_work); ++ } ++ + spin_unlock_irqrestore(&spitzkbd_data->lock, flags); + } else { + mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL)); +@@ -396,6 +414,7 @@ + set_bit(SW_LID, input_dev->swbit); + set_bit(SW_TABLET_MODE, input_dev->swbit); + set_bit(SW_HEADPHONE_INSERT, input_dev->swbit); ++ set_bit(SW_REMOTE_INSERT, input_dev->swbit); + + err = input_register_device(input_dev); + if (err) +@@ -433,9 +452,12 @@ + request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr, + IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, + "Spitzkbd SWB", spitzkbd); +- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr, ++ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr, + IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, + "Spitzkbd HP", spitzkbd); ++ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr, ++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED, ++ "Spitzkbd HP Type", spitzkbd); + + return 0; + +@@ -456,6 +478,7 @@ + free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd); + free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd); + free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd); ++ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd); + free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd); + + del_timer_sync(&spitzkbd->htimer); +Index: linux-2.6.26/arch/arm/mach-pxa/sharpsl.h +=================================================================== +--- linux-2.6.26.orig/arch/arm/mach-pxa/sharpsl.h 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/arch/arm/mach-pxa/sharpsl.h 2008-07-15 10:11:15.000000000 +0000 +@@ -37,15 +37,10 @@ + */ + #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x)) + +-/* MAX1111 Channel Definitions */ +-#define MAX1111_BATT_VOLT 4u +-#define MAX1111_BATT_TEMP 2u +-#define MAX1111_ACIN_VOLT 6u +- + extern struct battery_thresh spitz_battery_levels_acin[]; + extern struct battery_thresh spitz_battery_levels_noac[]; + void sharpsl_pm_pxa_init(void); + void sharpsl_pm_pxa_remove(void); +-int sharpsl_pm_pxa_read_max1111(int channel); ++ + + +Index: linux-2.6.26/arch/arm/mach-pxa/sharpsl_pm.c +=================================================================== +--- linux-2.6.26.orig/arch/arm/mach-pxa/sharpsl_pm.c 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/arch/arm/mach-pxa/sharpsl_pm.c 2008-07-15 10:11:15.000000000 +0000 +@@ -136,6 +136,8 @@ + | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); + } + ++EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111); ++ + void sharpsl_pm_pxa_init(void) + { + pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN); +Index: linux-2.6.26/include/asm-arm/hardware/sharpsl_pm.h +=================================================================== +--- linux-2.6.26.orig/include/asm-arm/hardware/sharpsl_pm.h 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/include/asm-arm/hardware/sharpsl_pm.h 2008-07-15 10:11:15.000000000 +0000 +@@ -104,3 +104,10 @@ + irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id); + irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id); + ++/* MAX1111 Channel Definitions */ ++#define MAX1111_REMCOM 0u ++#define MAX1111_BATT_VOLT 4u ++#define MAX1111_BATT_TEMP 2u ++#define MAX1111_ACIN_VOLT 6u ++ ++int sharpsl_pm_pxa_read_max1111(int channel); +Index: linux-2.6.26/include/linux/input.h +=================================================================== +--- linux-2.6.26.orig/include/linux/input.h 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/include/linux/input.h 2008-07-15 10:13:04.000000000 +0000 +@@ -640,6 +640,7 @@ + #define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any" + set = radio enabled */ + #define SW_RADIO SW_RFKILL_ALL /* deprecated */ ++#define SW_REMOTE_INSERT 0x04 /* set = remote */ + #define SW_MAX 0x0f + #define SW_CNT (SW_MAX+1) + +Index: linux-2.6.26/arch/arm/mach-pxa/spitz_pm.c +=================================================================== +--- linux-2.6.26.orig/arch/arm/mach-pxa/spitz_pm.c 2008-07-13 21:51:29.000000000 +0000 ++++ linux-2.6.26/arch/arm/mach-pxa/spitz_pm.c 2008-07-15 10:11:15.000000000 +0000 +@@ -160,6 +160,13 @@ + if (resume_on_alarm && (PEDR & PWER_RTC)) + is_resume |= PWER_RTC; + ++ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT)); ++ ++ //remote/headphone interrupt, wakeup ++ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) { ++ is_resume |= PWER_RTC; ++ } ++ + dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume); + return is_resume; + } diff --git a/packages/linux/linux-rp-2.6.26/spitz_h_rewrite.patch b/packages/linux/linux-rp-2.6.26/spitz_h_rewrite.patch new file mode 100644 index 0000000000..3dcf4ed8af --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/spitz_h_rewrite.patch @@ -0,0 +1,497 @@ +http://www.uwsg.indiana.edu/hypermail/linux/kernel/0802.1/3541.html + +Here is a rewrite of spitz.h, which includes comments documenting +function of particular GPIO pins. + +spitz_h_rewrite.patch provides: +- no changes in compiled code +- partial spitz.h rewrite: + * organized by function + * describes complete GPIO pinout + * comments added + * removed defines cloning pxa-regs.h +- prefer generic pxa-regs.h GPIO if available +- use GPIO names instead of numbers + +Thanks to Trisoft for providing needed information. + +Index: linux-2.6.26-rc4/arch/arm/mach-pxa/spitz_pm.c +=================================================================== +--- linux-2.6.26-rc4.orig/arch/arm/mach-pxa/spitz_pm.c 2008-06-02 00:13:53.000000000 +0100 ++++ linux-2.6.26-rc4/arch/arm/mach-pxa/spitz_pm.c 2008-06-02 00:13:53.000000000 +0100 +@@ -111,9 +111,9 @@ + pxa_gpio_mode(GPIO18_RDY|GPIO_OUT | GPIO_DFLT_HIGH); + + PRER = GPIO_bit(SPITZ_GPIO_KEY_INT); +- PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET); +- PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET) | PWER_RTC; +- PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET); ++ PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST); ++ PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST) | PWER_RTC; ++ PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST); + PKSR = 0xffffffff; // clear + + /* nRESET_OUT Disable */ +@@ -126,7 +126,7 @@ + static void spitz_postsuspend(void) + { + pxa_gpio_mode(GPIO18_RDY_MD); +- pxa_gpio_mode(10 | GPIO_IN); ++ pxa_gpio_mode(SPITZ_GPIO_NC_10 | GPIO_IN); + } + + static int spitz_should_wakeup(unsigned int resume_on_alarm) +Index: linux-2.6.26-rc4/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.26-rc4.orig/drivers/video/pxafb.c 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/drivers/video/pxafb.c 2008-06-02 00:15:22.000000000 +0100 +@@ -966,7 +966,7 @@ + return; + } + +- for (gpio = 58; ldd_bits; gpio++, ldd_bits--) ++ for (gpio = GPIO58_LDD_0; ldd_bits; 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); +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/akita.h +=================================================================== +--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/akita.h 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/akita.h 2008-06-02 00:13:53.000000000 +0100 +@@ -12,11 +12,11 @@ + /* Akita IO Expander GPIOs */ + + #define AKITA_IOEXP_RESERVED_7 (1 << 7) +-#define AKITA_IOEXP_IR_ON (1 << 6) +-#define AKITA_IOEXP_AKIN_PULLUP (1 << 5) +-#define AKITA_IOEXP_BACKLIGHT_CONT (1 << 4) +-#define AKITA_IOEXP_BACKLIGHT_ON (1 << 3) +-#define AKITA_IOEXP_MIC_BIAS (1 << 2) ++#define AKITA_IOEXP_IR_ON (1 << 6) /* IrDA On */ ++#define AKITA_IOEXP_AKIN_PULLUP (1 << 5) /* Pull-Up for Remote */ ++#define AKITA_IOEXP_BACKLIGHT_CONT (1 << 4) /* Backlight Control */ ++#define AKITA_IOEXP_BACKLIGHT_ON (1 << 3) /* Backlight On */ ++#define AKITA_IOEXP_MIC_BIAS (1 << 2) /* Mic Bias On */ + #define AKITA_IOEXP_RESERVED_1 (1 << 1) + #define AKITA_IOEXP_RESERVED_0 (1 << 0) + +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/spitz.h +=================================================================== +--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/spitz.h 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/spitz.h 2008-06-02 00:13:53.000000000 +0100 +@@ -1,8 +1,9 @@ + /* +- * Hardware specific definitions for SL-Cx000 series of PDAs ++ * Hardware specific definitions for SL-Cxx00 series of PDAs + * + * Copyright (c) 2005 Alexander Wykes + * Copyright (c) 2005 Richard Purdie ++ * Copyright (c) 2008 Stanislav Brabec + * + * Based on Sharp's 2.4 kernel patches + * +@@ -13,140 +14,257 @@ + */ + #ifndef __ASM_ARCH_SPITZ_H + #define __ASM_ARCH_SPITZ_H 1 +-#endif + +-#include ++#include ++#include + + /* Spitz/Akita GPIOs */ + +-#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */ +-#define SPITZ_GPIO_RESET (1) +-#define SPITZ_GPIO_nSD_DETECT (9) +-#define SPITZ_GPIO_TP_INT (11) /* Touch Panel interrupt */ +-#define SPITZ_GPIO_AK_INT (13) /* Remote Control */ +-#define SPITZ_GPIO_ADS7846_CS (14) +-#define SPITZ_GPIO_SYNC (16) +-#define SPITZ_GPIO_MAX1111_CS (20) +-#define SPITZ_GPIO_FATAL_BAT (21) +-#define SPITZ_GPIO_HSYNC (22) +-#define SPITZ_GPIO_nSD_CLK (32) +-#define SPITZ_GPIO_USB_DEVICE (35) +-#define SPITZ_GPIO_USB_HOST (37) +-#define SPITZ_GPIO_USB_CONNECT (41) +-#define SPITZ_GPIO_LCDCON_CS (53) +-#define SPITZ_GPIO_nPCE (54) +-#define SPITZ_GPIO_nSD_WP (81) +-#define SPITZ_GPIO_ON_RESET (89) +-#define SPITZ_GPIO_BAT_COVER (90) +-#define SPITZ_GPIO_CF_CD (94) +-#define SPITZ_GPIO_ON_KEY (95) +-#define SPITZ_GPIO_SWA (97) +-#define SPITZ_GPIO_SWB (96) +-#define SPITZ_GPIO_CHRG_FULL (101) +-#define SPITZ_GPIO_CO (101) +-#define SPITZ_GPIO_CF_IRQ (105) +-#define SPITZ_GPIO_AC_IN (115) +-#define SPITZ_GPIO_HP_IN (116) ++/* This list refers to all GPIO pins either in defines or in comments. ++ * ++ * GPIO pins not listed: ++ * GPIO2 SYS_EN: System Power Enable ++ * GPIO5-GPIO8 PWR_CAP0-PWR_CAP3: sleep DC-DC converter power capacitors ++ * GPIO40 not connected ++ */ + +-/* Spitz Only GPIOs */ + +-#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */ +-#define SPITZ_GPIO_CF2_CD (93) ++/* Spitz/Akita System GPIO */ ++ ++#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */ ++#define SPITZ_GPIO_SYNC (16) /* IOPORT Wake Up (input) */ ++#define SPITZ_GPIO_NAND_CS (79) /* NAND Flash Chip Select */ ++#define SPITZ_GPIO_NC_10 (10) /* Not Connected (but used in kernel) */ ++/* This GPIO pin is connected: ++ * GPIO1_RST ++ */ + + ++/* Compact Flash Interface */ ++ ++/* Spitz/Akita Compact Flash Interface */ ++#define SPITZ_GPIO_CF_CD (94) /* CF IRQ */ ++#define SPITZ_GPIO_CF_IRQ (105) /* CF Ready */ ++/* These GPIO pins are connected: ++ * GPIO48_nPOE ++ * GPIO49_nPWE ++ * GPIO50_nPIOR ++ * GPIO51_nPIOW ++ * GPIO54_nPCE_2 ++ * GPIO55_nPREG ++ * GPIO56_nPWAIT ++ * GPIO57_nIOIS16 ++ * GPIO80_nCS_4 ++ * GPIO85_nPCE_1 ++ * GPIO104_pSKTSEL ++ */ ++ ++/* Spitz only Compact Flash Interface */ ++#define SPITZ_GPIO_CF2_CD (93) /* CF slot1 IRQ */ ++#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */ ++/* This GPIO pin is connected: ++ * GPIO78_nCS_2 ++ */ ++ ++ ++/* Spitz/Akita Battery, Power and Service Connector */ ++ ++#define SPITZ_GPIO_FATAL_BAT (21) /* Fatal Battery */ ++#define SPITZ_GPIO_BAT_COVER (90) /* Battery Cover switch */ ++#define SPITZ_GPIO_BAT_COVER2 (15) /* Battery Cover switch, parallel pin */ ++#define SPITZ_GPIO_CHRG_FULL (101) /* Battery Full */ ++#define SPITZ_GPIO_AC_IN (115) /* External Power Supply is active */ ++#define SPITZ_GPIO_ON_RESET (89) /* Software Reset */ ++#define SPITZ_GPIO_SERVICE0 (83) /* Service Connector */ ++#define SPITZ_GPIO_SERVICE1 (84) /* Service Connector */ ++/* This GPIO pin is connected: ++ * GPIO18_RDY ++ */ ++ ++ ++/* Spitz/Akita Display Controller */ ++ ++#define SPITZ_GPIO_HSYNC (22) /* Line Sync Feedback */ ++/* These GPIO pins are connected: ++ * GPIO58_LDD_0-GPIO58_LDD_15 ++ * GPIO74_LCD_FCLK ++ * GPIO75_LCD_LCLK ++ * GPIO76_LCD_PCLK ++ * GPIO77_LCD_ACBIAS ++ */ ++ ++ ++/* Spitz/Akita SSP/SPI Bus and Devices */ ++ ++#define SPITZ_GPIO_SSP_CLK (19) /* SSP bus Clock */ ++#define SPITZ_GPIO_SSP_RXD (86) /* SSP bus RxD */ ++#define SPITZ_GPIO_SSP_TXD (87) /* SSP bus TxD */ ++#define SPITZ_GPIO_TP_INT (11) /* Touch Panel IRQ */ ++#define SPITZ_GPIO_ADS7846_CS (14) /* Touch Panel Controller Chip Select */ ++#define SPITZ_GPIO_MAX1111_CS (20) /* Multi Channel ADC Chip Select */ ++#define SPITZ_GPIO_LCDCON_CS (53) /* LCD Controller Chip Select */ ++ ++ ++/* Spitz/Akita Supplementary USB OTG Pins */ ++ ++#define SPITZ_GPIO_USB_DEVICE (35) /* USB Client power is present */ ++#define SPITZ_GPIO_USB_HOST (37) /* USB OTG 5V Host power supply control */ ++#define SPITZ_GPIO_USB_CONNECT (41) /* USB Host Cable is connected */ ++ ++ ++/* Spitz/Akita Audio */ ++ ++#define SPITZ_GPIO_HP_IN (116) /* CPU Headphone detect */ ++#define SPITZ_GPIO_AK_INT (13) /* Remote Control detect */ ++/* These GPIO AC97 pins are connected: ++ * GPIO28_BITCLK ++ * GPIO29_SDATA_IN ++ * GPIO30_SDATA_OUT ++ * GPIO31_SYNC ++ * GPIO113_AC97_RESET_N ++ */ ++ ++ ++/* Spitz/Akita SD Slot */ ++ ++#define SPITZ_GPIO_nSD_DETECT (9) /* SD Card Presence */ ++#define SPITZ_GPIO_nSD_WP (81) /* SD Write Protection */ ++/* These GPIO pins are connected: ++ * GPIO32_MMCCLK ++ * GPIO92_MMCDAT0 ++ * GPIO109_MMCDAT1 ++ * GPIO110_MMCDAT2 ++ * GPIO111_MMCDAT3 ++ * GPIO112_MMCCMD ++ */ ++ ++/* Spitz/Akita I2C bus */ ++#define SPITZ_GPIO_SCL (117) /* I2C SCL */ ++#define SPITZ_GPIO_SDA (118) /* I2C SDA */ ++#define SPITZ_GPIO_PWR_SCL (3) /* I2C SCL power */ ++#define SPITZ_GPIO_PWR_SDA (4) /* I2C SDA power */ ++ ++/* audio codec pins */ ++ ++ ++/* Spitz/Akita UART ports */ ++ ++/* Fully Featured UART - connected to IOPORT connector */ ++#define SPITZ_GPIO_FFRXD (102) /* IOPORT has nRXD inverted levels */ ++#define SPITZ_GPIO_FFTXD (99) /* IOPORT has nTXD inverted levels */ ++#define SPITZ_GPIO_FFRTS (98) ++#define SPITZ_GPIO_FFCTS (100) ++#define SPITZ_GPIO_FFDTR (82) ++#define SPITZ_GPIO_FFDSR (33) ++ ++/* These UART GPIO pins are connected to Bluetooth ++ * (only on Akita version with Bluetooth) ++ * GPIO42_BTRXD ++ * GPIO43_BTTXD ++ * GPIO44_BTCTS ++ * GPIO45_BTRTS ++ */ ++ ++/* These UART GPIO pins are connected to IrDA: ++ * GPIO46_STRXD ++ * GPIO47_STTXD ++ */ ++ + /* Spitz/Akita Keyboard Definitions */ + +-#define SPITZ_KEY_STROBE_NUM (11) +-#define SPITZ_KEY_SENSE_NUM (7) +-#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000 +-#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000 +-#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000 +-#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880 +-#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000 +-#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4 +-#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000 +-#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000 +- +-#define SPITZ_GPIO_KEY_STROBE0 88 +-#define SPITZ_GPIO_KEY_STROBE1 23 +-#define SPITZ_GPIO_KEY_STROBE2 24 +-#define SPITZ_GPIO_KEY_STROBE3 25 +-#define SPITZ_GPIO_KEY_STROBE4 26 +-#define SPITZ_GPIO_KEY_STROBE5 27 +-#define SPITZ_GPIO_KEY_STROBE6 52 +-#define SPITZ_GPIO_KEY_STROBE7 103 +-#define SPITZ_GPIO_KEY_STROBE8 107 +-#define SPITZ_GPIO_KEY_STROBE9 108 +-#define SPITZ_GPIO_KEY_STROBE10 114 +- +-#define SPITZ_GPIO_KEY_SENSE0 12 +-#define SPITZ_GPIO_KEY_SENSE1 17 +-#define SPITZ_GPIO_KEY_SENSE2 91 +-#define SPITZ_GPIO_KEY_SENSE3 34 +-#define SPITZ_GPIO_KEY_SENSE4 36 +-#define SPITZ_GPIO_KEY_SENSE5 38 +-#define SPITZ_GPIO_KEY_SENSE6 39 ++#define SPITZ_KEY_STROBE_NUM (11) ++#define SPITZ_KEY_SENSE_NUM (7) ++#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000 ++#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000 ++#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000 ++#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880 ++#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000 ++#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4 ++#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000 ++#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000 ++#define SPITZ_GPIO_KEY_STROBE0 (88) ++#define SPITZ_GPIO_KEY_STROBE1 (23) ++#define SPITZ_GPIO_KEY_STROBE2 (24) ++#define SPITZ_GPIO_KEY_STROBE3 (25) ++#define SPITZ_GPIO_KEY_STROBE4 (26) ++#define SPITZ_GPIO_KEY_STROBE5 (27) ++#define SPITZ_GPIO_KEY_STROBE6 (52) ++#define SPITZ_GPIO_KEY_STROBE7 (103) ++#define SPITZ_GPIO_KEY_STROBE8 (107) ++#define SPITZ_GPIO_KEY_STROBE9 (108) ++#define SPITZ_GPIO_KEY_STROBE10 (114) ++#define SPITZ_GPIO_KEY_SENSE0 (12) ++#define SPITZ_GPIO_KEY_SENSE1 (17) ++#define SPITZ_GPIO_KEY_SENSE2 (91) ++#define SPITZ_GPIO_KEY_SENSE3 (34) ++#define SPITZ_GPIO_KEY_SENSE4 (36) ++#define SPITZ_GPIO_KEY_SENSE5 (38) ++#define SPITZ_GPIO_KEY_SENSE6 (39) ++ ++#define SPITZ_GPIO_SWA (97) /* Keyboard Interrupt A */ ++#define SPITZ_GPIO_SWB (96) /* Keyboard Interrupt B */ ++#define SPITZ_GPIO_ON_KEY (95) /* Power On Key */ + + +-/* Spitz Scoop Device (No. 1) GPIOs */ ++/* Spitz/Akita Scoop Device (No. 1) GPIOs */ + /* Suspend States in comments */ +-#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Keep */ +-#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Keep */ +-#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Keep */ +-#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Low */ +-#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Low */ +-#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* Keep */ +-#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Keep */ +-#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Low */ +-#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Low */ ++#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Green LED, Keep */ ++#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Fast Charge On, Keep */ ++#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Charge On, Keep */ ++#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Extra Mute Left, Low */ ++#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Extra Mute Right, Low */ ++#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* CF+SD Power Circuit, Keep */ ++#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Orange LED, Keep */ ++#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Dummy Load, Low */ ++#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Battery Sensor On, Low */ + + #define SPITZ_SCP_IO_DIR (SPITZ_SCP_LED_GREEN | SPITZ_SCP_JK_B | SPITZ_SCP_CHRG_ON | \ +- SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_LED_ORANGE | \ +- SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON) ++ SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_LED_ORANGE | \ ++ SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON) + #define SPITZ_SCP_IO_OUT (SPITZ_SCP_CHRG_ON | SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R) + #define SPITZ_SCP_SUS_CLR (SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON) + #define SPITZ_SCP_SUS_SET 0 + + /* Spitz Scoop Device (No. 2) GPIOs */ +-/* Suspend States in comments */ +-#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* High */ +-#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Keep */ +-#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */ +-#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */ +-#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */ +-#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */ +-#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Low */ +-#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Low */ +-#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Low */ ++/* Suspend States in comments ++ * Spitz only, Akita uses corresponding AKITA_IOEXP_ */ ++#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* IrDA On, High */ ++#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Pull-Up for Remote, Keep */ ++#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */ ++#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */ ++#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */ ++#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */ ++#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Backlight Control, Low */ ++#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Backlight On, Low */ ++#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Mic Bias On, Low */ + + #define SPITZ_SCP2_IO_DIR (SPITZ_SCP2_IR_ON | SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1 | \ +- SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \ +- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS) ++ SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \ ++ SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS) + + #define SPITZ_SCP2_IO_OUT (SPITZ_SCP2_IR_ON | SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1) + #define SPITZ_SCP2_SUS_CLR (SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \ +- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS) ++ SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS) + #define SPITZ_SCP2_SUS_SET (SPITZ_SCP2_IR_ON | SPITZ_SCP2_RESERVED_1) + + +-/* Spitz IRQ Definitions */ ++/* Spitz/Akita IRQ Definitions */ + +-#define SPITZ_IRQ_GPIO_KEY_INT IRQ_GPIO(SPITZ_GPIO_KEY_INT) +-#define SPITZ_IRQ_GPIO_AC_IN IRQ_GPIO(SPITZ_GPIO_AC_IN) +-#define SPITZ_IRQ_GPIO_AK_INT IRQ_GPIO(SPITZ_GPIO_AK_INT) +-#define SPITZ_IRQ_GPIO_HP_IN IRQ_GPIO(SPITZ_GPIO_HP_IN) +-#define SPITZ_IRQ_GPIO_TP_INT IRQ_GPIO(SPITZ_GPIO_TP_INT) +-#define SPITZ_IRQ_GPIO_SYNC IRQ_GPIO(SPITZ_GPIO_SYNC) +-#define SPITZ_IRQ_GPIO_ON_KEY IRQ_GPIO(SPITZ_GPIO_ON_KEY) +-#define SPITZ_IRQ_GPIO_SWA IRQ_GPIO(SPITZ_GPIO_SWA) +-#define SPITZ_IRQ_GPIO_SWB IRQ_GPIO(SPITZ_GPIO_SWB) ++#define SPITZ_IRQ_GPIO_KEY_INT IRQ_GPIO(SPITZ_GPIO_KEY_INT) ++#define SPITZ_IRQ_GPIO_AC_IN IRQ_GPIO(SPITZ_GPIO_AC_IN) ++#define SPITZ_IRQ_GPIO_AK_INT IRQ_GPIO(SPITZ_GPIO_AK_INT) ++#define SPITZ_IRQ_GPIO_HP_IN IRQ_GPIO(SPITZ_GPIO_HP_IN) ++#define SPITZ_IRQ_GPIO_TP_INT IRQ_GPIO(SPITZ_GPIO_TP_INT) ++#define SPITZ_IRQ_GPIO_SYNC IRQ_GPIO(SPITZ_GPIO_SYNC) ++#define SPITZ_IRQ_GPIO_ON_KEY IRQ_GPIO(SPITZ_GPIO_ON_KEY) ++#define SPITZ_IRQ_GPIO_SWA IRQ_GPIO(SPITZ_GPIO_SWA) ++#define SPITZ_IRQ_GPIO_SWB IRQ_GPIO(SPITZ_GPIO_SWB) + #define SPITZ_IRQ_GPIO_BAT_COVER IRQ_GPIO(SPITZ_GPIO_BAT_COVER) + #define SPITZ_IRQ_GPIO_FATAL_BAT IRQ_GPIO(SPITZ_GPIO_FATAL_BAT) +-#define SPITZ_IRQ_GPIO_CO IRQ_GPIO(SPITZ_GPIO_CO) +-#define SPITZ_IRQ_GPIO_CF_IRQ IRQ_GPIO(SPITZ_GPIO_CF_IRQ) +-#define SPITZ_IRQ_GPIO_CF_CD IRQ_GPIO(SPITZ_GPIO_CF_CD) +-#define SPITZ_IRQ_GPIO_CF2_IRQ IRQ_GPIO(SPITZ_GPIO_CF2_IRQ) +-#define SPITZ_IRQ_GPIO_nSD_INT IRQ_GPIO(SPITZ_GPIO_nSD_INT) ++#define SPITZ_IRQ_GPIO_CF_IRQ IRQ_GPIO(SPITZ_GPIO_CF_IRQ) ++#define SPITZ_IRQ_GPIO_CF_CD IRQ_GPIO(SPITZ_GPIO_CF_CD) ++#define SPITZ_IRQ_GPIO_CF2_IRQ IRQ_GPIO(SPITZ_GPIO_CF2_IRQ) ++#define SPITZ_IRQ_GPIO_nSD_INT IRQ_GPIO(SPITZ_GPIO_nSD_INT) + #define SPITZ_IRQ_GPIO_nSD_DETECT IRQ_GPIO(SPITZ_GPIO_nSD_DETECT) + + /* +@@ -156,3 +274,5 @@ + extern struct platform_device spitzscoop2_device; + extern struct platform_device spitzssp_device; + extern struct sharpsl_charger_machinfo spitz_pm_machinfo; ++ ++#endif +Index: linux-2.6.26-rc4/sound/arm/pxa2xx-ac97.c +=================================================================== +--- linux-2.6.26-rc4.orig/sound/arm/pxa2xx-ac97.c 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/sound/arm/pxa2xx-ac97.c 2008-06-02 00:19:38.000000000 +0100 +@@ -156,10 +156,10 @@ + #ifdef CONFIG_PXA27x + /* warm reset broken on Bulverde, + so manually keep AC97 reset high */ +- pxa_gpio_mode(113 | GPIO_OUT | GPIO_DFLT_HIGH); ++ pxa_gpio_mode(GPIO113_AC97_RESET_N | GPIO_OUT | GPIO_DFLT_HIGH); + udelay(10); + GCR |= GCR_WARM_RST; +- pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT); ++ pxa_gpio_mode(GPIO113_AC97_RESET_N_MD); + udelay(500); + #elif defined(CONFIG_PXA3xx) + timeout = 100; +@@ -364,7 +364,7 @@ + pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD); + #ifdef CONFIG_PXA27x + /* Use GPIO 113 as AC97 Reset on Bulverde */ +- pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT); ++ pxa_gpio_mode(GPIO113_AC97_RESET_N_MD | GPIO_ALT_FN_2_OUT); + ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK"); + if (IS_ERR(ac97conf_clk)) { + ret = PTR_ERR(ac97conf_clk); +Index: linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa2xx-gpio.h +=================================================================== +--- linux-2.6.26-rc4.orig/include/asm-arm/arch-pxa/pxa2xx-gpio.h 2008-06-02 00:18:07.000000000 +0100 ++++ linux-2.6.26-rc4/include/asm-arm/arch-pxa/pxa2xx-gpio.h 2008-06-02 00:18:28.000000000 +0100 +@@ -138,6 +138,7 @@ + #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ + #define GPIO103_CIF_DD_3 103 /* Camera data pin 3 */ + #define GPIO104_CIF_DD_2 104 /* Camera data pin 2 */ ++#define GPIO104_pSKTSEL 104 /* PCMCIA Socket Select (PXA27x) */ + #define GPIO105_CIF_DD_1 105 /* Camera data pin 1 */ + #define GPIO106_CIF_DD_9 106 /* Camera data pin 9 */ + #define GPIO107_CIF_DD_8 107 /* Camera data pin 8 */ diff --git a/packages/linux/linux-rp-2.6.26/versatile-armv6.patch b/packages/linux/linux-rp-2.6.26/versatile-armv6.patch new file mode 100644 index 0000000000..6f2ca26a9a --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/versatile-armv6.patch @@ -0,0 +1,17 @@ +--- + arch/arm/mm/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: linux-2.6.26-rc4/arch/arm/mm/Kconfig +=================================================================== +--- linux-2.6.26-rc4.orig/arch/arm/mm/Kconfig 2008-05-26 19:08:11.000000000 +0100 ++++ linux-2.6.26-rc4/arch/arm/mm/Kconfig 2008-06-01 18:40:07.000000000 +0100 +@@ -387,7 +387,7 @@ + # ARMv6 + config CPU_V6 + bool "Support ARM V6 processor" +- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM7X00A || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 ++ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM7X00A || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || ARCH_VERSATILE_PB + default y if ARCH_MX3 + default y if ARCH_MSM7X00A + select CPU_32v6 diff --git a/packages/linux/linux-rp-2.6.26/zylonite-boot.patch b/packages/linux/linux-rp-2.6.26/zylonite-boot.patch new file mode 100644 index 0000000000..f41928eca5 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/zylonite-boot.patch @@ -0,0 +1,45 @@ +From 04c42f566c68b757fdadf54e0e0f9dfe9f3f9b06 Mon Sep 17 00:00:00 2001 +From: eric miao +Date: Tue, 19 Jun 2007 16:42:53 +0800 +Subject: [PATCH] [PATCH] make zylonite boot + +1. reuse head-xscale.S for XSC3 + +2. add a workaround for machine ID assignment, which should be done + by boot loader +--- + arch/arm/boot/compressed/Makefile | 4 ++++ + arch/arm/boot/compressed/head-xscale.S | 5 +++++ + 2 files changed, 9 insertions(+) + +Index: linux-2.6-pxa3/arch/arm/boot/compressed/Makefile +=================================================================== +--- linux-2.6-pxa3.orig/arch/arm/boot/compressed/Makefile 2007-09-24 11:25:57.000000000 +0200 ++++ linux-2.6-pxa3/arch/arm/boot/compressed/Makefile 2007-09-24 12:26:53.000000000 +0200 +@@ -40,6 +40,10 @@ + OBJS += head-xscale.o + endif + ++ifeq ($(CONFIG_CPU_XSC3),y) ++OBJS += head-xscale.o ++endif ++ + ifeq ($(CONFIG_PXA_SHARPSL),y) + OBJS += head-sharpsl.o + endif +Index: linux-2.6-pxa3/arch/arm/boot/compressed/head-xscale.S +=================================================================== +--- linux-2.6-pxa3.orig/arch/arm/boot/compressed/head-xscale.S 2007-09-24 11:42:27.000000000 +0200 ++++ linux-2.6-pxa3/arch/arm/boot/compressed/head-xscale.S 2007-09-24 12:26:02.000000000 +0200 +@@ -33,6 +33,11 @@ + bic r0, r0, #0x1000 @ clear Icache + mcr p15, 0, r0, c1, c0, 0 + ++#ifdef CONFIG_MACH_ZYLONITE ++ mov r7, #(MACH_TYPE_ZYLONITE & 0xff) ++ orr r7, r7, #(MACH_TYPE_ZYLONITE & 0xff00) ++#endif ++ + #ifdef CONFIG_ARCH_COTULLA_IDP + mov r7, #MACH_TYPE_COTULLA_IDP + #endif diff --git a/packages/linux/linux-rp-2.6.26/zylonite_keypad-r0.patch b/packages/linux/linux-rp-2.6.26/zylonite_keypad-r0.patch new file mode 100644 index 0000000000..1889b3884e --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/zylonite_keypad-r0.patch @@ -0,0 +1,1187 @@ +Eric Miao's pxa keypad patchset backport. +--- + arch/arm/mach-pxa/devices.h | 1 + arch/arm/mach-pxa/generic.c | 31 + + arch/arm/mach-pxa/pxa27x.c | 2 + arch/arm/mach-pxa/pxa300.c | 6 + arch/arm/mach-pxa/pxa3xx.c | 1 + arch/arm/mach-pxa/zylonite.c | 68 +++ + drivers/input/keyboard/Kconfig | 8 + drivers/input/keyboard/Makefile | 2 + drivers/input/keyboard/pxa27x_keyboard.c | 273 ------------- + drivers/input/keyboard/pxa27x_keypad.c | 575 +++++++++++++++++++++++++++++ + include/asm-arm/arch-pxa/irqs.h | 2 + include/asm-arm/arch-pxa/pxa27x_keyboard.h | 13 + include/asm-arm/arch-pxa/pxa27x_keypad.h | 58 ++ + 13 files changed, 745 insertions(+), 295 deletions(-) + +Index: linux-2.6.23-z-input/drivers/input/keyboard/Kconfig +=================================================================== +--- linux-2.6.23-z-input.orig/drivers/input/keyboard/Kconfig 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/drivers/input/keyboard/Kconfig 2008-02-18 01:43:28.000000000 +0100 +@@ -218,13 +218,13 @@ + module will be called omap-keypad. + + config KEYBOARD_PXA27x +- tristate "PXA27x keyboard support" +- depends on PXA27x ++ tristate "PXA27x/PXA3xx keypad support" ++ depends on PXA27x || PXA3xx + help +- Enable support for PXA27x matrix keyboard controller ++ Enable support for PXA27x/PXA3xx keypad controller + + To compile this driver as a module, choose M here: the +- module will be called pxa27x_keyboard. ++ module will be called pxa27x_keypad. + + config KEYBOARD_AAED2000 + tristate "AAED-2000 keyboard" +Index: linux-2.6.23-z-input/drivers/input/keyboard/Makefile +=================================================================== +--- linux-2.6.23-z-input.orig/drivers/input/keyboard/Makefile 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/drivers/input/keyboard/Makefile 2008-02-18 01:43:28.000000000 +0100 +@@ -18,7 +18,7 @@ + obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o + obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o + obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o +-obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keyboard.o ++obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keypad.o + obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o + obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o + obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o +Index: linux-2.6.23-z-input/drivers/input/keyboard/pxa27x_keypad.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23-z-input/drivers/input/keyboard/pxa27x_keypad.c 2008-02-19 01:40:04.000000000 +0100 +@@ -0,0 +1,575 @@ ++/* ++ * linux/drivers/input/keyboard/pxa27x_keypad.c ++ * ++ * Driver for the pxa27x matrix keyboard controller. ++ * ++ * Created: Feb 22, 2007 ++ * Author: Rodolfo Giometti ++ * ++ * Based on a previous implementations by Kevin O'Connor ++ * and Alex Osborne and ++ * on some suggestions by Nicolas Pitre . ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) ++ ++/* ++ * Keypad Controller registers ++ */ ++#define KPC 0x0000 /* Keypad Control register */ ++#define KPDK 0x0008 /* Keypad Direct Key register */ ++#define KPREC 0x0010 /* Keypad Rotary Encoder register */ ++#define KPMK 0x0018 /* Keypad Matrix Key register */ ++#define KPAS 0x0020 /* Keypad Automatic Scan register */ ++ ++/* Keypad Automatic Scan Multiple Key Presser register 0-3 */ ++#define KPASMKP0 0x0028 ++#define KPASMKP1 0x0030 ++#define KPASMKP2 0x0038 ++#define KPASMKP3 0x0040 ++#define KPKDI 0x0048 ++ ++/* bit definitions */ ++#define KPC_MKRN(n) ((((n) - 1) & 0x7) << 26) /* matrix key row number */ ++#define KPC_MKCN(n) ((((n) - 1) & 0x7) << 23) /* matrix key column number */ ++#define KPC_DKN(n) ((((n) - 1) & 0x7) << 6) /* direct key number */ ++ ++#define KPC_AS (0x1 << 30) /* Automatic Scan bit */ ++#define KPC_ASACT (0x1 << 29) /* Automatic Scan on Activity */ ++#define KPC_MI (0x1 << 22) /* Matrix interrupt bit */ ++#define KPC_IMKP (0x1 << 21) /* Ignore Multiple Key Press */ ++ ++#define KPC_MS(n) (0x1 << (13 + (n))) /* Matrix scan line 'n' */ ++#define KPC_MS_ALL (0xff << 13) ++ ++#define KPC_ME (0x1 << 12) /* Matrix Keypad Enable */ ++#define KPC_MIE (0x1 << 11) /* Matrix Interrupt Enable */ ++#define KPC_DK_DEB_SEL (0x1 << 9) /* Direct Keypad Debounce Select */ ++#define KPC_DI (0x1 << 5) /* Direct key interrupt bit */ ++#define KPC_RE_ZERO_DEB (0x1 << 4) /* Rotary Encoder Zero Debounce */ ++#define KPC_REE1 (0x1 << 3) /* Rotary Encoder1 Enable */ ++#define KPC_REE0 (0x1 << 2) /* Rotary Encoder0 Enable */ ++#define KPC_DE (0x1 << 1) /* Direct Keypad Enable */ ++#define KPC_DIE (0x1 << 0) /* Direct Keypad interrupt Enable */ ++ ++#define KPDK_DKP (0x1 << 31) ++#define KPDK_DK(n) ((n) & 0xff) ++ ++#define KPREC_OF1 (0x1 << 31) ++#define kPREC_UF1 (0x1 << 30) ++#define KPREC_OF0 (0x1 << 15) ++#define KPREC_UF0 (0x1 << 14) ++ ++#define KPREC_RECOUNT0(n) ((n) & 0xff) ++#define KPREC_RECOUNT1(n) (((n) >> 16) & 0xff) ++ ++#define KPMK_MKP (0x1 << 31) ++#define KPAS_SO (0x1 << 31) ++#define KPASMKPx_SO (0x1 << 31) ++ ++#define KPAS_MUKP(n) (((n) >> 26) & 0x1f) ++#define KPAS_RP(n) (((n) >> 4) & 0xf) ++#define KPAS_CP(n) ((n) & 0xf) ++ ++#define KPASMKP_MKC_MASK (0xff) ++ ++#define keypad_readl(off) __raw_readl(keypad->mmio_base + (off)) ++#define keypad_writel(off, v) __raw_writel((v), keypad->mmio_base + (off)) ++ ++#define MAX_MATRIX_KEY_NUM (8 * 8) ++ ++struct pxa27x_keypad { ++ struct pxa27x_keypad_platform_data *pdata; ++ ++ struct clk *clk; ++ struct input_dev *input_dev; ++ void __iomem *mmio_base; ++ ++ /* matrix key code map */ ++ unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM]; ++ ++ /* state row bits of each column scan */ ++ uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS]; ++ uint32_t direct_key_state; ++ ++ unsigned int direct_key_mask; ++ ++ int rotary_rel_code[2]; ++ int rotary_up_key[2]; ++ int rotary_down_key[2]; ++}; ++ ++static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) ++{ ++ struct pxa27x_keypad_platform_data *pdata = keypad->pdata; ++ struct input_dev *input_dev = keypad->input_dev; ++ unsigned int *key; ++ int i; ++ ++ key = &pdata->matrix_key_map[0]; ++ for (i = 0; i < pdata->matrix_key_map_size; i++, key++) { ++ int row = ((*key) >> 28) & 0xf; ++ int col = ((*key) >> 24) & 0xf; ++ int code = (*key) & 0xffffff; ++ ++ keypad->matrix_keycodes[(row << 3) + col] = code; ++ set_bit(code, input_dev->keybit); ++ } ++ ++ keypad->rotary_up_key[0] = pdata->rotary0_up_key; ++ keypad->rotary_up_key[1] = pdata->rotary1_up_key; ++ keypad->rotary_down_key[0] = pdata->rotary0_down_key; ++ keypad->rotary_down_key[1] = pdata->rotary1_down_key; ++ keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; ++ keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; ++ ++ if (pdata->rotary0_up_key && pdata->rotary0_down_key) { ++ set_bit(pdata->rotary0_up_key, input_dev->keybit); ++ set_bit(pdata->rotary0_down_key, input_dev->keybit); ++ } else ++ set_bit(pdata->rotary0_rel_code, input_dev->relbit); ++ ++ if (pdata->rotary1_up_key && pdata->rotary1_down_key) { ++ set_bit(pdata->rotary1_up_key, input_dev->keybit); ++ set_bit(pdata->rotary1_down_key, input_dev->keybit); ++ } else ++ set_bit(pdata->rotary1_rel_code, input_dev->relbit); ++} ++ ++static inline unsigned int lookup_matrix_keycode( ++ struct pxa27x_keypad *keypad, int row, int col) ++{ ++ return keypad->matrix_keycodes[(row << 3) + col]; ++} ++ ++static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad) ++{ ++ struct pxa27x_keypad_platform_data *pdata = keypad->pdata; ++ int row, col, num_keys_pressed = 0; ++ uint32_t new_state[MAX_MATRIX_KEY_COLS]; ++ uint32_t kpas = keypad_readl(KPAS); ++ ++ num_keys_pressed = KPAS_MUKP(kpas); ++ ++ memset(new_state, 0, sizeof(new_state)); ++ ++ if (num_keys_pressed == 0) ++ goto scan; ++ ++ if (num_keys_pressed == 1) { ++ col = KPAS_CP(kpas); ++ row = KPAS_RP(kpas); ++ ++ /* if invalid row/col, treat as no key pressed */ ++ if (col >= pdata->matrix_key_cols || ++ row >= pdata->matrix_key_rows) ++ goto scan; ++ ++ new_state[col] = (1 << row); ++ goto scan; ++ } ++ ++ if (num_keys_pressed > 1) { ++ uint32_t kpasmkp0 = keypad_readl(KPASMKP0); ++ uint32_t kpasmkp1 = keypad_readl(KPASMKP1); ++ uint32_t kpasmkp2 = keypad_readl(KPASMKP2); ++ uint32_t kpasmkp3 = keypad_readl(KPASMKP3); ++ ++ new_state[0] = kpasmkp0 & KPASMKP_MKC_MASK; ++ new_state[1] = (kpasmkp0 >> 16) & KPASMKP_MKC_MASK; ++ new_state[2] = kpasmkp1 & KPASMKP_MKC_MASK; ++ new_state[3] = (kpasmkp1 >> 16) & KPASMKP_MKC_MASK; ++ new_state[4] = kpasmkp2 & KPASMKP_MKC_MASK; ++ new_state[5] = (kpasmkp2 >> 16) & KPASMKP_MKC_MASK; ++ new_state[6] = kpasmkp3 & KPASMKP_MKC_MASK; ++ new_state[7] = (kpasmkp3 >> 16) & KPASMKP_MKC_MASK; ++ } ++scan: ++ for (col = 0; col < pdata->matrix_key_cols; col++) { ++ uint32_t bits_changed; ++ ++ bits_changed = keypad->matrix_key_state[col] ^ new_state[col]; ++ if (bits_changed == 0) ++ continue; ++ ++ for (row = 0; row < pdata->matrix_key_rows; row++) { ++ if ((bits_changed & (1 << row)) == 0) ++ continue; ++ ++ input_report_key(keypad->input_dev, ++ lookup_matrix_keycode(keypad, row, col), ++ new_state[col] & (1 << row)); ++ } ++ } ++ input_sync(keypad->input_dev); ++ memcpy(keypad->matrix_key_state, new_state, sizeof(new_state)); ++} ++ ++#define DEFAULT_KPREC (0x007f007f) ++ ++static inline int rotary_delta(uint32_t kprec) ++{ ++ if (kprec & KPREC_OF0) ++ return (kprec & 0xff) + 0x7f; ++ else if (kprec & KPREC_UF0) ++ return (kprec & 0xff) - 0x7f - 0xff; ++ else ++ return (kprec & 0xff) - 0x7f; ++} ++ ++static void report_rotary_event(struct pxa27x_keypad *keypad, int r, int delta) ++{ ++ struct input_dev *dev = keypad->input_dev; ++ ++ if (delta == 0) ++ return; ++ ++ if (keypad->rotary_up_key[r] && keypad->rotary_down_key[r]) { ++ int keycode = (delta > 0) ? keypad->rotary_up_key[r] : ++ keypad->rotary_down_key[r]; ++ ++ /* simulate a press-n-release */ ++ input_report_key(dev, keycode, 1); ++ input_sync(dev); ++ input_report_key(dev, keycode, 0); ++ input_sync(dev); ++ } else { ++ input_report_rel(dev, keypad->rotary_rel_code[r], delta); ++ input_sync(dev); ++ } ++} ++ ++static void pxa27x_keypad_scan_rotary(struct pxa27x_keypad *keypad) ++{ ++ struct pxa27x_keypad_platform_data *pdata = keypad->pdata; ++ uint32_t kprec; ++ ++ /* read and reset to default count value */ ++ kprec = keypad_readl(KPREC); ++ keypad_writel(KPREC, DEFAULT_KPREC); ++ ++ if (pdata->enable_rotary0) ++ report_rotary_event(keypad, 0, rotary_delta(kprec)); ++ ++ if (pdata->enable_rotary1) ++ report_rotary_event(keypad, 1, rotary_delta(kprec >> 16)); ++} ++ ++static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad) ++{ ++ struct pxa27x_keypad_platform_data *pdata = keypad->pdata; ++ unsigned int new_state; ++ uint32_t kpdk, bits_changed; ++ int i; ++ ++ kpdk = keypad_readl(KPDK); ++ ++ if (pdata->enable_rotary0 || pdata->enable_rotary1) ++ pxa27x_keypad_scan_rotary(keypad); ++ ++ if (pdata->direct_key_map == NULL) ++ return; ++ ++ new_state = KPDK_DK(kpdk) & keypad->direct_key_mask; ++ bits_changed = keypad->direct_key_state ^ new_state; ++ ++ if (bits_changed == 0) ++ return; ++ ++ for (i = 0; i < pdata->direct_key_num; i++) { ++ if (bits_changed & (1 << i)) ++ input_report_key(keypad->input_dev, ++ pdata->direct_key_map[i], ++ (new_state & (1 << i))); ++ } ++ input_sync(keypad->input_dev); ++ keypad->direct_key_state = new_state; ++} ++ ++static irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id) ++{ ++ struct pxa27x_keypad *keypad = dev_id; ++ unsigned long kpc = keypad_readl(KPC); ++ ++ if (kpc & KPC_DI) ++ pxa27x_keypad_scan_direct(keypad); ++ ++ if (kpc & KPC_MI) ++ pxa27x_keypad_scan_matrix(keypad); ++ ++ return IRQ_HANDLED; ++} ++ ++static void pxa27x_keypad_config(struct pxa27x_keypad *keypad) ++{ ++ struct pxa27x_keypad_platform_data *pdata = keypad->pdata; ++ unsigned int mask = 0, direct_key_num = 0; ++ unsigned long kpc = 0; ++ ++ /* enable matrix keys with automatic scan */ ++ if (pdata->matrix_key_rows && pdata->matrix_key_cols) { ++ kpc |= KPC_ASACT | KPC_MIE | KPC_ME | KPC_MS_ALL; ++ kpc |= KPC_MKRN(pdata->matrix_key_rows) | ++ KPC_MKCN(pdata->matrix_key_cols); ++ } ++ ++ /* enable rotary key, debounce interval same as direct keys */ ++ if (pdata->enable_rotary0) { ++ mask |= 0x03; ++ direct_key_num = 2; ++ kpc |= KPC_REE0; ++ } ++ ++ if (pdata->enable_rotary1) { ++ mask |= 0x0c; ++ direct_key_num = 4; ++ kpc |= KPC_REE1; ++ } ++ ++ if (pdata->direct_key_num > direct_key_num) ++ direct_key_num = pdata->direct_key_num; ++ ++ keypad->direct_key_mask = ((2 << direct_key_num) - 1) & ~mask; ++ ++ /* enable direct key */ ++ if (direct_key_num) ++ kpc |= KPC_DE | KPC_DIE | KPC_DKN(direct_key_num); ++ ++ keypad_writel(KPC, kpc | KPC_RE_ZERO_DEB); ++ keypad_writel(KPREC, DEFAULT_KPREC); ++ keypad_writel(KPKDI, pdata->debounce_interval); ++} ++ ++static int pxa27x_keypad_open(struct input_dev *dev) ++{ ++ struct pxa27x_keypad *keypad = input_get_drvdata(dev); ++ ++ /* Enable unit clock */ ++ clk_enable(keypad->clk); ++ pxa27x_keypad_config(keypad); ++ ++ return 0; ++} ++ ++static void pxa27x_keypad_close(struct input_dev *dev) ++{ ++ struct pxa27x_keypad *keypad = input_get_drvdata(dev); ++ ++ /* Disable clock unit */ ++ clk_disable(keypad->clk); ++} ++ ++#ifdef CONFIG_PM ++static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); ++ ++ clk_disable(keypad->clk); ++ return 0; ++} ++ ++static int pxa27x_keypad_resume(struct platform_device *pdev) ++{ ++ struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); ++ struct input_dev *input_dev = keypad->input_dev; ++ ++ mutex_lock(&input_dev->mutex); ++ ++ if (input_dev->users) { ++ /* Enable unit clock */ ++ clk_enable(keypad->clk); ++ pxa27x_keypad_config(keypad); ++ } ++ ++ mutex_unlock(&input_dev->mutex); ++ ++ return 0; ++} ++#else ++#define pxa27x_keypad_suspend NULL ++#define pxa27x_keypad_resume NULL ++#endif ++ ++#define res_size(res) ((res)->end - (res)->start + 1) ++ ++static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) ++{ ++ struct pxa27x_keypad *keypad; ++ struct input_dev *input_dev; ++ struct resource *res; ++ int irq, error; ++ ++ keypad = kzalloc(sizeof(struct pxa27x_keypad), GFP_KERNEL); ++ if (keypad == NULL) { ++ dev_err(&pdev->dev, "failed to allocate driver data\n"); ++ return -ENOMEM; ++ } ++ ++ keypad->pdata = pdev->dev.platform_data; ++ if (keypad->pdata == NULL) { ++ dev_err(&pdev->dev, "no platform data defined\n"); ++ error = -EINVAL; ++ goto failed_free; ++ } ++ ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) { ++ dev_err(&pdev->dev, "failed to get keypad irq\n"); ++ error = -ENXIO; ++ goto failed_free; ++ } ++ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ if (res == NULL) { ++ dev_err(&pdev->dev, "failed to get I/O memory\n"); ++ error = -ENXIO; ++ goto failed_free; ++ } ++ ++ res = request_mem_region(res->start, res_size(res), pdev->name); ++ if (res == NULL) { ++ dev_err(&pdev->dev, "failed to request I/O memory\n"); ++ error = -EBUSY; ++ goto failed_free; ++ } ++ ++ keypad->mmio_base = ioremap(res->start, res_size(res)); ++ if (keypad->mmio_base == NULL) { ++ dev_err(&pdev->dev, "failed to remap I/O memory\n"); ++ error = -ENXIO; ++ goto failed_free_mem; ++ } ++ ++ keypad->clk = clk_get(&pdev->dev, "KBDCLK"); ++ if (IS_ERR(keypad->clk)) { ++ dev_err(&pdev->dev, "failed to get keypad clock\n"); ++ error = PTR_ERR(keypad->clk); ++ goto failed_free_io; ++ } ++ ++ /* Create and register the input driver. */ ++ input_dev = input_allocate_device(); ++ if (!input_dev) { ++ dev_err(&pdev->dev, "failed to allocate input device\n"); ++ error = -ENOMEM; ++ goto failed_put_clk; ++ } ++ ++ input_dev->name = pdev->name; ++ input_dev->id.bustype = BUS_HOST; ++ input_dev->open = pxa27x_keypad_open; ++ input_dev->close = pxa27x_keypad_close; ++ input_dev->dev.parent = &pdev->dev; ++ ++ keypad->input_dev = input_dev; ++ input_set_drvdata(input_dev, keypad); ++ ++ input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | ++ BIT_MASK(EV_REL); ++ ++ pxa27x_keypad_build_keycode(keypad); ++ platform_set_drvdata(pdev, keypad); ++ ++ error = request_irq(irq, pxa27x_keypad_irq_handler, IRQF_DISABLED, ++ pdev->name, keypad); ++ if (error) { ++ dev_err(&pdev->dev, "failed to request IRQ\n"); ++ goto failed_free_dev; ++ } ++ ++ /* Register the input device */ ++ error = input_register_device(input_dev); ++ if (error) { ++ dev_err(&pdev->dev, "failed to register input device\n"); ++ goto failed_free_irq; ++ } ++ ++ return 0; ++ ++failed_free_irq: ++ free_irq(irq, pdev); ++ platform_set_drvdata(pdev, NULL); ++failed_free_dev: ++ input_free_device(input_dev); ++failed_put_clk: ++ clk_put(keypad->clk); ++failed_free_io: ++ iounmap(keypad->mmio_base); ++failed_free_mem: ++ release_mem_region(res->start, res_size(res)); ++failed_free: ++ kfree(keypad); ++ return error; ++} ++ ++static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) ++{ ++ struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); ++ struct resource *res; ++ ++ free_irq(platform_get_irq(pdev, 0), pdev); ++ ++ clk_disable(keypad->clk); ++ clk_put(keypad->clk); ++ ++ input_unregister_device(keypad->input_dev); ++ input_free_device(keypad->input_dev); ++ ++ iounmap(keypad->mmio_base); ++ ++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ release_mem_region(res->start, res_size(res)); ++ ++ platform_set_drvdata(pdev, NULL); ++ kfree(keypad); ++ return 0; ++} ++ ++static struct platform_driver pxa27x_keypad_driver = { ++ .probe = pxa27x_keypad_probe, ++ .remove = __devexit_p(pxa27x_keypad_remove), ++ .suspend = pxa27x_keypad_suspend, ++ .resume = pxa27x_keypad_resume, ++ .driver = { ++ .name = "pxa27x-keypad", ++ }, ++}; ++ ++static int __init pxa27x_keypad_init(void) ++{ ++ return platform_driver_register(&pxa27x_keypad_driver); ++} ++ ++static void __exit pxa27x_keypad_exit(void) ++{ ++ platform_driver_unregister(&pxa27x_keypad_driver); ++} ++ ++module_init(pxa27x_keypad_init); ++module_exit(pxa27x_keypad_exit); ++ ++MODULE_DESCRIPTION("PXA27x Keypad Controller Driver"); ++MODULE_LICENSE("GPL"); +Index: linux-2.6.23-z-input/include/asm-arm/arch-pxa/pxa27x_keyboard.h +=================================================================== +--- linux-2.6.23-z-input.orig/include/asm-arm/arch-pxa/pxa27x_keyboard.h 2007-10-09 22:31:38.000000000 +0200 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,13 +0,0 @@ +-#define PXAKBD_MAXROW 8 +-#define PXAKBD_MAXCOL 8 +- +-struct pxa27x_keyboard_platform_data { +- int nr_rows, nr_cols; +- int keycodes[PXAKBD_MAXROW][PXAKBD_MAXCOL]; +- int gpio_modes[PXAKBD_MAXROW + PXAKBD_MAXCOL]; +- +-#ifdef CONFIG_PM +- u32 reg_kpc; +- u32 reg_kprec; +-#endif +-}; +Index: linux-2.6.23-z-input/include/asm-arm/arch-pxa/pxa27x_keypad.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23-z-input/include/asm-arm/arch-pxa/pxa27x_keypad.h 2008-02-18 01:43:28.000000000 +0100 +@@ -0,0 +1,58 @@ ++#ifndef __ASM_ARCH_PXA27x_KEYPAD_H ++#define __ASM_ARCH_PXA27x_KEYPAD_H ++ ++#include ++ ++#define MAX_MATRIX_KEY_ROWS (8) ++#define MAX_MATRIX_KEY_COLS (8) ++ ++/* pxa3xx keypad platform specific parameters ++ * ++ * NOTE: ++ * 1. direct_key_num indicates the number of keys in the direct keypad ++ * _plus_ the number of rotary-encoder sensor inputs, this can be ++ * left as 0 if only rotary encoders are enabled, the driver will ++ * automatically calculate this ++ * ++ * 2. direct_key_map is the key code map for the direct keys, if rotary ++ * encoder(s) are enabled, direct key 0/1(2/3) will be ignored ++ * ++ * 3. rotary can be either interpreted as a relative input event (e.g. ++ * REL_WHEEL/REL_HWHEEL) or specific keys (e.g. UP/DOWN/LEFT/RIGHT) ++ * ++ * 4. matrix key and direct key will use the same debounce_interval by ++ * default, which should be sufficient in most cases ++ */ ++struct pxa27x_keypad_platform_data { ++ ++ /* code map for the matrix keys */ ++ unsigned int matrix_key_rows; ++ unsigned int matrix_key_cols; ++ unsigned int *matrix_key_map; ++ int matrix_key_map_size; ++ ++ /* direct keys */ ++ int direct_key_num; ++ unsigned int direct_key_map[8]; ++ ++ /* rotary encoders 0 */ ++ int enable_rotary0; ++ int rotary0_rel_code; ++ int rotary0_up_key; ++ int rotary0_down_key; ++ ++ /* rotary encoders 1 */ ++ int enable_rotary1; ++ int rotary1_rel_code; ++ int rotary1_up_key; ++ int rotary1_down_key; ++ ++ /* key debounce interval */ ++ unsigned int debounce_interval; ++}; ++ ++#define KEY(row, col, val) (((row) << 28) | ((col) << 24) | (val)) ++ ++extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info); ++ ++#endif /* __ASM_ARCH_PXA27x_KEYPAD_H */ +Index: linux-2.6.23-z-input/drivers/input/keyboard/pxa27x_keyboard.c +=================================================================== +--- linux-2.6.23-z-input.orig/drivers/input/keyboard/pxa27x_keyboard.c 2008-02-18 01:43:28.000000000 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,273 +0,0 @@ +-/* +- * linux/drivers/input/keyboard/pxa27x_keyboard.c +- * +- * Driver for the pxa27x matrix keyboard controller. +- * +- * Created: Feb 22, 2007 +- * Author: Rodolfo Giometti +- * +- * Based on a previous implementations by Kevin O'Connor +- * and Alex Osborne and +- * on some suggestions by Nicolas Pitre . +- * +- * 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 +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +- +-#define DRIVER_NAME "pxa27x-keyboard" +- +-#define KPASMKP(col) (col/2 == 0 ? KPASMKP0 : \ +- col/2 == 1 ? KPASMKP1 : \ +- col/2 == 2 ? KPASMKP2 : KPASMKP3) +-#define KPASMKPx_MKC(row, col) (1 << (row + 16 * (col % 2))) +- +-static struct clk *pxakbd_clk; +- +-static irqreturn_t pxakbd_irq_handler(int irq, void *dev_id) +-{ +- struct platform_device *pdev = dev_id; +- struct pxa27x_keyboard_platform_data *pdata = pdev->dev.platform_data; +- struct input_dev *input_dev = platform_get_drvdata(pdev); +- unsigned long kpc = KPC; +- int p, row, col, rel; +- +- if (kpc & KPC_DI) { +- unsigned long kpdk = KPDK; +- +- if (!(kpdk & KPDK_DKP)) { +- /* better luck next time */ +- } else if (kpc & KPC_REE0) { +- unsigned long kprec = KPREC; +- KPREC = 0x7f; +- +- if (kprec & KPREC_OF0) +- rel = (kprec & 0xff) + 0x7f; +- else if (kprec & KPREC_UF0) +- rel = (kprec & 0xff) - 0x7f - 0xff; +- else +- rel = (kprec & 0xff) - 0x7f; +- +- if (rel) { +- input_report_rel(input_dev, REL_WHEEL, rel); +- input_sync(input_dev); +- } +- } +- } +- +- if (kpc & KPC_MI) { +- /* report the status of every button */ +- for (row = 0; row < pdata->nr_rows; row++) { +- for (col = 0; col < pdata->nr_cols; col++) { +- p = KPASMKP(col) & KPASMKPx_MKC(row, col) ? +- 1 : 0; +- pr_debug("keycode %x - pressed %x\n", +- pdata->keycodes[row][col], p); +- input_report_key(input_dev, +- pdata->keycodes[row][col], p); +- } +- } +- input_sync(input_dev); +- } +- +- return IRQ_HANDLED; +-} +- +-static int pxakbd_open(struct input_dev *dev) +-{ +- /* Set keypad control register */ +- KPC |= (KPC_ASACT | +- KPC_MS_ALL | +- (2 << 6) | KPC_REE0 | KPC_DK_DEB_SEL | +- KPC_ME | KPC_MIE | KPC_DE | KPC_DIE); +- +- KPC &= ~KPC_AS; /* disable automatic scan */ +- KPC &= ~KPC_IMKP; /* do not ignore multiple keypresses */ +- +- /* Set rotary count to mid-point value */ +- KPREC = 0x7F; +- +- /* Enable unit clock */ +- clk_enable(pxakbd_clk); +- +- return 0; +-} +- +-static void pxakbd_close(struct input_dev *dev) +-{ +- /* Disable clock unit */ +- clk_disable(pxakbd_clk); +-} +- +-#ifdef CONFIG_PM +-static int pxakbd_suspend(struct platform_device *pdev, pm_message_t state) +-{ +- struct pxa27x_keyboard_platform_data *pdata = pdev->dev.platform_data; +- +- /* Save controller status */ +- pdata->reg_kpc = KPC; +- pdata->reg_kprec = KPREC; +- +- return 0; +-} +- +-static int pxakbd_resume(struct platform_device *pdev) +-{ +- struct pxa27x_keyboard_platform_data *pdata = pdev->dev.platform_data; +- struct input_dev *input_dev = platform_get_drvdata(pdev); +- +- mutex_lock(&input_dev->mutex); +- +- if (input_dev->users) { +- /* Restore controller status */ +- KPC = pdata->reg_kpc; +- KPREC = pdata->reg_kprec; +- +- /* Enable unit clock */ +- clk_disable(pxakbd_clk); +- clk_enable(pxakbd_clk); +- } +- +- mutex_unlock(&input_dev->mutex); +- +- return 0; +-} +-#else +-#define pxakbd_suspend NULL +-#define pxakbd_resume NULL +-#endif +- +-static int __devinit pxakbd_probe(struct platform_device *pdev) +-{ +- struct pxa27x_keyboard_platform_data *pdata = pdev->dev.platform_data; +- struct input_dev *input_dev; +- int i, row, col, error; +- +- pxakbd_clk = clk_get(&pdev->dev, "KBDCLK"); +- if (IS_ERR(pxakbd_clk)) { +- error = PTR_ERR(pxakbd_clk); +- goto err_clk; +- } +- +- /* Create and register the input driver. */ +- input_dev = input_allocate_device(); +- if (!input_dev) { +- printk(KERN_ERR "Cannot request keypad device\n"); +- error = -ENOMEM; +- goto err_alloc; +- } +- +- input_dev->name = DRIVER_NAME; +- input_dev->id.bustype = BUS_HOST; +- input_dev->open = pxakbd_open; +- input_dev->close = pxakbd_close; +- input_dev->dev.parent = &pdev->dev; +- +- input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_REL); +- input_dev->relbit[LONG(REL_WHEEL)] = BIT(REL_WHEEL); +- for (row = 0; row < pdata->nr_rows; row++) { +- for (col = 0; col < pdata->nr_cols; col++) { +- int code = pdata->keycodes[row][col]; +- if (code > 0) +- set_bit(code, input_dev->keybit); +- } +- } +- +- error = request_irq(IRQ_KEYPAD, pxakbd_irq_handler, IRQF_DISABLED, +- DRIVER_NAME, pdev); +- if (error) { +- printk(KERN_ERR "Cannot request keypad IRQ\n"); +- goto err_free_dev; +- } +- +- platform_set_drvdata(pdev, input_dev); +- +- /* Register the input device */ +- error = input_register_device(input_dev); +- if (error) +- goto err_free_irq; +- +- /* Setup GPIOs. */ +- for (i = 0; i < pdata->nr_rows + pdata->nr_cols; i++) +- pxa_gpio_mode(pdata->gpio_modes[i]); +- +- /* +- * Store rows/cols info into keyboard registers. +- */ +- +- KPC |= (pdata->nr_rows - 1) << 26; +- KPC |= (pdata->nr_cols - 1) << 23; +- +- for (col = 0; col < pdata->nr_cols; col++) +- KPC |= KPC_MS0 << col; +- +- return 0; +- +- err_free_irq: +- platform_set_drvdata(pdev, NULL); +- free_irq(IRQ_KEYPAD, pdev); +- err_free_dev: +- input_free_device(input_dev); +- err_alloc: +- clk_put(pxakbd_clk); +- err_clk: +- return error; +-} +- +-static int __devexit pxakbd_remove(struct platform_device *pdev) +-{ +- struct input_dev *input_dev = platform_get_drvdata(pdev); +- +- input_unregister_device(input_dev); +- free_irq(IRQ_KEYPAD, pdev); +- clk_put(pxakbd_clk); +- platform_set_drvdata(pdev, NULL); +- +- return 0; +-} +- +-static struct platform_driver pxakbd_driver = { +- .probe = pxakbd_probe, +- .remove = __devexit_p(pxakbd_remove), +- .suspend = pxakbd_suspend, +- .resume = pxakbd_resume, +- .driver = { +- .name = DRIVER_NAME, +- }, +-}; +- +-static int __init pxakbd_init(void) +-{ +- return platform_driver_register(&pxakbd_driver); +-} +- +-static void __exit pxakbd_exit(void) +-{ +- platform_driver_unregister(&pxakbd_driver); +-} +- +-module_init(pxakbd_init); +-module_exit(pxakbd_exit); +- +-MODULE_DESCRIPTION("PXA27x Matrix Keyboard Driver"); +-MODULE_LICENSE("GPL"); +Index: linux-2.6.23-z-input/arch/arm/mach-pxa/zylonite.c +=================================================================== +--- linux-2.6.23-z-input.orig/arch/arm/mach-pxa/zylonite.c 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/arch/arm/mach-pxa/zylonite.c 2008-02-19 01:31:33.000000000 +0100 +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + #include "generic.h" + +@@ -173,6 +174,72 @@ + static inline void zylonite_init_lcd(void) {} + #endif + ++#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULES) ++static unsigned int zylonite_matrix_key_map[] = { ++ /* KEY(row, col, key_code) */ ++ KEY(0, 0, KEY_A), KEY(0, 1, KEY_B), KEY(0, 2, KEY_C), KEY(0, 5, KEY_D), ++ KEY(1, 0, KEY_E), KEY(1, 1, KEY_F), KEY(1, 2, KEY_G), KEY(1, 5, KEY_H), ++ KEY(2, 0, KEY_I), KEY(2, 1, KEY_J), KEY(2, 2, KEY_K), KEY(2, 5, KEY_L), ++ KEY(3, 0, KEY_M), KEY(3, 1, KEY_N), KEY(3, 2, KEY_O), KEY(3, 5, KEY_P), ++ KEY(5, 0, KEY_Q), KEY(5, 1, KEY_R), KEY(5, 2, KEY_S), KEY(5, 5, KEY_T), ++ KEY(6, 0, KEY_U), KEY(6, 1, KEY_V), KEY(6, 2, KEY_W), KEY(6, 5, KEY_X), ++ KEY(7, 1, KEY_Y), KEY(7, 2, KEY_Z), ++ ++ KEY(4, 4, KEY_0), KEY(1, 3, KEY_1), KEY(4, 1, KEY_2), KEY(1, 4, KEY_3), ++ KEY(2, 3, KEY_4), KEY(4, 2, KEY_5), KEY(2, 4, KEY_6), KEY(3, 3, KEY_7), ++ KEY(4, 3, KEY_8), KEY(3, 4, KEY_9), ++ ++ KEY(4, 5, KEY_SPACE), ++ KEY(5, 3, KEY_KPASTERISK), /* * */ ++ KEY(5, 4, KEY_KPDOT), /* #" */ ++ ++ KEY(0, 7, KEY_UP), ++ KEY(1, 7, KEY_DOWN), ++ KEY(2, 7, KEY_LEFT), ++ KEY(3, 7, KEY_RIGHT), ++ KEY(2, 6, KEY_HOME), ++ KEY(3, 6, KEY_END), ++ KEY(6, 4, KEY_DELETE), ++ KEY(6, 6, KEY_BACK), ++ KEY(6, 3, KEY_CAPSLOCK), /* KEY_LEFTSHIFT), */ ++ ++ KEY(4, 6, KEY_ENTER), /* scroll push */ ++ KEY(5, 7, KEY_ENTER), /* keypad action */ ++ ++ KEY(0, 4, KEY_EMAIL), ++ KEY(5, 6, KEY_SEND), ++ KEY(4, 0, KEY_CALENDAR), ++ KEY(7, 6, KEY_RECORD), ++ KEY(6, 7, KEY_VOLUMEUP), ++ KEY(7, 7, KEY_VOLUMEDOWN), ++ ++ KEY(0, 6, KEY_F22), /* soft1 */ ++ KEY(1, 6, KEY_F23), /* soft2 */ ++ KEY(0, 3, KEY_AUX), /* contact */ ++}; ++ ++static struct pxa27x_keypad_platform_data zylonite_keypad_info = { ++ .matrix_key_rows = 8, ++ .matrix_key_cols = 8, ++ .matrix_key_map = zylonite_matrix_key_map, ++ .matrix_key_map_size = ARRAY_SIZE(zylonite_matrix_key_map), ++ ++ .enable_rotary0 = 1, ++ .rotary0_up_key = KEY_UP, ++ .rotary0_down_key = KEY_DOWN, ++ ++ .debounce_interval = 30, ++}; ++ ++static void __init zylonite_init_keypad(void) ++{ ++ pxa_set_keypad_info(&zylonite_keypad_info); ++} ++#else ++static inline void zylonite_init_keypad(void) {} ++#endif ++ ++ + static void __init zylonite_init(void) + { + /* board-processor specific initialization */ +@@ -190,6 +257,7 @@ + platform_device_register(&touch_device); + + zylonite_init_lcd(); ++ zylonite_init_keypad(); + } + + MACHINE_START(ZYLONITE, "PXA3xx Platform Development Kit (aka Zylonite)") +Index: linux-2.6.23-z-input/arch/arm/mach-pxa/devices.h +=================================================================== +--- linux-2.6.23-z-input.orig/arch/arm/mach-pxa/devices.h 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/arch/arm/mach-pxa/devices.h 2008-02-18 01:43:28.000000000 +0100 +@@ -12,3 +12,4 @@ + + extern struct platform_device pxa27x_device_i2c_power; + extern struct platform_device pxa27x_device_ohci; ++extern struct platform_device pxa27x_device_keypad; +Index: linux-2.6.23-z-input/arch/arm/mach-pxa/generic.c +=================================================================== +--- linux-2.6.23-z-input.orig/arch/arm/mach-pxa/generic.c 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/arch/arm/mach-pxa/generic.c 2008-02-18 01:43:28.000000000 +0100 +@@ -450,3 +450,34 @@ + .name = "sa1100-rtc", + .id = -1, + }; ++ ++static struct resource pxa27x_resource_keypad[] = { ++ [0] = { ++ .start = 0x41500000, ++ .end = 0x4150004c, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = IRQ_KEYPAD, ++ .end = IRQ_KEYPAD, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++struct platform_device pxa27x_device_keypad = { ++ .name = "pxa27x-keypad", ++ .id = -1, ++ .resource = pxa27x_resource_keypad, ++ .num_resources = ARRAY_SIZE(pxa27x_resource_keypad), ++}; ++ ++void __init pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info) ++{ ++ int ret; ++ ++ pxa27x_device_keypad.dev.platform_data = info; ++ ++ ret = platform_device_register(&pxa27x_device_keypad); ++ if (ret) ++ dev_err(&pxa27x_device_keypad.dev, "unable to register device: %d\n", ret); ++} +Index: linux-2.6.23-z-input/arch/arm/mach-pxa/pxa27x.c +=================================================================== +--- linux-2.6.23-z-input.orig/arch/arm/mach-pxa/pxa27x.c 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/arch/arm/mach-pxa/pxa27x.c 2008-02-18 01:43:28.000000000 +0100 +@@ -148,7 +148,7 @@ + + INIT_CKEN("USBCLK", USB, 48000000, 0, &pxa27x_device_ohci.dev), + INIT_CKEN("I2CCLK", PWRI2C, 13000000, 0, &pxa27x_device_i2c_power.dev), +- INIT_CKEN("KBDCLK", KEYPAD, 32768, 0, NULL), ++ INIT_CKEN("KBDCLK", KEYPAD, 32768, 0, &pxa27x_device_keypad.dev), + + /* + INIT_CKEN("PWMCLK", PWM0, 13000000, 0, NULL), +Index: linux-2.6.23-z-input/arch/arm/mach-pxa/pxa3xx.c +=================================================================== +--- linux-2.6.23-z-input.orig/arch/arm/mach-pxa/pxa3xx.c 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/arch/arm/mach-pxa/pxa3xx.c 2008-02-19 01:32:40.000000000 +0100 +@@ -159,6 +159,7 @@ + static struct clk pxa3xx_clks[] = { + INIT_CK("LCDCLK", LCD, &clk_pxa3xx_hsio_ops, &pxa_device_fb.dev), + INIT_CK("CAMCLK", CAMERA, &clk_pxa3xx_hsio_ops, NULL), ++ INIT_CK("KBDCLK", KEYPAD, &clk_pxa3xx_hsio_ops, &pxa27x_device_keypad.dev), + + INIT_CKEN("UARTCLK", FFUART, 14857000, 1, &pxa_device_ffuart.dev), + INIT_CKEN("UARTCLK", BTUART, 14857000, 1, &pxa_device_btuart.dev), +Index: linux-2.6.23-z-input/include/asm-arm/arch-pxa/irqs.h +=================================================================== +--- linux-2.6.23-z-input.orig/include/asm-arm/arch-pxa/irqs.h 2008-02-18 01:43:28.000000000 +0100 ++++ linux-2.6.23-z-input/include/asm-arm/arch-pxa/irqs.h 2008-02-18 01:43:28.000000000 +0100 +@@ -13,7 +13,7 @@ + + #define PXA_IRQ(x) (x) + +-#ifdef CONFIG_PXA27x ++#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) + #define IRQ_SSP3 PXA_IRQ(0) /* SSP3 service request */ + #define IRQ_MSL PXA_IRQ(1) /* MSL Interface interrupt */ + #define IRQ_USBH2 PXA_IRQ(2) /* USB Host interrupt 1 (OHCI) */ +Index: linux-2.6.23-z-input/arch/arm/mach-pxa/pxa300.c +=================================================================== +--- linux-2.6.23-z-input.orig/arch/arm/mach-pxa/pxa300.c 2008-02-19 01:33:58.000000000 +0100 ++++ linux-2.6.23-z-input/arch/arm/mach-pxa/pxa300.c 2008-02-19 01:34:35.000000000 +0100 +@@ -23,8 +23,10 @@ + + MFP_ADDR_X(GPIO0, GPIO2, 0x00b4), + MFP_ADDR_X(GPIO3, GPIO26, 0x027c), +- MFP_ADDR_X(GPIO27, GPIO127, 0x0400), +- MFP_ADDR_X(GPIO0_2, GPIO6_2, 0x02ec), ++ MFP_ADDR_X(GPIO27, GPIO98, 0x0400), ++ MFP_ADDR_X(GPIO99, GPIO127, 0x0600), ++ MFP_ADDR_X(GPIO0_2, GPIO1_2, 0x0674), ++ MFP_ADDR_X(GPIO2_2, GPIO6_2, 0x02dc), + + MFP_ADDR(nBE0, 0x0204), + MFP_ADDR(nBE1, 0x0208), diff --git a/packages/linux/linux-rp-2.6.26/zylonite_mtd-r0.patch b/packages/linux/linux-rp-2.6.26/zylonite_mtd-r0.patch new file mode 100644 index 0000000000..cb5a9c5f72 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/zylonite_mtd-r0.patch @@ -0,0 +1,4093 @@ +Gross hacks to make the Zylonite boot from flash in VGA. + +Flash driver forward ported to 2.6.14 + +Index: linux-2.6.23/drivers/mtd/nand/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/mtd/nand/Kconfig 2007-10-09 21:31:38.000000000 +0100 ++++ linux-2.6.23/drivers/mtd/nand/Kconfig 2008-02-13 00:59:45.000000000 +0000 +@@ -223,6 +223,10 @@ + tristate "Support for NAND Flash on Sharp SL Series (C7xx + others)" + depends on ARCH_PXA + ++config MTD_NAND_ZYLONITE ++ tristate "Support for NAND Flash on Zylonite" ++ depends on ARCH_PXA ++ + config MTD_NAND_BASLER_EXCITE + tristate "Support for NAND Flash on Basler eXcite" + depends on BASLER_EXCITE +Index: linux-2.6.23/drivers/mtd/nand/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/mtd/nand/Makefile 2007-10-09 21:31:38.000000000 +0100 ++++ linux-2.6.23/drivers/mtd/nand/Makefile 2008-02-13 00:59:45.000000000 +0000 +@@ -19,6 +19,7 @@ + obj-$(CONFIG_MTD_NAND_H1900) += h1910.o + obj-$(CONFIG_MTD_NAND_RTC_FROM4) += rtc_from4.o + obj-$(CONFIG_MTD_NAND_SHARPSL) += sharpsl.o ++obj-$(CONFIG_MTD_NAND_ZYLONITE) += mhn_nand.o + obj-$(CONFIG_MTD_NAND_TS7250) += ts7250.o + obj-$(CONFIG_MTD_NAND_NANDSIM) += nandsim.o + obj-$(CONFIG_MTD_NAND_CS553X) += cs553x_nand.o +Index: linux-2.6.23/drivers/mtd/nand/mhn_nand.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/mtd/nand/mhn_nand.c 2008-02-13 00:59:45.000000000 +0000 +@@ -0,0 +1,3869 @@ ++/* ++ * drivers/mtd/nand/mhn_nand.c ++ * ++ * Copyright (C) 2005 Intel Coporation (chao.xie@intel.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. ++ * ++ * Overview: ++ * This is a device driver for the NAND flash device on zylonite board ++ * which utilizes the Samsung K9K1216Q0C parts. This is a 64Mibit NAND ++ * flash device. ++ ++ *(C) Copyright 2006 Marvell International Ltd. ++ * All Rights Reserved ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++//#include ++ ++//#define NDCR 0xf0000000 ++//#define NDCR (*((volatile u32 *)0xf0000000)) ++//#define NDCR __REG_2(0x43100000) /* Data Flash Control register */ ++#define NDCR_SPARE_EN (0x1<<31) ++#define NDCR_ECC_EN (0x1<<30) ++#define NDCR_DMA_EN (0x1<<29) ++#define NDCR_ND_RUN (0x1<<28) ++#define NDCR_DWIDTH_C (0x1<<27) ++#define NDCR_DWIDTH_M (0x1<<26) ++#define NDCR_PAGE_SZ (0x1<<24) ++#define NDCR_NCSX (0x1<<23) ++#define NDCR_ND_MODE (0x3<<21) ++#define NDCR_NAND_MODE 0x0 ++#define NDCR_CLR_PG_CNT (0x1<<20) ++#define NDCR_CLR_ECC ( 0x1<<19) ++#define NDCR_RD_ID_CNT_MASK (0x7<<16) ++#define NDCR_RD_ID_CNT(x) (((x) << 16) & NDCR_RD_ID_CNT_MASK) ++#define NDCR_RA_START (0x1<<15) ++#define NDCR_PG_PER_BLK (0x1<<14) ++#define NDCR_ND_ARB_EN (0x1<<12) ++ ++//#define NDSR (*((volatile u32 *)0xf0000014)) ++//#define NDSR __REG_2(0x43100014) /* Data Controller Status Register */ ++#define NDSR_RDY (0x1<<11) ++#define NDSR_CS0_PAGED (0x1<<10) ++#define NDSR_CS1_PAGED (0x1<<9) ++#define NDSR_CS0_CMDD (0x1<<8) ++#define NDSR_CS1_CMDD (0x1<<7) ++#define NDSR_CS0_BBD (0x1<<6) ++#define NDSR_CS1_BBD (0x1<<5) ++#define NDSR_DBERR (0x1<<4) ++#define NDSR_SBERR (0x1<<3) ++#define NDSR_WRDREQ (0x1<<2) ++#define NDSR_RDDREQ (0x1<<1) ++#define NDSR_WRCMDREQ (0x1) ++ ++#define OSCR __REG(0x40A00010) /* OS Timer Counter Register */ ++//#define NDCB0 __REG_2(0x43100048) /* Data Controller Command Buffer0 */ ++//#define NDCB1 __REG_2(0x4310004C) /* Data Controller Command Buffer1 */ ++//#define NDCB2 __REG_2(0x43100050) /* Data Controller Command Buffer2 */ ++#define NDCB0_AUTO_RS (0x1<<25) ++#define NDCB0_CSEL (0x1<<24) ++#define NDCB0_CMD_TYPE_MASK (0x7<<21) ++#define NDCB0_CMD_TYPE(x) (((x) << 21) & NDCB0_CMD_TYPE_MASK) ++#define NDCB0_NC (0x1<<20) ++#define NDCB0_DBC (0x1<<19) ++#define NDCB0_ADDR_CYC_MASK (0x7<<16) ++#define NDCB0_ADDR_CYC(x) (((x) << 16) & NDCB0_ADDR_CYC_MASK) ++#define NDCB0_CMD2_MASK (0xff<<8) ++#define NDCB0_CMD1_MASK (0xff) ++#define NDCB0_ADDR_CYC_SHIFT (16) ++#define DCMD0 __REG(0x4000020c) /* DMA Command Address Register Channel 0 */ ++#define DCMD1 __REG(0x4000021c) /* DMA Command Address Register Channel 1 */ ++#define DCMD2 __REG(0x4000022c) /* DMA Command Address Register Channel 2 */ ++#define DCMD3 __REG(0x4000023c) /* DMA Command Address Register Channel 3 */ ++#define DCMD4 __REG(0x4000024c) /* DMA Command Address Register Channel 4 */ ++#define DCMD5 __REG(0x4000025c) /* DMA Command Address Register Channel 5 */ ++#define DCMD6 __REG(0x4000026c) /* DMA Command Address Register Channel 6 */ ++#define DCMD7 __REG(0x4000027c) /* DMA Command Address Register Channel 7 */ ++#define DCMD8 __REG(0x4000028c) /* DMA Command Address Register Channel 8 */ ++#define DCMD9 __REG(0x4000029c) /* DMA Command Address Register Channel 9 */ ++#define DCMD10 __REG(0x400002ac) /* DMA Command Address Register Channel 10 */ ++#define DCMD11 __REG(0x400002bc) /* DMA Command Address Register Channel 11 */ ++#define DCMD12 __REG(0x400002cc) /* DMA Command Address Register Channel 12 */ ++#define DCMD13 __REG(0x400002dc) /* DMA Command Address Register Channel 13 */ ++#define DCMD14 __REG(0x400002ec) /* DMA Command Address Register Channel 14 */ ++#define DCMD15 __REG(0x400002fc) /* DMA Command Address Register Channel 15 */ ++#define DCMD(x) __REG2(0x4000020c, (x) << 4) ++#define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */ ++#define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */ ++#define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */ ++#define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */ ++#define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */ ++#define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */ ++#define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */ ++#define DCMD_BURST8 (1 << 16) /* 8 byte burst */ ++#define DCMD_BURST16 (2 << 16) /* 16 byte burst */ ++#define DCMD_BURST32 (3 << 16) /* 32 byte burst */ ++#define DCMD_WIDTH1 (1 << 14) /* 1 byte width */ ++#define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */ ++#define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */ ++#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ ++#define DCMD_RXPCDR (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4) ++#define DCMD_RXMCDR (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4) ++#define DCMD_TXPCDR (DCMD_INCSRCADDR|DCMD_FLOWTRG|DCMD_BURST32|DCMD_WIDTH4) ++#define DRCMR(n) __REG2(0x40000100, (n)<<2) ++#define DRCMR97 __REG(0x40001184) /* Request to Channel Map Register for NAND interface data transmit & receive Request */ ++#define DRCMR98 __REG(0x40001188) /* Reserved */ ++#define DRCMR99 __REG(0x4000118C) /* Request to Channel Map Register for NAND interface command transmit Request */ ++#define DRCMRRXSADR DRCMR2 ++#define DRCMRTXSADR DRCMR3 ++#define DRCMRRXBTRBR DRCMR4 ++#define DRCMRTXBTTHR DRCMR5 ++#define DRCMRRXFFRBR DRCMR6 ++#define DRCMRTXFFTHR DRCMR7 ++#define DRCMRRXMCDR DRCMR8 ++#define DRCMRRXMODR DRCMR9 ++#define DRCMRTXMODR DRCMR10 ++#define DRCMRRXPCDR DRCMR11 ++#define DRCMRTXPCDR DRCMR12 ++#define DRCMRRXSSDR DRCMR13 ++#define DRCMRTXSSDR DRCMR14 ++#define DRCMRRXICDR DRCMR17 ++#define DRCMRTXICDR DRCMR18 ++#define DRCMRRXSTRBR DRCMR19 ++#define DRCMRTXSTTHR DRCMR20 ++#define DRCMRRXMMC DRCMR21 ++#define DRCMRTXMMC DRCMR22 ++#define DRCMRRXMMC2 DRCMR93 ++#define DRCMRTXMMC2 DRCMR94 ++#define DRCMRRXMMC3 DRCMR100 ++#define DRCMRTXMMC3 DRCMR101 ++#define DRCMRUDC(x) DRCMR((x) + 24) ++#define DRCMR_MAPVLD (1 << 7) /* Map Valid (read / write) */ ++#define DRCMR_CHLNUM 0x1f /* mask for Channel Number (read / write) */ ++#define DCSR0 __REG(0x40000000) /* DMA Control / Status Register for Channel 0 */ ++#define DCSR1 __REG(0x40000004) /* DMA Control / Status Register for Channel 1 */ ++#define DCSR2 __REG(0x40000008) /* DMA Control / Status Register for Channel 2 */ ++#define DCSR3 __REG(0x4000000c) /* DMA Control / Status Register for Channel 3 */ ++#define DCSR4 __REG(0x40000010) /* DMA Control / Status Register for Channel 4 */ ++#define DCSR5 __REG(0x40000014) /* DMA Control / Status Register for Channel 5 */ ++#define DCSR6 __REG(0x40000018) /* DMA Control / Status Register for Channel 6 */ ++#define DCSR7 __REG(0x4000001c) /* DMA Control / Status Register for Channel 7 */ ++#define DCSR8 __REG(0x40000020) /* DMA Control / Status Register for Channel 8 */ ++#define DCSR9 __REG(0x40000024) /* DMA Control / Status Register for Channel 9 */ ++#define DCSR10 __REG(0x40000028) /* DMA Control / Status Register for Channel 10 */ ++#define DCSR11 __REG(0x4000002c) /* DMA Control / Status Register for Channel 11 */ ++#define DCSR12 __REG(0x40000030) /* DMA Control / Status Register for Channel 12 */ ++#define DCSR13 __REG(0x40000034) /* DMA Control / Status Register for Channel 13 */ ++#define DCSR14 __REG(0x40000038) /* DMA Control / Status Register for Channel 14 */ ++#define DCSR15 __REG(0x4000003c) /* DMA Control / Status Register for Channel 15 */ ++#define DCSR16 __REG(0x40000040) /* DMA Control / Status Register for Channel 16 */ ++#define DCSR17 __REG(0x40000044) /* DMA Control / Status Register for Channel 17 */ ++#define DCSR18 __REG(0x40000048) /* DMA Control / Status Register for Channel 18 */ ++#define DCSR19 __REG(0x4000004c) /* DMA Control / Status Register for Channel 19 */ ++#define DCSR20 __REG(0x40000050) /* DMA Control / Status Register for Channel 20 */ ++#define DCSR21 __REG(0x40000054) /* DMA Control / Status Register for Channel 21 */ ++#define DCSR22 __REG(0x40000058) /* DMA Control / Status Register for Channel 22 */ ++#define DCSR23 __REG(0x4000005c) /* DMA Control / Status Register for Channel 23 */ ++#define DCSR24 __REG(0x40000060) /* DMA Control / Status Register for Channel 24 */ ++#define DCSR25 __REG(0x40000064) /* DMA Control / Status Register for Channel 25 */ ++#define DCSR26 __REG(0x40000068) /* DMA Control / Status Register for Channel 26 */ ++#define DCSR27 __REG(0x4000006c) /* DMA Control / Status Register for Channel 27 */ ++#define DCSR28 __REG(0x40000070) /* DMA Control / Status Register for Channel 28 */ ++#define DCSR29 __REG(0x40000074) /* DMA Control / Status Register for Channel 29 */ ++#define DCSR30 __REG(0x40000078) /* DMA Control / Status Register for Channel 30 */ ++#define DCSR31 __REG(0x4000007c) /* DMA Control / Status Register for Channel 31 */ ++#define DCSR(x) __REG2(0x40000000, (x) << 2) ++#define DCSR_RUN (1 << 31) /* Run Bit (read / write) */ ++#define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch (read / write) */ ++#define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable (read / write) */ ++#define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable (R/W) */ ++#define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */ ++#define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */ ++#define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */ ++#define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */ ++#define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */ ++#define DCSR_EORINTR (1 << 9) /* The end of Receive */ ++#define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */ ++#define DCSR_RASINTR (1 << 4) /* Request After Channel Stopped */ ++#define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */ ++#define DCSR_ENDINTR (1 << 2) /* End Interrupt (read / write) */ ++#define DCSR_STARTINTR (1 << 1) /* Start Interrupt (read / write) */ ++#define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt (read / write) */ ++#define DDADR(x) __REG2(0x40000200, (x) << 4) ++//#define __REG_2(x) (*((volatile u32 *)io_p2v_2(x))) ++#define IRQ_NAND PXA_IRQ(45) ++#define CKEN_NAND 4 ///< NAND Flash Controller Clock Enable ++ ++/* #define CONFIG_MTD_NAND_MONAHANS_DEBUG */ ++#ifdef CONFIG_MTD_NAND_MONAHANS_DEBUG ++#define D1(x) do { \ ++ printk(KERN_DEBUG "%s: ", __FUNCTION__); \ ++ x; \ ++ }while(0) ++ ++#define DPRINTK(fmt,args...) printk(KERN_DEBUG fmt, ##args ) ++#define PRINT_BUF(buf, num) print_buf(buf, num) ++#else ++#define D1(x) ++#define DPRINTK(fmt,args...) ++#define PRINT_BUF(buf, num) ++#endif ++ ++/* DFC timing 0 register */ ++#define DFC_TIMING_tRP 0 ++#define DFC_TIMING_tRH 3 ++#define DFC_TIMING_tWP 8 ++#define DFC_TIMING_tWH 11 ++#define DFC_TIMING_tCS 16 ++#define DFC_TIMING_tCH 19 ++ ++/* DFC timing 1 register */ ++#define DFC_TIMING_tAR 0 ++#define DFC_TIMING_tWHR 4 ++#define DFC_TIMING_tR 16 ++ ++/* max value for each timing setting in DFC */ ++#define DFC_TIMING_MAX_tCH 7 ++#define DFC_TIMING_MAX_tCS 7 ++#define DFC_TIMING_MAX_tWH 7 ++#define DFC_TIMING_MAX_tWP 7 ++#define DFC_TIMING_MAX_tRH 7 ++#define DFC_TIMING_MAX_tRP 7 ++#define DFC_TIMING_MAX_tR 65535 ++#define DFC_TIMING_MAX_tWHR 15 ++#define DFC_TIMING_MAX_tAR 15 ++ ++/* ++ * The Data Flash Controller Flash timing structure ++ * For NAND flash used on Zylonite board(Samsung K9K1216Q0C), ++ * user should use value at end of each row of following member ++ * bracketed. ++ */ ++struct dfc_flash_timing { ++ uint32_t tCH; /* Enable signal hold time */ ++ uint32_t tCS; /* Enable signal setup time */ ++ uint32_t tWH; /* ND_nWE high duration */ ++ uint32_t tWP; /* ND_nWE pulse time */ ++ uint32_t tRH; /* ND_nRE high duration */ ++ uint32_t tRP; /* ND_nRE pulse width */ ++ uint32_t tR; /* ND_nWE high to ND_nRE low for read */ ++ uint32_t tWHR;/* ND_nWE high to ND_nRE low delay for status read */ ++ uint32_t tAR; /* ND_ALE low to ND_nRE low delay */ ++}; ++ ++/* DFC command type */ ++enum { ++ DFC_CMD_READ = 0x00000000, ++ DFC_CMD_PROGRAM = 0x00200000, ++ DFC_CMD_ERASE = 0x00400000, ++ DFC_CMD_READ_ID = 0x00600000, ++ DFC_CMD_STATUS_READ = 0x00800000, ++ DFC_CMD_RESET = 0x00a00000 ++}; ++ ++/* ++ * The Data Flash Controller Flash specification structure ++ * For NAND flash used on Zylonite board(Samsung K9K1216Q0C), ++ * user should use value at end of each row of following member ++ * bracketed. ++ */ ++struct dfc_flash_info { ++ struct dfc_flash_timing timing; /* NAND Flash timing */ ++ ++ int enable_arbiter;/* Data flash bus arbiter enable (ND_ARB_EN) */ ++ uint32_t page_per_block;/* Pages per block (PG_PER_BLK) */ ++ uint32_t row_addr_start;/* Row address start position (RA_START) */ ++ uint32_t read_id_bytes; /* returned ID bytes(RD_ID_CNT) */ ++ uint32_t dfc_mode; /* NAND, CARBONDALE, PIXLEY... (ND_MODE) */ ++ uint32_t ncsx; /* Chip select don't care bit (NCSX) */ ++ uint32_t page_size; /* Page size in bytes (PAGE_SZ) */ ++ uint32_t oob_size; /* OOB size */ ++ uint32_t flash_width; /* Width of Flash memory (DWIDTH_M) */ ++ uint32_t dfc_width; /* Width of flash controller(DWIDTH_C) */ ++ uint32_t num_blocks; /* Number of physical blocks in Flash */ ++ uint32_t chip_id; ++ ++ /* command codes */ ++ uint32_t read1; /* Read */ ++ uint32_t read2; /* unused, DFC don't support yet */ ++ uint32_t program; /* two cycle command */ ++ uint32_t read_status; ++ uint32_t read_id; ++ uint32_t erase; /* two cycle command */ ++ uint32_t reset; ++ uint32_t lock; /* lock whole flash */ ++ uint32_t unlock; /* two cycle command, supporting partial unlock */ ++ uint32_t lock_status; /* read block lock status */ ++ ++ /* addr2ndcb1 - encode address cycles into register NDCB1 */ ++ /* ndbbr2addr - convert register NDBBR to bad block address */ ++ int (*addr2ndcb1)(uint16_t cmd, uint32_t addr, uint32_t *p); ++ int (*ndbbr2addr)(uint16_t cmd, uint32_t ndbbr,uint32_t *p); ++}; ++ ++enum { ++ DFC_FLASH_NULL = 0 , ++ DFC_FLASH_Samsung_512Mb_X_16 = 1, ++ DFC_FLASH_Micron_1Gb_X_8 = 2, ++ DFC_FLASH_Micron_1Gb_X_16 = 3, ++ DFC_FLASH_STM_1Gb_X_16 = 4, ++ DFC_FLASH_STM_2Gb_X_16 = 5, ++ DFC_FLASH_END, ++}; ++ ++static int dfc_get_flash_info(int type, struct dfc_flash_info **flash_info); ++ ++#define DFC_NDCR 0 ++#define DFC_NDTR0CS0 1 ++#define DFC_NDTR1CS0 3 ++#define DFC_NDSR 5 ++#define DFC_NDPCR 6 ++#define DFC_NDBDR0 7 ++#define DFC_NDBDR1 8 ++#define DFC_NDDB 16 ++#define DFC_NDCB0 18 ++#define DFC_NDCB1 19 ++#define DFC_NDCB2 20 ++ ++/* The Data Flash Controller Mode structure */ ++struct dfc_mode { ++ int enable_dma; /* DMA, or nonDMA mode */ ++ int enable_ecc; /* ECC on/off */ ++ int enable_spare; /* Spare enable */ ++ int chip_select; /* CS0 or CS1 */ ++}; ++ ++/* The Data Flash Controller Context structure */ ++struct dfc_context { ++ unsigned char __iomem *membase; /* DFC register base */ ++ struct dfc_mode *dfc_mode; /* DFC mode */ ++ int data_dma_ch; /* Data DMA channel number */ ++ int cmd_dma_ch; /* CMD DMA channel number */ ++ struct dfc_flash_info *flash_info; /* Flash Spec */ ++ struct mtd_info *mtd; ++}; ++ ++#define NDCB0_DMA_ADDR 0x43100048 ++#define NDDB_DMA_ADDR 0x43100040 ++ ++#define NDSR_MASK 0xFFF ++ ++/* The following data is a rough evaluation */ ++ ++/* microsecond, for readID/readStatus/reset */ ++#define NAND_OTHER_TIMEOUT 10 ++/* microsecond, for readID/readStatus/reset */ ++#define NAND_CMD_TIMEOUT 10 ++ ++#define BBT_BLOCK_BAD 0x03 ++#define BBT_BLOCK_GOOD 0x00 ++#define BBT_BLOCK_REV1 0x01 ++#define BBT_BLOCK_REV2 0x02 ++ ++#define BUFLEN (2048 + 64) ++ ++/* ++ * DFC data size enumeration transfered from/to controller, ++ * including padding (zero)to be a multiple of 32. ++ */ ++enum { ++ DFC_DATA_SIZE_STATUS = 8, /* ReadStatus/ReadBlockLockStatus */ ++ DFC_DATA_SIZE_ID = 7, /* ReadID */ ++ ++ DFC_DATA_SIZE_32 = 32, ++ DFC_DATA_SIZE_512 = 512, /* R/W disabling spare area */ ++ DFC_DATA_SIZE_520 = 520, /* Spare=1, ECC=1 */ ++ DFC_DATA_SIZE_528 = 528, /* Spare=1, ECC=0 */ ++ DFC_DATA_SIZE_544 = 544, /* R/W enabling spare area.(DMA mode)*/ ++ ++ DFC_DATA_SIZE_64 = 64, ++ DFC_DATA_SIZE_2048 = 2048, /* R/W disabling spare area */ ++ DFC_DATA_SIZE_2088 = 2088, /* R/W enabling spare area with ecc */ ++ DFC_DATA_SIZE_2112 = 2112, /* R/W enabling spare area without ecc*/ ++ DFC_DATA_SIZE_2096 = 2096, /* R/W enabling spare area */ ++ DFC_DATA_SIZE_UNUSED = 0xFFFF ++}; ++ ++/* DFC padding size enumeration transfered from/to controller */ ++enum { ++ /* ++ * ReadStatus/ReadBlockLockStatus/ReadID/ ++ * Read/Program disabling spare area(Both 512 and 2048) ++ * Read/Program enabling spare area, disabling ECC ++ */ ++ DFC_PADDING_SIZE_0 = 0, ++ ++ /* Read/program with SPARE_EN=1, ECC_EN=0, pgSize=512 */ ++ DFC_PADDING_SIZE_16 = 16, ++ /* for read/program with SPARE_EN=1, ECC_EN=1, pgSize=512 and 2048 */ ++ DFC_PADDING_SIZE_24 = 24, ++ DFC_PADDING_SIZE_UNUSED = 0xFFFF ++}; ++ ++static unsigned int flash_config = DFC_FLASH_NULL; ++ ++void dfc_set_timing(struct dfc_context *context, struct dfc_flash_timing *t); ++void dfc_set_dma(struct dfc_context *context); ++void dfc_set_ecc(struct dfc_context *context); ++void dfc_set_spare(struct dfc_context *context); ++ ++int dfc_get_pattern(struct dfc_context *context, uint16_t cmd, ++ int *data_size, int *padding); ++ ++static int dfc_wait_event(struct dfc_context *context, uint32_t event, ++ uint32_t *event_out, uint32_t timeout, int enable_int); ++ ++int dfc_send_cmd(struct dfc_context *context, uint16_t cmd, ++ uint32_t addr, int num_pages); ++ ++void dfc_stop(struct dfc_context *context); ++void dfc_read_fifo_partial(struct dfc_context *context, uint8_t *buffer, ++ int nbytes, int data_size); ++void dfc_write_fifo_partial(struct dfc_context *context, uint8_t *buffer, ++ int nbytes, int data_size); ++ ++void dfc_read_fifo(struct dfc_context *context, uint8_t *buffer, int nbytes); ++void dfc_write_fifo(struct dfc_context *context, uint8_t *buffer, int nbytes); ++ ++void dfc_read_badblock_addr(struct dfc_context *context, uint32_t *bbaddr); ++ ++void dfc_clear_int(struct dfc_context *context, uint32_t int_mask); ++void dfc_enable_int(struct dfc_context *context, uint32_t int_mask); ++void dfc_disable_int(struct dfc_context *context, uint32_t int_mask); ++ ++/* high level primitives */ ++int dfc_init(struct dfc_context *context, int type); ++int dfc_init_no_gpio(struct dfc_context *context, int type); ++ ++int dfc_reset_flash(struct dfc_context *context); ++ ++int dfc_setup_cmd_dma(struct dfc_context *context, ++ uint16_t cmd, uint32_t addr, int num_pages, ++ uint32_t *buf, uint32_t buf_phys, ++ uint32_t next_desc_phys, uint32_t dma_int_en, ++ struct pxa_dma_desc *dma_desc); ++ ++int dfc_setup_data_dma(struct dfc_context *context, ++ uint16_t cmd, uint32_t buf_phys, ++ uint32_t next_desc_phys, uint32_t dma_int_en, ++ struct pxa_dma_desc *dma_desc); ++ ++void dfc_start_cmd_dma(struct dfc_context *context, ++ struct pxa_dma_desc *dma_desc); ++void dfc_start_data_dma(struct dfc_context *context, ++ struct pxa_dma_desc *dma_desc); ++static int monahans_df_dev_ready(struct mtd_info *mtd); ++ ++#ifdef CONFIG_DVFM ++static int mhn_nand_dvfm_notifier(unsigned cmd, void *client_data, void *info); ++static struct mhn_fv_notifier dvfm_notifier = { ++ .name = "monahans-nand-flash", ++ .priority = 0, ++ .notifier_call = mhn_nand_dvfm_notifier, ++}; ++#endif ++ ++static unsigned short search_rel_block(int block, struct mtd_info *mtd); ++ ++/***************************************************************************** ++ * The DFC registers read/write routines ++ *****************************************************************************/ ++static inline void dfc_write(struct dfc_context *context, int offset, ++ unsigned long value) ++{ ++ offset <<= 2; ++ writel(value, context->membase + offset); ++} ++ ++static inline unsigned int dfc_read(struct dfc_context *context, int offset) ++{ ++ offset <<= 2; ++ return __raw_readl(context->membase + offset); ++} ++ ++/**************************************************************************** ++ * Flash Information ++ ***************************************************************************/ ++ ++static int Samsung512MbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p); ++static int Samsung512MbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p); ++ ++static struct dfc_flash_info samsung512MbX16 = ++{ ++ .timing = { ++ .tCH = 10, /* tCH, Enable signal hold time */ ++ .tCS = 0, /* tCS, Enable signal setup time */ ++ .tWH = 20, /* tWH, ND_nWE high duration */ ++ .tWP = 40, /* tWP, ND_nWE pulse time */ ++ .tRH = 30, /* tRH, ND_nRE high duration */ ++ .tRP = 40, /* tRP, ND_nRE pulse width */ ++ /* tR = tR+tRR+tWB+1, ND_nWE high to ND_nRE low for read */ ++ .tR = 11123, ++ /* tWHR, ND_nWE high to ND_nRE low delay for status read */ ++ .tWHR = 110, ++ .tAR = 10, /* tAR, ND_ALE low to ND_nRE low delay */ ++ }, ++ .enable_arbiter = 1, /* Data flash bus arbiter enable */ ++ .page_per_block = 32, /* Pages per block */ ++ .row_addr_start = 0, /* Second cycle start, Row address start position */ ++ .read_id_bytes = 2, /* 2 bytes, returned ID bytes */ ++ .dfc_mode = 0, /* NAND mode */ ++ .ncsx = 0, ++ .page_size = 512, /* Page size in bytes */ ++ .oob_size = 16, /* OOB size in bytes */ ++ .flash_width = 16, /* Width of Flash memory */ ++ .dfc_width = 16, /* Width of flash controller */ ++ .num_blocks = 4096, /* Number of physical blocks in Flash */ ++ .chip_id = 0x46ec, ++ ++ /* command codes */ ++ .read1 = 0x0000, /* Read */ ++ .read2 = 0x0050, /* Read1 unused, current DFC don't support */ ++ .program = 0x1080, /* Write, two cycle command */ ++ .read_status = 0x0070, /* Read status */ ++ .read_id = 0x0090, /* Read ID */ ++ .erase = 0xD060, /* Erase, two cycle command */ ++ .reset = 0x00FF, /* Reset */ ++ .lock = 0x002A, /* Lock whole flash */ ++ .unlock = 0x2423, /* Unlock, two cycle command, supporting partial unlock */ ++ .lock_status = 0x007A, /* Read block lock status */ ++ .addr2ndcb1 = Samsung512MbX16Addr2NDCB1, ++ .ndbbr2addr = Samsung512MbX16NDBBR2Addr, ++}; ++ ++static int Samsung512MbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p) ++{ ++ uint32_t ndcb1 = 0; ++ ++ if (addr >= 0x4000000) return -EINVAL; ++ ++ if (cmd == samsung512MbX16.read1 || cmd == samsung512MbX16.program) { ++ ndcb1 = (addr & 0xFF) | ((addr >> 1) & 0x01FFFF00); ++ } else if (cmd == samsung512MbX16.erase) { ++ ndcb1 = ((addr >> 9) & 0x00FFFFFF); ++ } ++ ++ *p = ndcb1; ++ return 0; ++ ++} ++ ++static int Samsung512MbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p) ++{ ++ *p = ndbbr << 9; ++ return 0; ++} ++ ++static int Micron1GbX8Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p); ++static int Micron1GbX8NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p); ++ ++static struct dfc_flash_info micron1GbX8 = ++{ ++ .timing = { ++ .tCH = 10, /* tCH, Enable signal hold time */ ++ .tCS = 25, /* tCS, Enable signal setup time */ ++ .tWH = 15, /* tWH, ND_nWE high duration */ ++ .tWP = 25, /* tWP, ND_nWE pulse time */ ++ .tRH = 15, /* tRH, ND_nRE high duration */ ++ .tRP = 25, /* tRP, ND_nRE pulse width */ ++ /* tR = tR+tRR+tWB+1, ND_nWE high to ND_nRE low for read */ ++ .tR = 25000, ++ /* tWHR, ND_nWE high to ND_nRE low delay for status read */ ++ .tWHR = 60, ++ .tAR = 10, /* tAR, ND_ALE low to ND_nRE low delay */ ++ }, ++ .enable_arbiter = 1, /* Data flash bus arbiter enable */ ++ .page_per_block = 64, /* Pages per block */ ++ .row_addr_start = 1, /* Second cycle start, Row address start position */ ++ .read_id_bytes = 4, /* Returned ID bytes */ ++ .dfc_mode = 0, /* NAND mode */ ++ .ncsx = 0, ++ .page_size = 2048, /* Page size in bytes */ ++ .oob_size = 64, /* OOB size in bytes */ ++ .flash_width = 8, /* Width of Flash memory */ ++ .dfc_width = 8, /* Width of flash controller */ ++ .num_blocks = 1024, /* Number of physical blocks in Flash */ ++ .chip_id = 0xa12c, ++ /* command codes */ ++ .read1 = 0x3000, /* Read */ ++ .read2 = 0x0050, /* Read1 unused, current DFC don't support */ ++ .program = 0x1080, /* Write, two cycle command */ ++ .read_status = 0x0070, /* Read status */ ++ .read_id = 0x0090, /* Read ID */ ++ .erase = 0xD060, /* Erase, two cycle command */ ++ .reset = 0x00FF, /* Reset */ ++ .lock = 0x002A, /* Lock whole flash */ ++ .unlock = 0x2423, /* Unlock, two cycle command, supporting partial unlock */ ++ .lock_status = 0x007A, /* Read block lock status */ ++ .addr2ndcb1 = Micron1GbX8Addr2NDCB1, ++ .ndbbr2addr = Micron1GbX8NDBBR2Addr, ++}; ++ ++static int Micron1GbX8Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p) ++{ ++ uint32_t ndcb1 = 0; ++ uint32_t page; ++ ++ if (addr >= 0x8000000) ++ return -EINVAL; ++ page = addr / micron1GbX8.page_size; ++ addr = (page / micron1GbX8.page_per_block) << 18 | ++ (page % micron1GbX8.page_per_block) << 12; ++ ++ if (cmd == micron1GbX8.read1 || cmd == micron1GbX8.program) { ++ ndcb1 = (addr & 0xFFF) | ((addr << 4) & 0xFFFF0000); ++ } ++ else if (cmd == micron1GbX8.erase) { ++ ndcb1 = ((addr >> 18) << 6) & 0xFFFF; ++ } ++ ++ *p = ndcb1; ++ return 0; ++} ++ ++static int Micron1GbX8NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p) ++{ ++ if (cmd == micron1GbX8.read1 || cmd == micron1GbX8.program) { ++ *p = ((ndbbr & 0xF) << 8) | ((ndbbr >> 8) << 16); ++ } ++ else if (cmd == micron1GbX8.erase) { ++ *p = (ndbbr >> 6) << 18; ++ } ++ ++ ++ return 0; ++} ++ ++ ++static int Micron1GbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p); ++static int Micron1GbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p); ++ ++static struct dfc_flash_info micron1GbX16 = ++{ ++ .timing = { ++ .tCH = 10, /* tCH, Enable signal hold time */ ++ .tCS = 25, /* tCS, Enable signal setup time */ ++ .tWH = 15, /* tWH, ND_nWE high duration */ ++ .tWP = 25, /* tWP, ND_nWE pulse time */ ++ .tRH = 15, /* tRH, ND_nRE high duration */ ++ .tRP = 25, /* tRP, ND_nRE pulse width */ ++ /* tR = tR+tRR+tWB+1, ND_nWE high to ND_nRE low for read */ ++ .tR = 25000, ++ /* tWHR, ND_nWE high to ND_nRE low delay for status read */ ++ .tWHR = 60, ++ .tAR = 10, /* tAR, ND_ALE low to ND_nRE low delay */ ++ }, ++ .enable_arbiter = 1, /* Data flash bus arbiter enable */ ++ .page_per_block = 64, /* Pages per block */ ++ .row_addr_start = 1, /* Second cycle start, Row address start position */ ++ .read_id_bytes = 4, /* Returned ID bytes */ ++ .dfc_mode = 0, /* NAND mode */ ++ .ncsx = 0, ++ .page_size = 2048, /* Page size in bytes */ ++ .oob_size = 64, /* OOB size in bytes */ ++ .flash_width = 16, /* Width of Flash memory */ ++ .dfc_width = 16, /* Width of flash controller */ ++ .num_blocks = 1024, /* Number of physical blocks in Flash */ ++ .chip_id = 0xb12c, ++ ++ /* command codes */ ++ .read1 = 0x3000, /* Read */ ++ .read2 = 0x0050, /* Read1 unused, current DFC don't support */ ++ .program = 0x1080, /* Write, two cycle command */ ++ .read_status = 0x0070, /* Read status */ ++ .read_id = 0x0090, /* Read ID */ ++ .erase = 0xD060, /* Erase, two cycle command */ ++ .reset = 0x00FF, /* Reset */ ++ .lock = 0x002A, /* Lock whole flash */ ++ .unlock = 0x2423, /* Unlock, two cycle command, supporting partial unlock */ ++ .lock_status = 0x007A, /* Read block lock status */ ++ .addr2ndcb1 = Micron1GbX16Addr2NDCB1, ++ .ndbbr2addr = Micron1GbX16NDBBR2Addr, ++}; ++ ++static int Micron1GbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p) ++{ ++ uint32_t ndcb1 = 0; ++ uint32_t page; ++ ++ if (addr >= 0x8000000) ++ return -EINVAL; ++ page = addr / micron1GbX16.page_size; ++ addr = (page / micron1GbX16.page_per_block) << 17 | ++ (page % micron1GbX16.page_per_block) << 11; ++ ++ if (cmd == micron1GbX16.read1 || cmd == micron1GbX16.program) { ++ ndcb1 = (addr & 0x7FF) | ((addr << 5) & 0xFFFF0000); ++ } ++ else if (cmd == micron1GbX16.erase) { ++ ndcb1 = ((addr >> 17) << 6) & 0xFFFF; ++ } ++ *p = ndcb1; ++ return 0; ++} ++ ++static int Micron1GbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p) ++{ ++ if (cmd == micron1GbX16.read1 || cmd == micron1GbX16.program) { ++ *p = ((ndbbr & 0x7) << 8) | ((ndbbr >> 8) << 16); ++ } ++ else if (cmd == micron1GbX16.erase) { ++ *p = (ndbbr >> 6) << 17; ++ } ++ ++ return 0; ++} ++ ++static int STM1GbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p); ++static int STM1GbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p); ++ ++static struct dfc_flash_info stm1GbX16 = ++{ ++ .timing = { ++ .tCH = 10, /* tCH, Enable signal hold time */ ++ .tCS = 10, /* tCS, Enable signal setup time */ ++ .tWH = 20, /* tWH, ND_nWE high duration */ ++ .tWP = 25, /* tWP, ND_nWE pulse time */ ++ .tRH = 20, /* tRH, ND_nRE high duration */ ++ .tRP = 25, /* tRP, ND_nRE pulse width */ ++ /* tR = tR+tRR+tWB+1, ND_nWE high to ND_nRE low for read */ ++ .tR = 25000, ++ /* tWHR, ND_nWE high to ND_nRE low delay for status read */ ++ .tWHR = 60, ++ .tAR = 10, /* tAR, ND_ALE low to ND_nRE low delay */ ++ }, ++ .enable_arbiter = 1, /* Data flash bus arbiter enable */ ++ .page_per_block = 64, /* Pages per block */ ++ .row_addr_start = 1, /* Second cycle start, Row address start position */ ++ .read_id_bytes = 4, /* Returned ID bytes */ ++ .dfc_mode = 0, /* NAND mode */ ++ .ncsx = 0, ++ .page_size = 2048, /* Page size in bytes */ ++ .oob_size = 64, /* OOB size in bytes */ ++ .flash_width = 16, /* Width of Flash memory */ ++ .dfc_width = 16, /* Width of flash controller */ ++ .num_blocks = 1024, /* Number of physical blocks in Flash */ ++ .chip_id = 0xb120, ++ ++ /* command codes */ ++ .read1 = 0x3000, /* Read */ ++ .read2 = 0x0050, /* Read1 unused, current DFC don't support */ ++ .program = 0x1080, /* Write, two cycle command */ ++ .read_status = 0x0070, /* Read status */ ++ .read_id = 0x0090, /* Read ID */ ++ .erase = 0xD060, /* Erase, two cycle command */ ++ .reset = 0x00FF, /* Reset */ ++ .lock = 0x002A, /* Lock whole flash */ ++ .unlock = 0x2423, /* Unlock, two cycle command, supporting partial unlock */ ++ .lock_status = 0x007A, /* Read block lock status */ ++ .addr2ndcb1 = STM1GbX16Addr2NDCB1, ++ .ndbbr2addr = STM1GbX16NDBBR2Addr, ++}; ++ ++static int STM1GbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p) ++{ ++ uint32_t ndcb1 = 0; ++ uint32_t page; ++ ++ if (addr >= 0x8000000) ++ return -EINVAL; ++ page = addr / stm1GbX16.page_size; ++ addr = (page / stm1GbX16.page_per_block) << 17 | ++ (page % stm1GbX16.page_per_block) << 11; ++ ++ if (cmd == stm1GbX16.read1 || cmd == stm1GbX16.program) { ++ ndcb1 = (addr & 0x7FF) | ((addr << 5) & 0xFFFF0000); ++ } ++ else if (cmd == stm1GbX16.erase) { ++ ndcb1 = ((addr >> 17) << 6) & 0xFFFF; ++ } ++ *p = ndcb1; ++ return 0; ++} ++ ++static int STM1GbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p) ++{ ++ if (cmd == stm1GbX16.read1 || cmd == stm1GbX16.program) { ++ *p = ((ndbbr & 0x7) << 8) | ((ndbbr >> 8) << 16); ++ } ++ else if (cmd == stm1GbX16.erase) { ++ *p = (ndbbr >> 6) << 17; ++ } ++ ++ return 0; ++} ++ ++static int STM2GbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p); ++static int STM2GbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p); ++ ++static struct dfc_flash_info stm2GbX16 = ++{ ++ .timing = { ++ .tCH = 10, /* tCH, Enable signal hold time */ ++ .tCS = 10, /* tCS, Enable signal setup time */ ++ .tWH = 20, /* tWH, ND_nWE high duration */ ++ .tWP = 25, /* tWP, ND_nWE pulse time */ ++ .tRH = 20, /* tRH, ND_nRE high duration */ ++ .tRP = 25, /* tRP, ND_nRE pulse width */ ++ /* tR = tR+tRR+tWB+1, ND_nWE high to ND_nRE low for read */ ++ .tR = 25000, ++ /* tWHR, ND_nWE high to ND_nRE low delay for status read */ ++ .tWHR = 60, ++ .tAR = 10, /* tAR, ND_ALE low to ND_nRE low delay */ ++ }, ++ .enable_arbiter = 1, /* Data flash bus arbiter enable */ ++ .page_per_block = 64, /* Pages per block */ ++ .row_addr_start = 1, /* Second cycle start, Row address start position */ ++ .read_id_bytes = 4, /* Returned ID bytes */ ++ .dfc_mode = 0, /* NAND mode */ ++ .ncsx = 0, ++ .page_size = 2048, /* Page size in bytes */ ++ .oob_size = 64, /* OOB size in bytes */ ++ .flash_width = 16, /* Width of Flash memory */ ++ .dfc_width = 16, /* Width of flash controller */ ++ .num_blocks = 2048, /* Number of physical blocks in Flash */ ++ .chip_id = 0xca20, ++ ++ /* command codes */ ++ .read1 = 0x3000, /* Read */ ++ .read2 = 0x0050, /* Read1 unused, current DFC don't support */ ++ .program = 0x1080, /* Write, two cycle command */ ++ .read_status = 0x0070, /* Read status */ ++ .read_id = 0x0090, /* Read ID */ ++ .erase = 0xD060, /* Erase, two cycle command */ ++ .reset = 0x00FF, /* Reset */ ++ .lock = 0x002A, /* Lock whole flash */ ++ .unlock = 0x2423, /* Unlock, two cycle command, supporting partial unlock */ ++ .lock_status = 0x007A, /* Read block lock status */ ++ .addr2ndcb1 = STM2GbX16Addr2NDCB1, ++ .ndbbr2addr = STM2GbX16NDBBR2Addr, ++}; ++ ++static int STM2GbX16Addr2NDCB1(uint16_t cmd, uint32_t addr, uint32_t *p) ++{ ++ uint32_t ndcb1 = 0; ++ uint32_t page; ++ ++ if (addr >= 0x8000000) ++ return -EINVAL; ++ page = addr / stm2GbX16.page_size; ++ addr = (page / stm2GbX16.page_per_block) << 17 | ++ (page % stm2GbX16.page_per_block) << 11; ++ ++ if (cmd == stm2GbX16.read1 || cmd == stm2GbX16.program) { ++ ndcb1 = (addr & 0x7FF) | ((addr << 5) & 0xFFFF0000); ++ } ++ else if (cmd == stm2GbX16.erase) { ++ ndcb1 = ((addr >> 17) << 6) & 0xFFFF; ++ } ++ *p = ndcb1; ++ return 0; ++} ++ ++static int STM2GbX16NDBBR2Addr(uint16_t cmd, uint32_t ndbbr, uint32_t *p) ++{ ++ if (cmd == stm2GbX16.read1 || cmd == stm2GbX16.program) { ++ *p = ((ndbbr & 0x7) << 8) | ((ndbbr >> 8) << 16); ++ } ++ else if (cmd == stm2GbX16.erase) { ++ *p = (ndbbr >> 6) << 17; ++ } ++ ++ return 0; ++} ++ ++static struct { ++ int type; ++ struct dfc_flash_info *flash_info; ++} type_info[] = { ++ { DFC_FLASH_Samsung_512Mb_X_16, &samsung512MbX16}, ++ { DFC_FLASH_Micron_1Gb_X_8, µn1GbX8}, ++ { DFC_FLASH_Micron_1Gb_X_16, µn1GbX16}, ++ { DFC_FLASH_STM_1Gb_X_16, &stm1GbX16}, ++ { DFC_FLASH_STM_2Gb_X_16, &stm2GbX16}, ++ { DFC_FLASH_NULL, NULL}, ++}; ++ ++int dfc_get_flash_info(int type, struct dfc_flash_info **flash_info) ++{ ++ uint32_t i = 0; ++ ++ while(type_info[i].type != DFC_FLASH_NULL) { ++ if (type_info[i].type == type) { ++ *flash_info = type_info[i].flash_info; ++ return 0; ++ } ++ i++; ++ } ++ *flash_info = NULL; ++ return -EINVAL; ++} ++ ++/****************************************************************************** ++ dfc_set_timing ++ ++ Description: ++ This function sets flash timing property in DFC timing register ++ according to input timing value embodied in context structure. ++ It is called once during the hardware initialization. ++ Input Parameters: ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++//#if defined(CONFIG_CPU_MONAHANS_L) || defined(CONFIG_CPU_MONAHANS_LV) ++#define DFC_CLOCK 208 ++//#else ++//#define DFC_CLOCK 104 ++//#endif ++#define CLOCK_NS DFC_CLOCK/1000 ++ ++void dfc_set_timing(struct dfc_context *context, struct dfc_flash_timing *t) ++{ ++ struct dfc_flash_timing timing = *t; ++ ++ uint32_t r0 = 0; ++ uint32_t r1 = 0; ++ ++ /* ++ * num of clock cycles = time (ns) / one clock sycle (ns) + 1 ++ * - integer division will truncate the result, so add a 1 in all cases ++ * - subtract the extra 1 cycle added to all register timing values ++ */ ++ timing.tCH = min(((int) (timing.tCH * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tCH); ++ timing.tCS = min(((int) (timing.tCS * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tCS); ++ timing.tWH = min(((int) (timing.tWH * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tWH); ++ timing.tWP = min(((int) (timing.tWP * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tWP); ++ timing.tRH = min(((int) (timing.tRH * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tRH); ++ timing.tRP = min(((int) (timing.tRP * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tRP); ++ ++ r0 = (timing.tCH << DFC_TIMING_tCH) | ++ (timing.tCS << DFC_TIMING_tCS) | ++ (timing.tWH << DFC_TIMING_tWH) | ++ (timing.tWP << DFC_TIMING_tWP) | ++ (timing.tRH << DFC_TIMING_tRH) | ++ (timing.tRP << DFC_TIMING_tRP); ++ ++ dfc_write(context, DFC_NDTR0CS0, r0); ++ ++ timing.tR = min(((int) (timing.tR * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tR); ++ timing.tWHR = min(((int) (timing.tWHR * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tWHR); ++ timing.tAR = min(((int) (timing.tAR * CLOCK_NS) + 1), ++ DFC_TIMING_MAX_tAR); ++ ++ r1 = (timing.tR << DFC_TIMING_tR) | ++ (timing.tWHR << DFC_TIMING_tWHR) | ++ (timing.tAR << DFC_TIMING_tAR); ++ ++ dfc_write(context, DFC_NDTR1CS0, r1); ++ return; ++} ++ ++/****************************************************************************** ++ dfc_set_dma ++ ++ Description: ++ Enables or Disables DMA in line with setting in DFC mode of context ++ structure. DMA mode of DFC. Performs a read-modify-write operation that ++ only changes the driven DMA_EN bit field In DMA mode, all commands and ++ data are transferred by DMA. DMA can be enable/disable on the fly. ++ Input Parameters: ++ context -Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void ++dfc_set_dma(struct dfc_context* context) ++{ ++ uint32_t ndcr; ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ if (context->dfc_mode->enable_dma) ++ ndcr |= NDCR_DMA_EN; ++ else ++ ndcr &= ~NDCR_DMA_EN; ++ ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ /* Read again to make sure write work */ ++ ndcr = dfc_read(context, DFC_NDCR); ++ return; ++} ++ ++ ++/****************************************************************************** ++ dfc_set_ecc ++ ++ Description: ++ This function enables or disables hardware ECC capability of DFC in line ++ with setting in DFC mode of context structure. ++ Input Parameters: ++ context -Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void ++dfc_set_ecc(struct dfc_context* context) ++{ ++ uint32_t ndcr; ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ if (context->dfc_mode->enable_ecc) ++ ndcr |= NDCR_ECC_EN; ++ else ++ ndcr &= ~NDCR_ECC_EN; ++ ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ /* Read again to make sure write work */ ++ ndcr = dfc_read(context, DFC_NDCR); ++ return; ++} ++ ++/****************************************************************************** ++ dfc_set_spare ++ ++ Description: ++ This function enables or disables accesses to spare area of NAND Flash ++ through DFC in line with setting in DFC mode of context structure. ++ Input Parameters: ++ context -Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void ++dfc_set_spare(struct dfc_context* context) ++{ ++ uint32_t ndcr; ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ if (context->dfc_mode->enable_spare) ++ ndcr |= NDCR_SPARE_EN; ++ else ++ ndcr &= ~NDCR_SPARE_EN; ++ ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ /* Read again to make sure write work */ ++ ndcr = dfc_read(context, DFC_NDCR); ++ return; ++} ++ ++static unsigned int get_delta (unsigned int start) ++{ ++ unsigned int stop = OSCR; ++ return (stop - start); ++} ++ ++static int dfc_wait_event(struct dfc_context *context, uint32_t event, ++ uint32_t *event_out, uint32_t timeout, int enable_int) ++{ ++ uint32_t ndsr; ++ uint32_t to = 3 * timeout; /* 3 ticks ~ 1us */ ++ int status; ++ int start = OSCR; ++ ++ if (enable_int) ++ dfc_enable_int(context, event); ++ ++ while (1) { ++ ndsr = dfc_read(context, DFC_NDSR); ++ ndsr &= NDSR_MASK; ++ if (ndsr & event) { ++ /* event happened */ ++ *event_out = ndsr & event; ++ dfc_clear_int(context, *event_out); ++ status = 0; ++ break; ++ } else if (get_delta(start) > to) { ++ status = -ETIME; ++ break; ++ } ++ } ++ ++ if (enable_int) ++ dfc_disable_int(context, event); ++ return status; ++} ++ ++/****************************************************************************** ++ dfc_get_pattern ++ ++ Description: ++ This function is used to retrieve buffer size setting for a transaction ++ based on cmd. ++ Input Parameters: ++ context - Pointer to DFC context structure ++ cmd ++ Specifies type of command to be sent to NAND flash .The LSB of this ++ parameter defines the first command code for 2-cycles command. The ++ MSB defines the second command code for 2-cycles command. If MSB is ++ set to zero, this indicates that one cycle command ++ Output Parameters: ++ data_size ++ It is used to retrieve length of data transferred to/from DFC, ++ which includes padding bytes ++ padding ++ It is used to retrieve how many padding bytes there should be ++ in buffer of data_size. ++ Returns: ++ 0 ++ If size setting is returned successfully ++ -EINVAL ++ If page size specified in flash spec of context structure is not 512 or ++ 2048;If specified command index is not read1/program/erase/reset/readID/ ++ readStatus. ++*******************************************************************************/ ++int dfc_get_pattern(struct dfc_context *context, uint16_t cmd, ++ int *data_size, int *padding) ++{ ++ struct dfc_mode* dfc_mode = context->dfc_mode; ++ struct dfc_flash_info * flash_info = context->flash_info; ++ uint32_t page_size = context->flash_info->page_size; /* 512 or 2048 */ ++ ++ if (cmd == flash_info->read1 || ++ cmd == flash_info->program) { ++ if (512 == page_size) { ++ /* add for DMA */ ++ if (dfc_mode->enable_dma) { ++ *data_size = DFC_DATA_SIZE_544; ++ if (dfc_mode->enable_ecc) ++ *padding = DFC_PADDING_SIZE_24; ++ else ++ *padding = DFC_PADDING_SIZE_16; ++ } else if (!dfc_mode->enable_spare) { ++ *data_size = DFC_DATA_SIZE_512; ++ *padding = DFC_PADDING_SIZE_0; ++ } else { ++ ++ if (dfc_mode->enable_ecc) ++ *data_size = DFC_DATA_SIZE_520; ++ else ++ *data_size = DFC_DATA_SIZE_528; ++ ++ *padding = DFC_PADDING_SIZE_0; ++ } ++ } else if (2048 == page_size) { ++ /* add for DMA */ ++ if (dfc_mode->enable_dma) { ++ *data_size = DFC_DATA_SIZE_2112; ++ if (dfc_mode->enable_ecc) ++ *padding = DFC_PADDING_SIZE_24; ++ else ++ *padding = DFC_PADDING_SIZE_0; ++ } else if (!dfc_mode->enable_spare) { ++ *data_size = DFC_DATA_SIZE_2048; ++ *padding = DFC_PADDING_SIZE_0; ++ } else { ++ ++ if (dfc_mode->enable_ecc) ++ *data_size = DFC_DATA_SIZE_2088; ++ else ++ *data_size = DFC_DATA_SIZE_2112; ++ ++ *padding = DFC_PADDING_SIZE_0; ++ } ++ } else /* if the page_size is neither 512 or 2048 */ ++ return -EINVAL; ++ } else if (cmd == flash_info->read_id) { ++ *data_size = DFC_DATA_SIZE_ID; ++ *padding = DFC_PADDING_SIZE_0; ++ } else if(cmd == flash_info->read_status) { ++ *data_size = DFC_DATA_SIZE_STATUS; ++ *padding = DFC_PADDING_SIZE_0; ++ } else if (cmd == flash_info->erase || cmd == flash_info->reset) { ++ *data_size = DFC_DATA_SIZE_UNUSED; ++ *padding = DFC_PADDING_SIZE_UNUSED; ++ } else ++ return -EINVAL; ++ return 0; ++} ++ ++ ++/****************************************************************************** ++ dfc_send_cmd ++ ++ Description: ++ This function configures DFC to send command through DFC to NAND flash ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ cmd ++ Specifies type of command to be sent to NAND flash .The LSB of this ++ parameter defines the first command code for 2-cycles command. The ++ MSB defines the second command code for 2-cycles command. If MSB is ++ set to zero, this indicates that one cycle command ++ addr ++ Address sent out to the flash device withthis command. For page read/ ++ program commands , 4-cycles address is sent. For erase command only ++ 3-cycles address is sent. If it is equal to 0xFFFFFFFF, the address ++ should not be used. ++ num_pages ++ It specifies the number of pages of data to be transferred for ++ a program or read commands. Unused for any other commands than ++ read/program. ++ ++ Output Parameters: ++ None ++ Returns: ++ 0 ++ If size setting is returned successfully ++ -EINVAL ++ If specified command index is not read1/program/erase/reset/readID/ ++ readStatus. ++*******************************************************************************/ ++int dfc_send_cmd(struct dfc_context *context, uint16_t cmd, ++ uint32_t addr, int num_pages) ++{ ++ struct dfc_flash_info *flash_info = context->flash_info; ++ struct dfc_mode *dfc_mode = context->dfc_mode; ++ uint8_t cmd2; ++ uint32_t event_out; ++ uint32_t ndcb0=0, ndcb1=0, ndcb2=0, ndcr; ++ int status; ++ ++ /* It is a must to set ND_RUN firstly, then write command buffer ++ * If conversely,it does not work ++ */ ++ dfc_write(context, DFC_NDSR, NDSR_MASK); ++ ++ /* Set ND_RUN */ ++ ndcr = dfc_read(context, DFC_NDCR); ++ dfc_write(context, DFC_NDCR, (ndcr | NDCR_ND_RUN)); ++ ++ // Wait for write command request ++ status = dfc_wait_event(context, NDSR_WRCMDREQ, ++ &event_out, NAND_CMD_TIMEOUT, 0); ++ ++ if (status) /* Timeout */ ++ return status; ++ ++ cmd2 = (cmd>>8) & 0xFF; ++ ndcb0 = cmd | (dfc_mode->chip_select<<24) | ((cmd2?1:0)<<19); ++ ++ if (cmd == flash_info->read1) { ++ if (0xFFFFFFFF != addr) { ++ ndcb0 |= NDCB0_ADDR_CYC(4); ++ status = flash_info->addr2ndcb1(cmd, addr, &ndcb1); ++ if (status) ++ return status; ++ ndcb2 = (num_pages - 1) << 8; ++ } ++ } else if (cmd == flash_info->program) { ++ ndcb0 |= NDCB0_CMD_TYPE(1) | NDCB0_AUTO_RS; ++ ndcb0 |= NDCB0_ADDR_CYC(4); ++ status = flash_info->addr2ndcb1(cmd, addr, &ndcb1); ++ if (status) ++ return status; ++ ndcb2 = (num_pages-1) << 8; ++ } else if (cmd == flash_info->erase) { ++ ndcb0 |= NDCB0_CMD_TYPE(2) | NDCB0_AUTO_RS; ++ ndcb0 |= NDCB0_ADDR_CYC(3); ++ status = flash_info->addr2ndcb1(cmd, addr, &ndcb1); ++ if (status) ++ return status; ++ } else if (cmd == flash_info->read_id) { ++ ndcb0 |= NDCB0_CMD_TYPE(3); ++ } else if(cmd == flash_info->read_status) { ++ ndcb0 |= NDCB0_CMD_TYPE(4); ++ } else if(cmd == flash_info->reset) { ++ ndcb0 |= NDCB0_CMD_TYPE(5); ++ } else if (cmd == flash_info->lock) { ++ ndcb0 |= NDCB0_CMD_TYPE(5); ++ } else ++ return -EINVAL; ++ ++ /* Write to DFC command register */ ++ dfc_write(context, DFC_NDCB0, ndcb0); ++ dfc_write(context, DFC_NDCB0, ndcb1); ++ dfc_write(context, DFC_NDCB0, ndcb2); ++ ++ return 0; ++} ++ ++/****************************************************************************** ++ dfc_stop ++ ++ Description: ++ This function clears ND_RUN bit of NDCR. ++ Input Parameters: ++ context--Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_stop(struct dfc_context *context) ++{ ++ unsigned int ndcr; ++ ndcr = dfc_read(context, DFC_NDCR); ++ dfc_write(context, DFC_NDCR, (ndcr & ~NDCR_ND_RUN)); ++ ndcr = dfc_read(context, DFC_NDCR); ++ ++ return; ++} ++ ++int dfc_setup_cmd_dma(struct dfc_context *context, ++ uint16_t cmd, uint32_t addr, int num_pages, ++ uint32_t *buf, uint32_t buf_phys, ++ uint32_t next_desc_phys, uint32_t dma_int_en, ++ struct pxa_dma_desc *dma_desc) ++{ ++ struct dfc_flash_info *flash_info = context->flash_info; ++ struct dfc_mode *dfc_mode = context->dfc_mode; ++ uint8_t cmd2; ++ uint32_t event_out; ++ uint32_t ndcb0=0, ndcb1=0, ndcb2=0, ndcr; ++ int status; ++ ++ /* ++ * It is a must to set ND_RUN firstly, then write command buffer ++ * If conversely,it does not work ++ */ ++ dfc_write(context, DFC_NDSR, NDSR_MASK); ++ ++ /* Set ND_RUN */ ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr |= NDCR_ND_RUN; ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ /* Wait for write command request */ ++ status = dfc_wait_event(context, NDSR_WRCMDREQ, ++ &event_out, NAND_CMD_TIMEOUT, 0); ++ ++ if (status) ++ return status; /* Timeout */ ++ ++ cmd2 = (cmd>>8) & 0xFF; ++ ndcb0 = cmd | (dfc_mode->chip_select<<24) | ((cmd2?1:0)<<19); ++ ++ if (cmd == flash_info->read1) { ++ if (0xFFFFFFFF != addr) { ++ ndcb0 |= NDCB0_ADDR_CYC(4); ++ status = flash_info->addr2ndcb1(cmd, addr, &ndcb1); ++ if (status) ++ return status; ++ ndcb2 = (num_pages-1) << 8; ++ } ++ } else if (cmd == flash_info->program) { ++ ndcb0 |= NDCB0_CMD_TYPE(1) | NDCB0_AUTO_RS; ++ ndcb0 |= NDCB0_ADDR_CYC(4); ++ ++ status = flash_info->addr2ndcb1(cmd, addr, &ndcb1); ++ if (status) ++ return status; ++ ndcb2 = (num_pages-1) << 8; ++ } else if (cmd == flash_info->erase) { ++ ndcb0 |= NDCB0_CMD_TYPE(2) | NDCB0_AUTO_RS; ++ ndcb0 |= NDCB0_ADDR_CYC(3); ++ ++ status = flash_info->addr2ndcb1(cmd, addr, &ndcb1); ++ if (status) ++ return status; ++ } else if (cmd == flash_info->read_id) { ++ ndcb0 |= NDCB0_CMD_TYPE(3); ++ } else if (cmd == flash_info->read_status) { ++ ndcb0 |= NDCB0_CMD_TYPE(4); ++ } else if (cmd == flash_info->reset) { ++ ndcb0 |= NDCB0_CMD_TYPE(5); ++ } else if (cmd == flash_info->lock) { ++ ndcb0 |= NDCB0_CMD_TYPE(5); ++ } else ++ return -EINVAL; ++ ++ *((uint32_t *)buf) = ndcb0; ++ *((uint32_t *)buf + 1) = ndcb1; ++ *((uint32_t *)buf + 2) = ndcb2; ++ ++ dma_int_en &= (DCMD_STARTIRQEN | DCMD_ENDIRQEN); ++ ++ dma_desc->ddadr = next_desc_phys; ++ dma_desc->dsadr = buf_phys; ++ dma_desc->dtadr = NDCB0_DMA_ADDR; ++ dma_desc->dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | dma_int_en | ++ DCMD_WIDTH4 | DCMD_BURST16 | 12; ++ return 0; ++} ++ ++int dfc_setup_data_dma(struct dfc_context* context, ++ uint16_t cmd, uint32_t buf_phys, ++ uint32_t next_desc_phys, uint32_t dma_int_en, ++ struct pxa_dma_desc* dma_desc) ++{ ++ struct dfc_flash_info * flash_info = context->flash_info; ++ int data_size, padding; ++ ++ dfc_get_pattern(context, cmd, &data_size, &padding); ++ ++ dma_desc->ddadr = next_desc_phys; ++ dma_int_en &= (DCMD_STARTIRQEN | DCMD_ENDIRQEN); ++ ++ if (cmd == flash_info->program) { ++ ++ dma_desc->dsadr = buf_phys; ++ dma_desc->dtadr = NDDB_DMA_ADDR; ++ dma_desc->dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG | dma_int_en | ++ DCMD_WIDTH4 | DCMD_BURST32 | data_size; ++ ++ } else if (cmd == flash_info->read1 || cmd == flash_info->read_id || ++ cmd == flash_info->read_status) { ++ ++ dma_desc->dsadr = NDDB_DMA_ADDR; ++ dma_desc->dtadr = buf_phys; ++ dma_desc->dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC | dma_int_en | ++ DCMD_WIDTH4 | DCMD_BURST32 | data_size; ++ } ++ else ++ return -EINVAL; ++ return 0; ++} ++ ++void dfc_start_cmd_dma(struct dfc_context* context, struct pxa_dma_desc* dma_desc) ++{ ++ DRCMR99 = DRCMR_MAPVLD | context->cmd_dma_ch; /* NAND CMD DRCMR */ ++ DDADR(context->cmd_dma_ch) = (uint32_t)dma_desc; ++ DCSR(context->cmd_dma_ch) |= DCSR_RUN; ++} ++ ++void dfc_start_data_dma(struct dfc_context* context, struct pxa_dma_desc* dma_desc) ++{ ++ DRCMR97 = DRCMR_MAPVLD | context->data_dma_ch; ++ DDADR(context->data_dma_ch) = (uint32_t)dma_desc; ++ DCSR(context->data_dma_ch) |= DCSR_RUN; ++} ++ ++/****************************************************************************** ++ dfc_read_fifo_partial ++ ++ Description: ++ This function reads data from data buffer of DFC.Bytes can be any less than ++ or equal to data_size, the left is ignored by ReadFIFO though they will be ++ read from NDDB to clear data buffer. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ nbytes ++ Indicating how much data should be read into buffer. ++ data_size ++ Specifing length of data transferred to/from DFC, which includes ++ padding bytes ++ Output Parameters: ++ pBuffer ++ Pointer to the data buffer where data should be placed. ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_read_fifo_partial(struct dfc_context *context, uint8_t *buffer, ++ int nbytes, int data_size) ++{ ++ uint32_t data = 0; ++ uint32_t i = 0; ++ uint32_t bytes_multi; ++ uint32_t bytes_remain; ++ ++ ++ if (1 == data_size) { ++ data = dfc_read(context, DFC_NDDB) & 0xFF; ++ *buffer++ = (uint8_t)data; ++ } else if (2 == data_size) { ++ data = dfc_read(context, DFC_NDDB) & 0xFFFF; ++ *buffer++ = data & 0xFF; ++ *buffer++ = (data >> 8) & 0xFF; ++ } else { ++ bytes_multi = (nbytes & 0xFFFFFFFC); ++ bytes_remain = nbytes & 0x03; ++ ++ i = 0; ++ /* Read the bytes_multi*4 bytes data */ ++ while (i < bytes_multi) { ++ data = dfc_read(context, DFC_NDDB); ++ /* FIXME: we don't know whether the buffer ++ * align to 4 bytes or not. Cast the buffer ++ * to int is not safe here. Especially under ++ * gcc 4.x. Used memcpy here. But the memcpy ++ * may be not correct on BE architecture. ++ * --by Yin, Fengwei ++ */ ++ memcpy(buffer, &data, sizeof(data)); ++ i += sizeof(data); ++ buffer += sizeof(data); ++ } ++ ++ /* Read the left bytes_remain bytes data */ ++ if (bytes_remain) { ++ data = dfc_read(context, DFC_NDDB); ++ for (i = 0; i < bytes_remain; i++) ++ *buffer++ = (uint8_t)((data >> (8*i)) & 0xFF); ++ } ++ ++ /* When read the remain bytes, we always read 4 bytes data ++ * to DFC. So the data_size should subtract following number. ++ */ ++ data_size -= bytes_multi + (bytes_remain ? sizeof(data) : 0); ++ ++ /* We need Read data_size bytes data totally */ ++ while (data_size > 0) { ++ data = dfc_read(context, DFC_NDDB); ++ data_size -= sizeof(data); ++ } ++ ++/* ++ while(i < ((uint32_t)data_size) ) { ++ if (i < bytes_multi) { ++ temp = (uint32_t *)buffer; ++ *temp = dfc_reg->nddb; ++ } else if (i == bytes_multi && bytes_remain){ ++ uint32_t j = 0; ++ data = dfc_reg->nddb; ++ while (j++ < bytes_remain) { ++ *buffer++ = (uint8_t) \ ++ ((data>>(8*j)) & 0xFF); ++ } ++ } else { ++ data = dfc_reg->nddb; ++ } ++ i += 4; ++ buffer += 4; ++ } ++*/ ++ } ++ return; ++} ++ ++/****************************************************************************** ++ dfc_write_fifo_partial ++ ++ Description: ++ Write to data buffer of DFC from a buffer. Bytes can be same as ++ data_size, also can be data_size-padding, but can¡¯t be random value, ++ the left will be automatically padded by WriteFIFO. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ bytes ++ Indicating how much data should be read into buffer. ++ data_size ++ Specifing length of data transferred to/from DFC, which includes ++ padding bytes ++ buffer ++ Pointer to the data buffer where data will be taken from to be written ++ to DFC data buffer ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_write_fifo_partial(struct dfc_context *context, uint8_t *buffer, ++ int nbytes, int data_size) ++{ ++ uint32_t i = 0; ++ ++ uint32_t bytes_multi = (nbytes & 0xFFFFFFFC); ++ uint32_t bytes_remain = nbytes & 0x03; ++ uint32_t temp; ++ /* ++ * caller guarantee buffer contains appropriate data thereby ++ * it is impossible for nbytes not to be a multiple of 4 byte ++ */ ++ ++ /* Write the bytes_multi*4 bytes data */ ++ while (i < bytes_multi) { ++ temp = buffer[0] | buffer[1] << 8 | ++ buffer[2] << 16 | buffer[3] << 24; ++ dfc_write(context, DFC_NDDB, temp); ++ buffer += 4; ++ i += 4; ++ } ++ ++ /* Write the left bytes_remain bytes data */ ++ if (bytes_remain) { ++ temp = 0xFFFFFFFF; ++ for (i = 0; i < bytes_remain; i++) ++ temp &= *buffer++ << i*8; ++ ++ dfc_write(context, DFC_NDDB, temp); ++ } ++ ++ /* When write the remain bytes, we always write 4 bytes data ++ * to DFC. So the data_size should subtract following number. ++ */ ++ data_size -= bytes_multi + (bytes_remain ? sizeof(temp) : 0); ++ ++ while (data_size > 0) { ++ dfc_write(context, DFC_NDDB, 0xFFFFFFFF); ++ data_size -= 4; ++ } ++ ++/* ++ while (i < ((uint32_t)data_size)) { ++ if (i < bytes_multi) { ++ temp = (uint32_t *)buffer; ++ dfc_reg->nddb = *temp; ++ } ++ else if (i == bytes_multi && bytes_remain) { ++ uint32_t j = 0, data = 0xFFFFFFFF; ++ while (j < bytes_remain) { ++ data &= (uint8_t)(*buffer) << j; ++ buffer++; ++ j++; ++ } ++ dfc_reg->nddb = data; ++ } ++ else { ++ dfc_reg->nddb = 0xFFFFFFFF; ++ } ++ i += 4; ++ buffer += 4; ++ } ++*/ ++ ++ return; ++} ++ ++/****************************************************************************** ++ dfc_read_fifo ++ Description: ++ This function reads data from data buffer of DFC.Bytes can be any less ++ than or equal to data_size, the left is ignored by ReadFIFO though they ++ will be read from NDDB to clear data buffer. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ nbytes ++ Indicating how much data should be read into buffer. ++ data_size ++ Specifing length of data transferred to/from DFC, which includes ++ padding bytes ++ Output Parameters: ++ buffer ++ Pointer to the data buffer where data should be placed. ++ Returns: ++ None ++*******************************************************************************/ ++ ++void dfc_read_fifo(struct dfc_context *context, uint8_t *buffer, int nbytes) ++{ ++ uint32_t i = 0; ++ ++ uint32_t bytes_multi = (nbytes & 0xFFFFFFFC); ++ uint32_t bytes_remain = nbytes & 0x03; ++ uint32_t temp; ++ ++ /* Read the bytes_multi*4 bytes data */ ++ while (i < bytes_multi) { ++ temp = dfc_read(context, DFC_NDDB); ++ /* FIXME: we don't know whether the buffer ++ * align to 4 bytes or not. Cast the buffer ++ * to int is not safe here. Especially under ++ * gcc 4.x. Used memcpy here. But the memcpy ++ * may be not correct on BE architecture. ++ * --by Yin, Fengwei ++ */ ++ memcpy(buffer, &temp, sizeof(temp)); ++ i += sizeof(temp); ++ buffer += sizeof(temp); ++ } ++ ++ /* Read the left bytes_remain bytes data */ ++ temp = dfc_read(context, DFC_NDDB); ++ for (i = 0; i < bytes_remain; i++) { ++ *buffer++ = (uint8_t)((temp >> (8*i)) & 0xFF); ++ } ++ ++/* ++ while (i < bytes_multi) { ++ temp = (uint32_t *)buffer; ++ *temp = dfc_reg->nddb; ++ i += 4; ++ buffer += 4; ++ } ++ ++ if (bytes_remain) { ++ data = dfc_reg->nddb; ++ for (i = 0; i < bytes_remain; i++) { ++ *buffer++ = (uint8_t)((data>>(8*i)) & 0xFF); ++ } ++ } ++*/ ++ ++ return; ++} ++ ++/****************************************************************************** ++ dfc_write_fifo ++ Description: ++ Write to data buffer of DFC from a buffer.Bytes can be same as data_size, ++ also can be data_size-padding, but can¡¯t be random value, the left will ++ be automatically padded by WriteFIFO. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ nbytes ++ Indicating how much data should be read into buffer. ++ data_size ++ Specifing length of data transferred to/from DFC, which includes ++ padding bytes ++ buffer ++ Pointer to the data buffer where data will be taken from to be written to ++ DFC data buffer ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_write_fifo(struct dfc_context *context, uint8_t *buffer, int nbytes) ++{ ++ uint32_t bytes_multi = (nbytes & 0xFFFFFFFC); ++ uint32_t bytes_remain = nbytes & 0x03; ++ uint32_t i=0; ++ uint32_t temp; ++ ++ /* Write the bytes_multi*4 bytes data */ ++ while (i < bytes_multi) { ++ temp = buffer[0] | buffer[1] << 8 | ++ buffer[2] << 16 | buffer[3] << 24; ++ dfc_write(context, DFC_NDDB, temp); ++ buffer += 4; ++ i += 4; ++ } ++ ++ /* Write the left bytes_remain bytes data */ ++ temp = 0xFFFFFFFF; ++ for (i = 0; i < bytes_remain; i++) ++ temp &= *buffer++ << i*8; ++ dfc_write(context, DFC_NDDB, temp); ++ ++/* ++ while (i < nbytes) { ++ temp = (uint32_t *)buffer; ++ dfc_reg->nddb = *temp; ++ i += 4; ++ buffer += 4; ++ } ++*/ ++} ++ ++/****************************************************************************** ++ dfc_read_badblock_addr ++ ++ Description: ++ This function reads bad block address in units of block starting from 0 ++ if bad block is detected. It takes into the account if the operation is ++ for CS0 or CS1 depending on settings of chip_select parameter of DFC ++ Mode structure. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ Output Parameters: ++ pBadBlockAddr ++ Used to retrieve bad block address back to caller if bad block is ++ detected ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_read_badblock_addr(struct dfc_context *context, uint32_t *bbaddr) ++{ ++ uint32_t ndbdr; ++ if (0 == context->dfc_mode->chip_select) ++ ndbdr = dfc_read(context, DFC_NDBDR0); ++ else ++ ndbdr = dfc_read(context, DFC_NDBDR1); ++ ++ if (512 == context->flash_info->page_size) { ++ ndbdr = (ndbdr >> 5) & 0xFFF; ++ *bbaddr = ndbdr; ++ } else if (2048 == context->flash_info->page_size) { ++ /* 16 bits LB */ ++ ndbdr = (ndbdr >> 8); ++ *bbaddr = ndbdr; ++ } ++ return; ++} ++ ++/****************************************************************************** ++ dfc_enable_int ++ ++ Description: ++ This function is used to enable DFC interrupts. The bits in int_mask ++ will be used to unmask NDCR register to enable corresponding interrupts. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ int_mask ++ Specifies what interrupts to enable ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_enable_int(struct dfc_context *context, uint32_t int_mask) ++{ ++ uint32_t ndcr; ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr &= ~int_mask; ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ return; ++} ++ ++/****************************************************************************** ++ dfc_disable_int ++ ++ Description: ++ This function is used to disable DFC interrupts. ++ The bits inint_mask will be used to mask NDCR register to disable ++ corresponding interrupts. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ int_mask ++ Specifies what interrupts to disable ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_disable_int(struct dfc_context *context, uint32_t int_mask) ++{ ++ uint32_t ndcr; ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr |= int_mask; ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ ndcr = dfc_read(context, DFC_NDCR); ++ return; ++} ++ ++/****************************************************************************** ++ dfc_clear_int ++ ++ Description: ++ This function is used to disable DFC interrupts. ++ The bits in int_mask will be used to clear corresponding interrupts ++ in NDCR register ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ int_mask ++ Specifies what interrupts to clear ++ Output Parameters: ++ None ++ Returns: ++ None ++*******************************************************************************/ ++void dfc_clear_int(struct dfc_context *context, uint32_t int_mask) ++{ ++ dfc_write(context, DFC_NDSR, int_mask); ++ ++ dfc_read(context, DFC_NDSR); ++ return; ++} ++ ++/* ++ * high level primitives ++ */ ++ ++/****************************************************************************** ++ dfc_init ++ ++ Description: ++ This function does entire DFC initialization according to the NAND ++ flash type currently used with platform, including setting MFP, set ++ flash timing, set DFC mode, configuring specified flash parameters ++ in DFC, clear ECC logic and page count register. ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ 0 ++ if MFPRs are set correctly ++ -EINVAL ++ if specified flash is not support by check bytes per page and pages per ++ block ++******************************************************************************/ ++ ++static mfp_cfg_t pxa300_nand_cfg[] = { ++ /* NAND */ ++ MFP_CFG_X(DF_INT_RnB, AF0, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nRE_nOE, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nWE, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_CLE_nOE, AF0, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nADV1_ALE, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nCS0, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nCS1, AF0, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_IO0, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO1, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO2, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO3, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO4, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO5, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO6, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO7, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO8, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO9, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO10, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO11, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO12, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO13, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO14, AF1, DS08X, PULL_LOW), ++}; ++ ++#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) ++ ++int dfc_init(struct dfc_context* context, int type) ++{ ++ int status; ++ struct dfc_flash_info * flash_info; ++ uint32_t ndcr = 0x00000FFF; /* disable all interrupts */ ++ ++ status = dfc_get_flash_info(type, &flash_info); ++ if (status) ++ return status; ++ context->flash_info = flash_info; ++ ++ pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa300_nand_cfg)); ++ //enable_dfc_pins(); ++ ++ dfc_set_timing(context, &context->flash_info->timing); ++ ++ if (flash_info->enable_arbiter) ++ ndcr |= NDCR_ND_ARB_EN; ++ ++ if (64 == flash_info->page_per_block) ++ ndcr |= NDCR_PG_PER_BLK; ++ else if (32 != flash_info->page_per_block) ++ return -EINVAL; ++ ++ if (flash_info->row_addr_start) ++ ndcr |= NDCR_RA_START; ++ ++ ndcr |= (flash_info->read_id_bytes)<<16; ++ ++ ndcr |= (flash_info->dfc_mode) << 21; ++ ++ if (flash_info->ncsx) ++ ndcr |= NDCR_NCSX; ++ ++ if (2048 == flash_info->page_size) ++ ndcr |= NDCR_PAGE_SZ; ++ else if (512 != flash_info->page_size) ++ return -EINVAL; ++ ++ if (16 == flash_info->flash_width) ++ ndcr |= NDCR_DWIDTH_M; ++ else if (8 != flash_info->flash_width) ++ return -EINVAL; ++ ++ if (16 == flash_info->dfc_width) ++ ndcr |= NDCR_DWIDTH_C; ++ else if (8 != flash_info->dfc_width) ++ return -EINVAL; ++ ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ dfc_set_dma(context); ++ dfc_set_ecc(context); ++ dfc_set_spare(context); ++ ++ return 0; ++} ++ ++/****************************************************************************** ++ dfc_init_no_gpio ++ ++ Description: ++ This function does entire DFC initialization according to the NAND ++ flash type currently used with platform, including set flash timing, ++ set DFC mode, configuring specified flash parameters in DFC, clear ++ ECC logic and page count register. The only difference with dfc_init ++ is that it does not set MFP&GPIO, very useful in OS loader ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ 0 ++ if MFPRs are set correctly ++ -EINVAL ++ if specified flash is not support by check bytes per page and pages ++ per block ++******************************************************************************/ ++int dfc_init_no_gpio(struct dfc_context* context, int type) ++{ ++ struct dfc_flash_info * flash_info; ++ uint32_t ndcr = 0x00000FFF; /* disable all interrupts */ ++ int status; ++ ++ status = dfc_get_flash_info(type, &flash_info); ++ if (status) ++ return status; ++ context->flash_info = flash_info; ++ ++ dfc_set_timing(context, &context->flash_info->timing); ++ ++ if (flash_info->enable_arbiter) ++ ndcr |= NDCR_ND_ARB_EN; ++ ++ if (64 == flash_info->page_per_block) ++ ndcr |= NDCR_PG_PER_BLK; ++ else if (32 != flash_info->page_per_block) ++ return -EINVAL; ++ ++ if (flash_info->row_addr_start) ++ ndcr |= NDCR_RA_START; ++ ++ ndcr |= (flash_info->read_id_bytes)<<16; ++ ++ ndcr |= (flash_info->dfc_mode) << 21; ++ ++ if (flash_info->ncsx) ++ ndcr |= NDCR_NCSX; ++ ++ if (2048 == flash_info->page_size) ++ ndcr |= NDCR_PAGE_SZ; ++ else if (512 != flash_info->page_size) ++ return -EINVAL; ++ ++ if (16 == flash_info->flash_width) ++ ndcr |= NDCR_DWIDTH_M; ++ else if (8 != flash_info->flash_width) ++ return -EINVAL; ++ ++ if (16 == flash_info->dfc_width) ++ ndcr |= NDCR_DWIDTH_C; ++ else if (8 != flash_info->dfc_width) ++ return -EINVAL; ++ ++ dfc_write(context, DFC_NDCR, ndcr); ++ ++ dfc_set_dma(context); ++ dfc_set_ecc(context); ++ dfc_set_spare(context); ++ ++ return 0; ++} ++ ++/* ++ * This macro will be used in following NAND operation functions. ++ * It is used to clear command buffer to ensure cmd buffer is empty ++ * in case of operation is timeout ++ */ ++#define ClearCMDBuf() do { \ ++ dfc_stop(context); \ ++ udelay(NAND_OTHER_TIMEOUT); \ ++ } while (0) ++ ++/****************************************************************************** ++ dfc_reset_flash ++ ++ Description: ++ It reset the flash. The function can be called at any time when the ++ device is in Busy state during random read/program/erase mode and ++ reset operation will abort all these operations. After reset operation ++ the device is ready to wait for next command ++ Input Parameters: ++ context ++ Pointer to DFC context structure ++ Output Parameters: ++ None ++ Returns: ++ 0 ++ execution succeeds ++ -ETIME ++ if timeout ++*******************************************************************************/ ++int dfc_reset_flash(struct dfc_context *context) ++{ ++ struct dfc_flash_info *flash_info = context->flash_info; ++ uint32_t event, event_out; ++ unsigned long timeo; ++ int status; ++ ++ /* Send command */ ++ dfc_send_cmd(context, (uint16_t)flash_info->reset, 0xFFFFFFFF, 0); ++ ++ event = (context->dfc_mode->chip_select)? \ ++ NDSR_CS1_CMDD : NDSR_CS0_CMDD; ++ ++ /* Wait for CMDDM(command done successfully) */ ++ status = dfc_wait_event(context, event, &event_out, ++ NAND_OTHER_TIMEOUT, 0); ++ ++ if (status) { ++ ClearCMDBuf(); ++ return status; ++ } ++ ++ ++ /* Wait until flash device is stable or timeout (10ms) */ ++ timeo = jiffies + HZ; ++ do { ++ if (monahans_df_dev_ready(context->mtd)) ++ break; ++ } while (time_before(jiffies, timeo)); ++ ++ return 0; ++} ++ ++int dfc_readid(struct dfc_context *context, uint32_t *id) ++{ ++ struct dfc_flash_info *flash_info = context->flash_info; ++ uint32_t event_out; ++ int status; ++ char tmp[DFC_DATA_SIZE_ID]; ++ ++ /* Send command */ ++ status = dfc_send_cmd(context, (uint16_t)flash_info->read_id, ++ 0xFFFFFFFF, 0); ++ if (status) { ++ ClearCMDBuf(); ++ return status; ++ } ++ ++ /* Wait for CMDDM(command done successfully) */ ++ status = dfc_wait_event(context, NDSR_RDDREQ, &event_out, ++ NAND_OTHER_TIMEOUT, 0); ++ if (status) { ++ ClearCMDBuf(); ++ return status; ++ } ++ dfc_read_fifo_partial(context, (unsigned char *)tmp, ++ context->flash_info->read_id_bytes, DFC_DATA_SIZE_ID); ++ ++ *id = tmp[0] | (tmp[1] << 8); ++ return 0; ++} ++ ++#define ERR_NONE 0x0 ++#define ERR_DMABUSERR (-0x01) ++#define ERR_SENDCMD (-0x02) ++#define ERR_DBERR (-0x03) ++#define ERR_BBERR (-0x04) ++#define ERR_BUSY (-0x05) ++ ++#define STATE_CMD_SEND 0x1 ++#define STATE_CMD_HANDLE 0x2 ++#define STATE_DMA_TRANSFER 0x3 ++#define STATE_DMA_DONE 0x4 ++#define STATE_READY 0x5 ++#define STATE_SUSPENDED 0x6 ++#define STATE_DATA_TRANSFER 0x7 ++ ++#define NAND_RELOC_MAX 127 ++#define NAND_RELOC_HEADER 0x524e ++#define MAX_CHIP 1 ++#define NAND_CMD_DMA_LEN 12 ++ ++#define MAX_TIM_SIZE 0x1000 ++#define MAX_BBT_SLOTS 24 ++ ++struct reloc_item { ++ unsigned short from; ++ unsigned short to; ++}; ++ ++struct reloc_table { ++ unsigned short header; ++ unsigned short total; ++ struct reloc_item reloc[NAND_RELOC_MAX]; ++}; ++ ++struct monahans_dfc_info { ++ unsigned int state; ++ struct dfc_context *context; ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ dma_addr_t data_buf_addr; ++ char *data_buf; ++ int data_dma; ++ struct pxa_dma_desc *data_desc; ++ dma_addr_t data_desc_addr; ++ dma_addr_t cmd_buf_addr; ++ char *cmd_buf; ++ int cmd_dma; ++ struct pxa_dma_desc *cmd_desc; ++ dma_addr_t cmd_desc_addr; ++ u64 dma_mask; ++#else ++ char *data_buf; ++#endif ++ u32 current_slot; ++ struct reloc_table table; ++ unsigned int table_init; ++ /* relate to the command */ ++ unsigned int cmd; ++ unsigned int addr; ++ unsigned int column; ++ int retcode; ++ unsigned int buf_count; ++ struct completion cmd_complete; ++}; ++ ++static struct dfc_mode dfc_mode = ++{ ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ 1, /* enable DMA */ ++#else ++ 0, ++#endif ++ 1, /* enable ECC */ ++ 1, /* enable SPARE */ ++ 0, /* CS0 */ ++}; ++ ++ ++struct dfc_context dfc_context = ++{ ++ 0, /* Initialized at function monahans_df_init() */ ++ &dfc_mode, ++ 0, /* data dma channel */ ++ 0, /* cmd dma channel */ ++ NULL, /* &zylonite_flashinfo */ ++}; ++ ++ ++/* ++ * MTD structure for Zylonite board ++ */ ++static struct mtd_info *monahans_mtd = NULL; ++ ++/* ++ * BootRom and XDB will use last 127 block, and they will keep all the status ++ * of the bootloader and image, so skip the first 2M size and last 2M size ++ */ ++static struct mtd_partition partition_info[] = { ++ { ++ name: "Bootloader", ++//#ifdef CONFIG_CPU_MONAHANS_LV ++ size: 0x00060000, ++//#else ++// size: 0x00040000, ++//#endif ++ offset: 0, ++ mask_flags: MTD_WRITEABLE /* force read-only */ ++ },{ ++ name: "Kernel", ++ size: 0x00200000, ++//#ifdef CONFIG_CPU_MONAHANS_LV ++ offset: 0x00060000, ++//#else ++// offset: 0x00040000, ++//#endif ++ mask_flags: MTD_WRITEABLE /* force read-only */ ++ },{ ++ name: "Filesystem", ++ size: 0x05000000, ++//#ifdef CONFIG_CPU_MONAHANS_LV ++ offset: 0x00260000, ++//#else ++// offset: 0x00240000, ++//#endif ++ }, { ++ name: "MassStorage", ++ size: 0x0, /* It will be set at probe function */ ++ offset: MTDPART_OFS_APPEND /* Append after fs section */ ++ }, { ++ name: "BBT", ++ size: 0x0, /* It will be set at probe function */ ++ offset: MTDPART_OFS_APPEND,/* Append after fs section */ ++ mask_flags: MTD_WRITEABLE /* force read-only */ ++ } ++}; ++ ++#define PART_NUM ARRAY_SIZE(partition_info) ++ ++/* MHN_OBM_V2 is related to BBT in MOBM V2 ++ * MHN_OBM_V3 is related to BBT in MOBM V3 ++ */ ++enum { ++ MHN_OBM_NULL = 0, ++ MHN_OBM_V1, ++ MHN_OBM_V2, ++ MHN_OBM_V3, ++ MHN_OBM_INVAL ++} MHN_OBM_TYPE; ++ ++static uint8_t scan_ff_pattern[] = { 0xff, 0xff }; ++static uint8_t scan_main_bbt_pattern[] = { 'p', 'x', 'a', '1' }; ++static uint8_t scan_mirror_bbt_pattern[] = { '0', 'a', 'x', 'p' }; ++ ++static struct nand_bbt_descr monahans_bbt_default = { ++ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE ++ | NAND_BBT_2BIT | NAND_BBT_VERSION, ++ .maxblocks = 2, ++ .len = 2, ++ .offs = 0, ++ .pattern = scan_ff_pattern, ++}; ++ ++static struct nand_bbt_descr monahans_bbt_main = { ++ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE ++ | NAND_BBT_2BIT | NAND_BBT_VERSION, ++ .veroffs = 6, ++ .maxblocks = 2, ++ .offs = 2, ++ .len = 4, ++ .pattern = scan_main_bbt_pattern, ++}; ++ ++static struct nand_bbt_descr monahans_bbt_mirror = { ++ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE ++ | NAND_BBT_2BIT | NAND_BBT_VERSION, ++ .veroffs = 6, ++ .maxblocks = 2, ++ .offs = 2, ++ .len = 4, ++ .pattern = scan_mirror_bbt_pattern, ++}; ++ ++#if 0 ++static struct nand_bbt_descr monahans_bbt_main = { ++ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE ++ | NAND_BBT_2BIT | NAND_BBT_VERSION, ++ .veroffs = 2, ++ .maxblocks = 2, ++ .offs = 0x0, ++ .len = 2, ++ .pattern = scan_ff_pattern ++}; ++static struct nand_bbt_descr monahans_bbt_mirror = { ++ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE ++ | NAND_BBT_2BIT | NAND_BBT_VERSION, ++ .veroffs = 2, ++ .maxblocks = 2, ++ .offs = 0x0, ++ .len = 2, ++ .pattern = scan_ff_pattern ++}; ++#endif ++ ++static struct nand_ecclayout monahans_lb_nand_oob = { ++ .eccbytes = 24, ++ .eccpos = { ++ 40, 41, 42, 43, 44, 45, 46, 47, ++ 48, 49, 50, 51, 52, 53, 54, 55, ++ 56, 57, 58, 59, 60, 61, 62, 63}, ++ .oobfree = { {2, 38} } ++}; ++ ++/* ++ * Monahans OOB size is only 8 bytes, and the rest 8 bytes is controlled by ++ * hardware for ECC. We construct virutal ECC buffer. Acutally, ECC is 6 bytes ++ * and the remain 2 bytes are reserved. ++ */ ++static struct nand_ecclayout monahans_sb_nand_oob = { ++ .eccbytes = 6, ++ .eccpos = {8, 9, 10, 11, 12, 13 }, ++ .oobfree = { {2, 6} } ++}; ++ ++ ++static inline int is_buf_blank(u8 * buf, int size) ++{ ++ int i = 0; ++ while(i < size) { ++ if (*((unsigned long *)(buf + i)) != 0xFFFFFFFF) ++ return 0; ++ i += 4; ++ } ++ if (i > size) { ++ i -= 4; ++ while( i < size) { ++ if(*(buf + i) != 0xFF) ++ return 0; ++ i++; ++ } ++ } ++ return 1; ++} ++ ++static void print_buf(char *buf, int num) ++{ ++ int i = 0; ++ ++ while (i < num) { ++ printk(KERN_ERR "0x%08x: %02x %02x %02x %02x %02x %02x %02x" ++ " %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", ++ (unsigned int) (i), buf[i], buf[i+1], buf[i+2], ++ buf[i+3], buf[i+4], buf[i+5], buf[i+6], buf[i+7], ++ buf[i+8], buf[i+9], buf[i+10],buf[i+11], buf[i+12], ++ buf[i+13], buf[i+14], buf[i+15]); ++ i += 16; ++ } ++} ++ ++static int inline enable_dfc_dma(struct dfc_context *context, int enable) ++{ ++ int ret = dfc_mode.enable_dma; ++ unsigned long ndcr; ++ ++ if (!enable) { ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr &= ~NDCR_DMA_EN; ++ dfc_write(context, DFC_NDCR, ndcr); ++ dfc_mode.enable_dma = 0; ++ } else { ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr |= NDCR_DMA_EN; ++ dfc_write(context, DFC_NDCR, ndcr); ++ dfc_mode.enable_dma = 1; ++ } ++ return ret; ++} ++ ++ ++static void inline dump_info(struct monahans_dfc_info *info) ++{ ++ if (!info) ++ return; ++ ++ printk(KERN_ERR "cmd:0x%x; addr:0x%x; retcode:%d; state:%d \n", ++ info->cmd, info->addr, info->retcode, info->state); ++} ++ ++static void inline enable_hw_ecc(struct dfc_context* context, int enable) ++{ ++ unsigned long ndcr; ++ ++ if (!enable) { ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr &= ~NDCR_ECC_EN; ++ dfc_write(context, DFC_NDCR, ndcr); ++ dfc_mode.enable_ecc = 0; ++ } ++ else { ++ ndcr = dfc_read(context, DFC_NDCR); ++ ndcr |= NDCR_ECC_EN; ++ dfc_write(context, DFC_NDCR, ndcr); ++ dfc_mode.enable_ecc = 1; ++ } ++} ++ ++/* ++ * Now, we are not sure that the NDSR_RDY mean the flash is ready. ++ * Need more test. ++ */ ++static int monahans_df_dev_ready(struct mtd_info *mtd) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ struct dfc_context* context = info->context; ++ ++ return ((dfc_read(context, DFC_NDSR) & NDSR_RDY)); ++} ++ ++/* each read, we can only read 4bytes from NDDB, we must buffer it */ ++static u_char monahans_df_read_byte(struct mtd_info *mtd) ++{ ++ char retval = 0xFF; ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ if (info->column < info->buf_count) { ++ /* Has just send a new command? */ ++ retval = info->data_buf[info->column++]; ++ } ++ return retval; ++} ++ ++static void monahans_df_write_byte(struct mtd_info *mtd, u8 byte) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ info->data_buf[info->column++] = byte; ++} ++ ++static u16 monahans_df_read_word(struct mtd_info *mtd) ++{ ++ u16 retval = 0xFFFF; ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ if (!(info->column & 0x01) && info->column < info->buf_count) { ++ retval = *((u16 *)(info->data_buf+info->column)); ++ info->column += 2; ++ } ++ return retval; ++} ++ ++static void monahans_df_write_word(struct mtd_info *mtd, u16 word) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ if (!(info->column & 0x01) && info->column < info->buf_count) { ++ *((u16 *)(info->data_buf+info->column)) = word; ++ info->column += 2; ++ } ++} ++ ++static void monahans_df_read_buf(struct mtd_info *mtd, u_char *buf, int len) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ int real_len = min((unsigned int)len, info->buf_count - info->column); ++ ++ memcpy(buf, info->data_buf + info->column, real_len); ++ info->column += real_len; ++} ++ ++static void monahans_df_write_buf(struct mtd_info *mtd, ++ const u_char *buf, int len) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ int real_len = min((unsigned int)len, info->buf_count - info->column); ++ ++ memcpy(info->data_buf + info->column, buf, real_len); ++ info->column += real_len; ++} ++ ++static int monahans_df_verify_buf(struct mtd_info *mtd, ++ const u_char *buf, int len) ++{ ++ return 0; ++} ++ ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++static void monahans_dfc_cmd_dma_irq(int channel, void *data, ++ struct pt_regs *regs) ++{ ++ unsigned int dcsr; ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *)data; ++ struct dfc_context* context = info->context; ++ struct dfc_mode* dfc_mode = context->dfc_mode; ++ unsigned int intm; ++ ++ dcsr = DCSR(channel); ++ DCSR(channel) = dcsr; ++ ++ intm = (dfc_mode->chip_select) ? \ ++ (NDSR_CS1_BBD | NDSR_CS1_CMDD) : (NDSR_CS0_BBD | NDSR_CS0_CMDD); ++ ++ D1(printk("cmd dma interrupt, channel:%d, DCSR:0x%08x\n", \ ++ channel, dcsr)); ++ ++ if (dcsr & DCSR_BUSERR) { ++ info->retcode = ERR_DMABUSERR; ++ complete(&info->cmd_complete); ++ } else { ++ if ((info->cmd == NAND_CMD_READ0) || ++ (info->cmd == NAND_CMD_READOOB)|| \ ++ (info->cmd == NAND_CMD_READID) || \ ++ (info->cmd == NAND_CMD_STATUS)) { ++ dfc_enable_int(context, NDSR_RDDREQ | NDSR_DBERR); ++ } else if (info->cmd == NAND_CMD_PAGEPROG) ++ dfc_enable_int(context, NDSR_WRDREQ); ++ else if (info->cmd == NAND_CMD_ERASE1) ++ dfc_enable_int(context, intm); ++ } ++ ++ return; ++} ++ ++ ++static void monahans_dfc_data_dma_irq(int channel, void *data, ++ struct pt_regs *regs) ++{ ++ unsigned int dcsr, intm; ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *)data; ++ struct dfc_context* context = info->context; ++ struct dfc_mode* dfc_mode = context->dfc_mode; ++ ++ dcsr = DCSR(channel); ++ DCSR(channel) = dcsr; ++ ++ intm = (dfc_mode->chip_select) ? \ ++ (NDSR_CS1_BBD | NDSR_CS1_CMDD) : (NDSR_CS0_BBD | NDSR_CS0_CMDD); ++ ++ D1(printk("data dma interrupt, channel:%d, DCSR:0x%08x\n", ++ channel, dcsr)); ++ if (dcsr & DCSR_BUSERR) { ++ info->retcode = ERR_DMABUSERR; ++ complete(&info->cmd_complete); ++ } ++ ++ if (info->cmd == NAND_CMD_PAGEPROG) { ++ /* DMA interrupt may be interrupted by other IRQs*/ ++ info->state = STATE_DMA_DONE; ++ dfc_enable_int(context, intm); ++ } else { ++ info->state = STATE_READY; ++ complete(&info->cmd_complete); ++ } ++ ++} ++#endif ++ ++static irqreturn_t monahans_dfc_irq(int irq, void *devid) ++{ ++ unsigned int status, event, intm, cmd; ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *)devid; ++ struct dfc_context* context = info->context; ++ struct dfc_mode* dfc_mode = context->dfc_mode; ++ ++ intm = (dfc_mode->chip_select) ? \ ++ (NDSR_CS1_BBD | NDSR_CS1_CMDD) : (NDSR_CS0_BBD | NDSR_CS0_CMDD); ++ event = (dfc_mode->chip_select) ? \ ++ (NDSR_CS1_BBD | NDSR_CS1_CMDD) : (NDSR_CS0_BBD | NDSR_CS0_CMDD); ++ ++ status = dfc_read(context, DFC_NDSR); ++ D1(printk("DFC irq, NDSR:0x%x\n", status)); ++ if (status & (NDSR_RDDREQ | NDSR_DBERR)) { ++ if (status & NDSR_DBERR) { ++ info->retcode = ERR_DBERR; ++ } ++ ++ dfc_disable_int(context, NDSR_RDDREQ | NDSR_DBERR); ++ dfc_clear_int(context, NDSR_RDDREQ | NDSR_DBERR); ++ if (info->cmd == NAND_CMD_READID) ++ cmd = context->flash_info->read_id; ++ else if (info->cmd == NAND_CMD_STATUS) ++ cmd = context->flash_info->read_status; ++ else if (info->cmd == NAND_CMD_READ0 || ++ info->cmd == NAND_CMD_READOOB) ++ cmd = context->flash_info->read1; ++ else { ++ printk(KERN_ERR "No according command:0x%x happens\n", ++ info->cmd); ++ goto out; ++ } ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ info->state = STATE_DMA_TRANSFER; ++ dfc_start_data_dma(context, ++ (struct pxa_dma_desc*)info->data_desc_addr); ++#else ++ info->state = STATE_DATA_TRANSFER; ++ complete(&info->cmd_complete); ++#endif ++ } else if (status & NDSR_WRDREQ) { ++ dfc_disable_int(context, NDSR_WRDREQ); ++ dfc_clear_int(context, NDSR_WRDREQ); ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ info->state = STATE_DMA_TRANSFER; ++ dfc_start_data_dma(context, ++ (struct pxa_dma_desc*)info->data_desc_addr); ++#else ++ info->state = STATE_DATA_TRANSFER; ++ complete(&info->cmd_complete); ++#endif ++ } else if (status & event) { ++ if (status & NDSR_CS0_BBD) { ++ info->retcode = ERR_BBERR; ++ } ++ ++ dfc_disable_int(context, intm); ++ dfc_clear_int(context, event); ++ info->state = STATE_READY; ++ complete(&info->cmd_complete); ++ } ++out: ++ return IRQ_HANDLED; ++} ++ ++static int dfc_send_command(struct mtd_info *mtd, unsigned int cmd, ++ unsigned int addr, unsigned int num_pages, ++ unsigned int event) ++{ ++ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ struct dfc_context* context = info->context; ++ int status; ++ int ret; ++ ++ D1(printk("ready send command, cmd:0x%x, at address:0x%x," ++ " num_pages:%d, wait event:0x%x\n", cmd, addr, num_pages, event)); ++ ++ info->state = STATE_CMD_SEND; ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ status = dfc_setup_cmd_dma(context, cmd, addr, num_pages, ++ (uint32_t *)info->cmd_buf, info->cmd_buf_addr, ++ DDADR_STOP, DCMD_ENDIRQEN, info->cmd_desc); ++#else ++ status = dfc_send_cmd(context, cmd, addr, num_pages); ++#endif ++ if (status) { ++ info->retcode = ERR_SENDCMD; ++ dfc_stop(context); ++ udelay(20); ++ printk(KERN_ERR "fail send command\n"); ++ return info->retcode; ++ } ++ info->state = STATE_CMD_HANDLE; ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ dfc_setup_data_dma(context, cmd, info->data_buf_addr, ++ DDADR_STOP, DCMD_ENDIRQEN, info->data_desc); ++ dfc_start_cmd_dma(context, (struct pxa_dma_desc*)info->cmd_desc_addr); ++#endif ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ dfc_enable_int(context, event); ++#endif ++ ret = wait_for_completion_timeout(&info->cmd_complete, 2*HZ); ++ if (!ret){ ++ printk(KERN_ERR "Command time out\n"); ++ dump_info(info); ++ } ++ D1(printk("command return, cmd:0x%x, retcode:%d\n", ++ info->cmd, info->retcode)); ++ return 0; ++} ++ ++static void monahans_df_command(struct mtd_info *mtd, unsigned command, ++ int column, int page_addr ) ++{ ++ struct nand_chip *this = (struct nand_chip *)(mtd->priv); ++ struct monahans_dfc_info *info = ++ (struct monahans_dfc_info *)(this->priv); ++ struct dfc_context *context = info->context; ++ struct dfc_flash_info * flash_info = context->flash_info; ++ int ret, pages_shift; ++ int status; ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ int datasize; ++ int paddingsize; ++#endif ++ unsigned int to; ++ ++ D1(printk("command:0x%x at address:0x%x, column:0x%x\n", ++ command, page_addr, column)); ++ ++ if (info->state != STATE_READY) { ++ printk(KERN_ERR "CHIP is not ready.\n"); ++ dump_info(info); ++ info->retcode = ERR_BUSY; ++ return; ++ } ++ info->retcode = ERR_NONE; ++ pages_shift = this->phys_erase_shift - this->page_shift; ++ if (info->table_init) { ++ to = search_rel_block((page_addr >> pages_shift), mtd); ++ if (to) { ++ page_addr = (to << pages_shift) | (page_addr ++ & ((1 << pages_shift) - 1)); ++ } ++ } ++ ++ switch ( command ) { ++ case NAND_CMD_READOOB: ++ /* ++ * DFC has mark the last 8 bytes OOB data if HARDEARE_ECC is ++ * enabled. We must first disable the HARDWARE_ECC for getting ++ * all the 16 bytes OOB ++ */ ++ enable_hw_ecc(context, 0); ++ info->buf_count = mtd->writesize + mtd->oobsize; ++ info->column = mtd->writesize + column; ++ info->cmd = command; ++ info->addr = page_addr << this->page_shift; ++ ret = dfc_send_command(mtd, flash_info->read1, info->addr, ++ 1, NDSR_RDDREQ | NDSR_DBERR); ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ dfc_get_pattern(info->context, flash_info->read1, &datasize, ++ &paddingsize); ++ dfc_read_fifo_partial(info->context, info->data_buf, ++ min(info->buf_count, datasize), datasize); ++ info->state = STATE_READY; ++#endif ++ /* We only are OOB, so if the data has error, does not matter */ ++ if (info->retcode == ERR_DBERR) ++ info->retcode = ERR_NONE; ++ enable_hw_ecc(context, 1); ++ break; ++ ++ case NAND_CMD_READ0: ++ enable_hw_ecc(context, 1); ++ info->column = column; ++ info->cmd = command; ++ info->buf_count = mtd->writesize + mtd->oobsize; ++ memset(info->data_buf, 0xFF, info->buf_count); ++ info->addr = page_addr << this->page_shift; ++ ++ ret = dfc_send_command(mtd, flash_info->read1, info->addr, ++ 1, NDSR_RDDREQ | NDSR_DBERR); ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ dfc_get_pattern(info->context, flash_info->read1, &datasize, ++ &paddingsize); ++ dfc_read_fifo_partial(info->context, info->data_buf, ++ min(info->buf_count, datasize), datasize); ++ info->state = STATE_READY; ++#endif ++ /* When the data buf is blank, the DFC will report DB error */ ++ if (info->retcode == ERR_DBERR && is_buf_blank(info->data_buf, ++ mtd->writesize)) ++ info->retcode = ERR_NONE; ++ ++ if (info->retcode == ERR_DBERR) { ++ printk(KERN_ERR "DB error at address 0x%x\n", ++ info->addr); ++ print_buf(info->data_buf, info->buf_count); ++ } ++ break; ++ case NAND_CMD_SEQIN: ++ /* Write only OOB? */ ++ ++ info->cmd = command; ++ if (column >= mtd->writesize) { ++ info->buf_count = mtd->writesize + mtd->oobsize; ++ enable_hw_ecc(context, 0); ++ } else { ++ info->buf_count = mtd->writesize + mtd->oobsize; ++ enable_hw_ecc(context, 1); ++ } ++ memset(info->data_buf, 0xFF, mtd->writesize + mtd->oobsize); ++ info->column = column; ++ info->addr = page_addr << this->page_shift; ++ break; ++ case NAND_CMD_PAGEPROG: ++ /* prevois command is NAND_CMD_SEIN ?*/ ++ if (info->cmd != NAND_CMD_SEQIN) { ++ info->cmd = command; ++ info->retcode = ERR_SENDCMD; ++ printk(KERN_ERR "Monahans NAND device: " ++ "No NAND_CMD_SEQIN executed before.\n"); ++ enable_hw_ecc(context, 1); ++ break; ++ } ++ info->cmd = command; ++ ret = dfc_send_command(mtd, flash_info->program, info->addr, ++ 1, NDSR_WRDREQ); ++ ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ if (ret != 0) ++ break; ++ ++ dfc_get_pattern(info->context, flash_info->program, &datasize, ++ &paddingsize); ++ dfc_write_fifo_partial(info->context, info->data_buf, datasize, ++ datasize); ++ ++ if (info->context->dfc_mode->chip_select) ++ dfc_enable_int(info->context, ++ NDSR_CS1_BBD | NDSR_CS1_CMDD); ++ else ++ dfc_enable_int(info->context, ++ NDSR_CS0_BBD | NDSR_CS0_CMDD); ++ ++ ret = wait_for_completion_timeout(&info->cmd_complete, 2*HZ); ++ if (!ret){ ++ printk(KERN_ERR "Programm Command time out\n"); ++ dump_info(info); ++ } ++ ++ if (info->retcode == ERR_BBERR) { ++ mtd->block_markbad(mtd, info->addr); ++ } ++#endif ++ break; ++ case NAND_CMD_ERASE1: ++ info->cmd = command; ++ info->addr = (page_addr >> pages_shift) << this->phys_erase_shift; ++ ++ if (info->context->dfc_mode->chip_select) ++ ret = dfc_send_command(mtd, flash_info->erase, ++ info->addr, 0, NDSR_CS1_BBD | NDSR_CS1_CMDD); ++ else ++ ret = dfc_send_command(mtd, flash_info->erase, ++ info->addr, 0, NDSR_CS0_BBD | NDSR_CS0_CMDD); ++ ++ if (info->retcode == ERR_BBERR) { ++ mtd->block_markbad(mtd, info->addr); ++ } ++ break; ++ case NAND_CMD_ERASE2: ++ break; ++ case NAND_CMD_READID: ++ info->cmd = command; ++ info->buf_count = flash_info->read_id_bytes; ++ info->column = 0; ++ info->addr = 0xFFFFFFFF; ++ ret = dfc_send_command(mtd, flash_info->read_id, info->addr, ++ 0, NDSR_RDDREQ); ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ dfc_get_pattern(info->context, flash_info->read_id, &datasize, ++ &paddingsize); ++ dfc_read_fifo_partial(info->context, info->data_buf, ++ info->buf_count, datasize); ++ info->state = STATE_READY; ++#endif ++ D1(printk("ReadID, [1]:0x%x, [2]:0x%x\n", ++ info->data_buf[0], info->data_buf[1])); ++ break; ++ case NAND_CMD_STATUS: ++ info->cmd = command; ++ info->buf_count = 1; ++ info->column = 0; ++ info->addr = 0xFFFFFFFF; ++ ret = dfc_send_command(mtd, flash_info->read_status, ++ info->addr, 0, NDSR_RDDREQ); ++#ifndef CONFIG_MTD_NAND_MONAHANS_DMA ++ dfc_get_pattern(info->context, flash_info->read_status, ++ &datasize, &paddingsize); ++ dfc_read_fifo_partial(info->context, info->data_buf, ++ info->buf_count, datasize); ++ info->state = STATE_READY; ++#endif ++ break; ++ ++ case NAND_CMD_RESET: ++ status = dfc_reset_flash(&dfc_context); ++ if (status) { ++ printk(KERN_WARNING "Monahans NAND device:" ++ "NAND_CMD_RESET error\n"); ++ } ++ break; ++ default: ++ printk(KERN_WARNING "Monahans NAND device:" ++ "Non-support the command.\n"); ++ break; ++ } ++ ++ if (info->retcode != ERR_NONE) ++ dfc_stop(info->context); ++} ++ ++static void monahans_df_select_chip(struct mtd_info *mtd, int chip) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ if (chip <= MAX_CHIP) ++ info->context->dfc_mode->chip_select = chip; ++ else ++ printk(KERN_ERR "Monahans NAND device:" ++ "not select the NAND chips!\n"); ++} ++ ++static int monahans_df_waitfunc(struct mtd_info *mtd, ++ struct nand_chip *this) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ /* monahans_df_send_command has waited for command complete */ ++ if (this->state == FL_WRITING || this->state == FL_ERASING) { ++ if (info->retcode == ERR_NONE) ++ return 0; ++ else { ++ /* ++ * any error make it return 0x01 which will tell ++ * the caller the erase and write fail ++ */ ++ return 0x01; ++ } ++ } ++ ++ return 0; ++} ++ ++static int monahans_df_calculate_ecc(struct mtd_info *mtd, ++ const u_char *dat, u_char *ecc_code) ++{ ++ return 0; ++} ++ ++static int monahans_df_correct_data(struct mtd_info *mtd, ++ u_char *dat, u_char *read_ecc, u_char *calc_ecc) ++{ ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ /* ++ * Any error include ERR_SEND_CMD, ERR_DBERR, ERR_BUSERR, we ++ * consider it as a ecc error which will tell the caller the ++ * read fail We have distinguish all the errors, but the ++ * nand_read_ecc only check this function return value ++ */ ++ if (info->retcode != ERR_NONE) ++ return -1; ++ ++ return 0; ++} ++ ++static void monahans_df_enable_hwecc(struct mtd_info *mtd, int mode) ++{ ++ return; ++} ++ ++/* ++ * The relocation table management is different between MOBM V2 and V3. ++ * ++ * MOBM V2 is applied on chips taped out before MhnLV A0. ++ * MOBM V3 is applied on chips taped out after MhnLV A0. It's also applied ++ * on MhnLV A0. ++ */ ++static int calc_obm_ver(void) ++{ ++ unsigned int cpuid; ++ /* read CPU ID */ ++ __asm__ ( ++ "mrc p15, 0, %0, c0, c0, 0\n" ++ : "=r" (cpuid) ++ ); ++ /* It's not xscale chip. */ ++ if ((cpuid & 0xFFFF0000) != 0x69050000) ++ return MHN_OBM_INVAL; ++ /* It's MhnP Ax */ ++ if ((cpuid & 0x0000FFF0) == 0x00006420) ++ return MHN_OBM_V2; ++ /* It's MhnP Bx */ ++ if ((cpuid & 0x0000FFF0) == 0x00006820) { ++ if ((cpuid & 0x0F) <= 5) ++ return MHN_OBM_V2; ++ else ++ return MHN_OBM_V3; ++ } ++ /* It's MhnL Ax */ ++ if ((cpuid & 0x0000FFF0) == 0x00006880) { ++ if ((cpuid & 0x0F) == 0) ++ return MHN_OBM_V2; ++ else ++ return MHN_OBM_V3; ++ } ++ /* It's MhnLV Ax */ ++ if ((cpuid & 0x0000FFF0) == 0x00006890) ++ return MHN_OBM_V3; ++ return MHN_OBM_INVAL; ++} ++ ++ ++/* ++ * MOBM maintains a relocation table. It's used to replace bad blocks. ++ * If block A is bad, it will use block B instead. ++ * There're 127 relocated blocks. All of them reside in the bottom of NAND ++ * flash. So they're reserved and can't be calculated in mtd size and chip ++ * size. ++ */ ++static int read_reloc_table(struct mtd_info *mtd) ++{ ++ struct nand_chip *this = NULL; ++ struct monahans_dfc_info *info = NULL; ++ struct dfc_context *context = NULL; ++ struct reloc_table *table = NULL; ++ int page, maxslot; ++ int obm, valid; ++ ++ obm = calc_obm_ver(); ++ this = (struct nand_chip *)(mtd->priv); ++ info = (struct monahans_dfc_info *)(this->priv); ++ context = info->context; ++ ++ mtd->size -= (NAND_RELOC_MAX * mtd->erasesize); ++ this->chipsize -= (NAND_RELOC_MAX << this->phys_erase_shift); ++ page = (1 << (this->phys_erase_shift - this->page_shift)) - 1; ++ ++ this->select_chip(mtd, 0); ++ valid = 0; ++ if (obm == MHN_OBM_V2) { ++ /* On MOBM V2, the relocation table resides in the last page ++ * of the first block. ++ */ ++ memset(info->data_buf, 0, BUFLEN); ++ monahans_df_command(mtd, NAND_CMD_READ0, 0, page); ++ memcpy(((unsigned char *)&(info->table)), info->data_buf, ++ sizeof(struct reloc_table)); ++ if (info->table.header == NAND_RELOC_HEADER) ++ valid = 1; ++ } else if (obm == MHN_OBM_V3) { ++ /* On MOBM V3, there're several relocation tables in the first ++ * block. ++ * When new bad blocks are found, a new relocation table will ++ * be generated and written back to the first block. But the ++ * original relocation table won't be erased. Even if the new ++ * relocation table is written wrong, system can still find an ++ * old one. ++ * One page contains one slot. ++ */ ++ maxslot = 1 << (this->phys_erase_shift - this->page_shift); ++ page = maxslot - MAX_BBT_SLOTS; ++ for (; page < maxslot; page++) { ++ monahans_df_command(mtd, NAND_CMD_READ0, 0, page); ++ table = (struct reloc_table *)info->data_buf; ++ if (info->retcode == ERR_NONE) { ++ if (table->header != NAND_RELOC_HEADER) { ++ continue; ++ } else { ++ memcpy(((unsigned char *)&(info->table)), ++ table, sizeof(struct reloc_table)); ++ valid = 1; ++ break; ++ } ++ } ++ } ++ ++ } else { ++ printk(KERN_ERR "The version of MOBM isn't supported\n"); ++ } ++ if (valid) { ++ memcpy(((unsigned char *)&(info->table)), info->data_buf, ++ sizeof(struct reloc_table)); ++ printk(KERN_DEBUG "relocation table at page:%d\n", page); ++ PRINT_BUF((unsigned char *)&(info->table), ++ sizeof(struct reloc_table)); ++ info->table_init = 1; ++ } else { ++ /* There should be a valid relocation table slot at least. */ ++ printk(KERN_ERR "NO VALID relocation table can be \ ++ recognized\n"); ++ printk(KERN_ERR "CAUTION: It may cause unpredicated error\n"); ++ printk(KERN_ERR "Please re-initialize the NAND flash.\n"); ++ memset((unsigned char *)&(info->table), 0, ++ sizeof(struct reloc_table)); ++ info->table_init = 0; ++ return -EINVAL; ++ } ++ return 0; ++} ++ ++/* add the relocation entry into the relocation table ++ * It's valid on MOBM V3. ++ * If the relocated block is bad, an new entry will be added into the ++ * bottom of the relocation table. ++ */ ++static int update_rel_table(struct mtd_info *mtd, int block) ++{ ++ struct nand_chip *this = NULL; ++ struct monahans_dfc_info *info = NULL; ++ struct reloc_table *table = NULL; ++ int obm, reloc_block; ++ ++ this = (struct nand_chip *)(mtd->priv); ++ info = (struct monahans_dfc_info *)(this->priv); ++ obm = calc_obm_ver(); ++ if (obm == MHN_OBM_V3) { ++ table = &info->table; ++ if (info->table_init == 0) { ++ printk(KERN_ERR "Error: the initial relocation \ ++ table can't be read\n"); ++ memset(table, 0, sizeof(struct reloc_table)); ++ table->header = NAND_RELOC_HEADER; ++ info->table_init = 1; ++ } ++ if (table->total == 0) { ++ /* Point to the first relocated block. ++ * It resides in the last block of flash. ++ * the relocation entry has calculated in ++ * chipsize ++ */ ++ reloc_block = (this->chipsize ++ >> this->phys_erase_shift) ++ + NAND_RELOC_MAX - 1; ++ } else if (table->total < NAND_RELOC_MAX) { ++ reloc_block = table->reloc[table->total - 1].to - 1; ++ } else { ++ printk(KERN_ERR "Relocation table exceed max number, \ ++ cannot mark block 0x%x as bad block\n", block); ++ return -ENOSPC; ++ } ++ /* Make sure that reloc_block is pointing to a valid block */ ++ for (; ; reloc_block--) { ++ /* The relocate table is full */ ++ if (reloc_block < (this->chipsize ++ >> this->phys_erase_shift)) ++ return -ENOSPC; ++ this->cmdfunc(mtd, NAND_CMD_ERASE1, 0, reloc_block ++ << (this->phys_erase_shift ++ - this->page_shift)); ++ if (info->retcode == ERR_NONE) ++ break; ++ } ++ /* Create the relocated block information in the table */ ++ table->reloc[table->total].from = block; ++ table->reloc[table->total].to = reloc_block; ++ table->total++; ++ } ++ return 0; ++} ++ ++/* Write the relocation table back to device, if there's room. */ ++static int sync_rel_table(struct mtd_info *mtd, int *idx) ++{ ++ struct nand_chip *this = NULL; ++ struct monahans_dfc_info *info = NULL; ++ int obm, start_page, len; ++ ++ if (*idx >= MAX_BBT_SLOTS) { ++ printk(KERN_ERR "Can't write relocation table to device \ ++ any more.\n"); ++ return -1; ++ } ++ if (*idx < 0) { ++ printk(KERN_ERR "Wrong Slot is specified.\n"); ++ return -1; ++ } ++ this = (struct nand_chip *)(mtd->priv); ++ info = (struct monahans_dfc_info *)(this->priv); ++ len = 4; ++ len += info->table.total << 2; ++ obm = calc_obm_ver(); ++ if (obm == MHN_OBM_V3) { ++ /* write to device */ ++ start_page = 1 << (this->phys_erase_shift - this->page_shift); ++ start_page = start_page - 1 - *idx; ++ memset(&(info->data_buf), 0xFF, BUFLEN); ++ memcpy(&(info->data_buf), &(info->table), len); ++ ++ printk(KERN_DEBUG "DUMP relocation table before write. \ ++ page:0x%x\n", start_page); ++ monahans_df_command(mtd, NAND_CMD_SEQIN, 0, start_page); ++ monahans_df_command(mtd, NAND_CMD_PAGEPROG, 0, start_page); ++ /* write to idx */ ++ (*idx)++; ++ /* dump it */ ++ memset(&(info->data_buf), 0, BUFLEN); ++ monahans_df_command(mtd, NAND_CMD_READOOB, 0, start_page); ++ PRINT_BUF(info->data_buf, len); ++ } ++ return 0; ++} ++ ++ ++/* Find the relocated block of the bad one. ++ * If it's a good block, return 0. Otherwise, return a relocated one. ++ * idx points to the next relocation entry ++ * If the relocated block is bad, an new entry will be added into the ++ * bottom of the relocation table. ++ */ ++static unsigned short search_rel_block(int block, struct mtd_info *mtd) ++{ ++ struct nand_chip *this = NULL; ++ struct monahans_dfc_info *info = NULL; ++ struct reloc_table *table = NULL; ++ int i, max, reloc_block = 0; ++ ++ this = (struct nand_chip *)(mtd->priv); ++ info = (struct monahans_dfc_info *)(this->priv); ++ table = &(info->table); ++ if ((block <= 0) || (block > this->chipsize) ++ || (info->table_init == 0) || (table->total == 0)) ++ return 0; ++ if (table->total > NAND_RELOC_MAX) ++ table->total = NAND_RELOC_MAX; ++ max = table->total; ++ for (i = 0; i < max; i++) { ++ if (block == table->reloc[i].from) ++ reloc_block = table->reloc[i].to; ++ } ++ return reloc_block; ++} ++ ++/* ++ * Check whether the block is a bad one. ++ * At first, it will search the relocation table. ++ * If necessary, it will search the BBT. Because relocation table can only ++ * maintain limited record. If there're more bad blocks, they can't be ++ * recorded in relocation table. They can only be recorded in BBT. ++ */ ++static int monahans_df_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip) ++{ ++ struct nand_chip *this = NULL; ++ int page, block, reloc_block, chipnr, res = 0; ++ u16 bad; ++ ++ /* At here, we only support one flash chip */ ++ this = (struct nand_chip *)mtd->priv; ++ block = (int)(ofs >> this->phys_erase_shift); ++ /* search the block in the relocation table */ ++ reloc_block = search_rel_block(block, mtd); ++ if (reloc_block) { ++ ofs = ((reloc_block << this->phys_erase_shift) | ++ (ofs & ((1 << this->phys_erase_shift) - 1))); ++ } ++ ++ /* search BBT ++ * Maybe the relocation table is full, but some bad blocks aren't ++ * recordered in it. ++ * The below code are copied from nand_block_bad(). ++ */ ++ if (getchip) { ++ page = (int)(ofs >> this->page_shift); ++ chipnr = (int)(ofs >> this->chip_shift); ++ ++ /* Select the NAND chips */ ++ this->select_chip(mtd, chipnr); ++ } else ++ page = (int)ofs; ++ ++ if (this->options & NAND_BUSWIDTH_16) { ++ this->cmdfunc(mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, ++ page & this->pagemask); ++ bad = cpu_to_le16(this->read_word(mtd)); ++ if (this->badblockpos & 0x1) ++ bad >>= 1; ++ if ((bad & 0xFF) != 0xFF) ++ res = 1; ++ } else { ++ this->cmdfunc(mtd, NAND_CMD_READOOB, this->badblockpos, ++ page & this->pagemask); ++ if (this->read_byte(mtd) != 0xFF) ++ res = 1; ++ } ++ ++ return res; ++} ++ ++static int monahans_df_block_markbad(struct mtd_info *mtd, loff_t ofs) ++{ ++ struct nand_chip *this = NULL; ++ struct monahans_dfc_info *info = NULL; ++ unsigned char buf[2] = {0, 0}; ++ int block, reloc_block, page, ret; ++ ++ this = (struct nand_chip *)mtd->priv; ++ info = (struct monahans_dfc_info *)(this->priv); ++ /* Get block number */ ++ block = ((int)ofs) >> this->bbt_erase_shift; ++ ret = update_rel_table(mtd, block); ++ if (!ret) { ++ sync_rel_table(mtd, &(info->current_slot)); ++ return 0; ++ } else { ++ reloc_block = search_rel_block(block, mtd); ++ if (reloc_block) ++ block = reloc_block; ++ if (this->bbt) ++ this->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1); ++ } ++ ++ /* Do we have a flash based bad block table ? */ ++ if (this->options & NAND_USE_FLASH_BBT) ++ return nand_update_bbt(mtd, ofs); ++ ++ /* mark the bad block flag at the first two pages */ ++ page = block << (this->phys_erase_shift - this->page_shift); ++ ofs = mtd->writesize + this->badblockpos; ++ this->cmdfunc(mtd, NAND_CMD_SEQIN, ofs, page); ++ this->write_buf(mtd, buf, 2); ++ this->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); ++ page++; ++ this->cmdfunc(mtd, NAND_CMD_SEQIN, ofs, page); ++ this->write_buf(mtd, buf, 2); ++ this->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1); ++ return 0; ++} ++ ++static int dump_bbt_flash(struct mtd_info *mtd) ++{ ++ struct nand_chip *this = NULL; ++ struct monahans_dfc_info *info = NULL; ++ int block, page, totlen; ++ ++ this = (struct nand_chip *)mtd->priv; ++ info = (struct monahans_dfc_info *)this->priv; ++ block = (this->chipsize >> this->phys_erase_shift) - 1; ++ totlen = (this->chipsize >> this->phys_erase_shift) >> 2; ++ printk(KERN_ERR "totlen:0x%x\n", totlen); ++ this->select_chip(mtd, 0); ++ if (this->bbt_td) { ++ printk(KERN_ERR "BBT page:0x%x\n", this->bbt_td->pages[0]); ++ page = this->bbt_td->pages[0]; ++ if (this->bbt_td->pages[0] <= 0) { ++ page = block << (this->phys_erase_shift ++ - this->page_shift); ++ } ++ while (totlen > 0) { ++ printk(KERN_ERR "page:0x%x\n", page); ++ monahans_df_command(mtd, NAND_CMD_READ0, 0, page); ++ printk(KERN_ERR "read result:0x%x\n", info->retcode); ++ PRINT_BUF(info->data_buf, BUFLEN); ++ totlen -= (1 << this->page_shift); ++ page++; ++ } ++ } ++ if (this->bbt_md) { ++ printk(KERN_ERR "BBT page:0x%x\n", this->bbt_md->pages[0]); ++ page = this->bbt_md->pages[0]; ++ if (this->bbt_td->pages[0] <= 0) { ++ page = block << (this->phys_erase_shift ++ - this->page_shift); ++ } ++ while (totlen > 0) { ++ printk(KERN_ERR "page:0x%x\n", page); ++ monahans_df_command(mtd, NAND_CMD_READ0, 0, page); ++ printk(KERN_ERR "read result:0x%x\n", info->retcode); ++ PRINT_BUF(info->data_buf, BUFLEN); ++ totlen -= (1 << this->page_shift); ++ page++; ++ } ++ ++ } ++ return 0; ++} ++ ++static int dump_bbt_mem(struct mtd_info *mtd) ++{ ++ struct nand_chip *this = NULL; ++ ++ this = (struct nand_chip *)mtd->priv; ++ PRINT_BUF(this->bbt, 225); ++ return 0; ++} ++ ++static int monahans_df_scan_bbt(struct mtd_info *mtd) ++{ ++ struct nand_chip *this = NULL; ++ int ret; ++ ++ this = (struct nand_chip *)mtd->priv; ++ ret = read_reloc_table(mtd); ++ if (ret) { ++ printk(KERN_ERR "Failed to get relocation table\n"); ++ printk(KERN_ERR "Try to build a new BBT. It may result \ ++ unpredicated error.\n"); ++ /* Create new memory based and flash based BBT */ ++ } ++ nand_scan_bbt(mtd, &monahans_bbt_default); ++ //dump_bbt_flash(mtd); ++ dump_bbt_mem(mtd); ++ return 0; ++#if 0 ++ /* Read flashed based BBT from device */ ++ return (nand_scan_bbt(mtd, &monahans_bbt_main)); ++#endif ++} ++ ++ ++static int monahans_df_probe(struct platform_device *pdev) ++{ ++ struct nand_chip *this; ++ struct monahans_dfc_info *info; ++ int status = -1; ++ unsigned int data_buf_len; ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ unsigned int buf_len; ++#endif ++ int i, ret = 0; ++ ++ printk(KERN_ERR "Nand driver probe\n"); ++ ++ dfc_context.membase = ioremap_nocache(0x43100000, 0x100000); ++ if (!dfc_context.membase) ++ printk(KERN_ERR "Couldn't ioremap\n"); ++ ++ pxa_set_cken(CKEN_NAND, 1); ++ ++ for (i = DFC_FLASH_NULL + 1; i < DFC_FLASH_END; i++) ++ { ++ uint32_t id; ++ ++ status = dfc_init(&dfc_context, i); ++ if (status) ++ continue; ++ status = dfc_readid(&dfc_context, &id); ++ if (status) ++ continue; ++ printk(KERN_DEBUG "id:0x%x, chipid:0x%x\n", ++ id, dfc_context.flash_info->chip_id); ++ if (id == dfc_context.flash_info->chip_id) ++ break; ++ } ++ ++ if(i == DFC_FLASH_END) { ++ printk(KERN_ALERT "Monahans NAND device:" ++ "Nand Flash initialize failure!\n"); ++ ret = -ENXIO; ++ goto out; ++ } ++ flash_config = i; ++ ++ monahans_mtd = kzalloc(sizeof(struct mtd_info) + sizeof(struct nand_chip) + ++ sizeof(struct monahans_dfc_info) , GFP_KERNEL); ++ if (!monahans_mtd) { ++ printk (KERN_ERR "Monahans NAND device:" ++ "Unable to allocate NAND MTD device structure.\n"); ++ ret = -ENOMEM; ++ goto out; ++ } ++ ++ /* Get pointer to private data */ ++ this = (struct nand_chip *)((void *)monahans_mtd + sizeof(struct mtd_info)); ++ info = (struct monahans_dfc_info *)((void *)this + sizeof(struct nand_chip)); ++ dfc_context.mtd = monahans_mtd; ++ ++ monahans_mtd->priv = this; ++ this->priv = info; ++ data_buf_len = dfc_context.flash_info->page_size + ++ dfc_context.flash_info->oob_size; ++ info->state = STATE_READY; ++ init_completion(&info->cmd_complete); ++ info->table_init = 0; ++ memset(&info->table, 0x0, sizeof(struct reloc_table)); ++ printk(KERN_DEBUG "%s: this->controller: 0x%x, &this->controller: 0x%x\n",__func__, (unsigned int)this->controller, (unsigned int)&(this->controller)); ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ info->dma_mask = 0xffffffffUL; ++ ++ dev->dma_mask = &info->dma_mask; ++ dev->coherent_dma_mask = 0xffffffffUL; ++ ++ /* alloc dma data buffer for data ++ * buffer + 2*descriptor + command buffer ++ */ ++ buf_len = ALIGN(2*sizeof(struct pxa_dma_desc), 32) + ++ ALIGN(data_buf_len, 32) + ALIGN(NAND_CMD_DMA_LEN, 32); ++ ++ printk(KERN_INFO "Try to allocate dma buffer(len:%d)" ++ "for data buffer + 2*descriptor + command buffer\n", buf_len); ++ info->data_desc = (struct pxa_dma_desc*)dma_alloc_writecombine(dev, ++ buf_len, &info->data_desc_addr, GFP_KERNEL); ++ if (!info->data_desc) { ++ printk(KERN_ERR "Monahans NAND device:" ++ "Unable to alloc dma buffer\n"); ++ ret = -ENOMEM; ++ goto free_mtd; ++ } ++ ++ info->cmd_desc = (struct pxa_dma_desc*)((char *)info->data_desc + ++ sizeof(struct pxa_dma_desc)); ++ info->cmd_desc_addr = (dma_addr_t)((char *)info->data_desc_addr + ++ sizeof(struct pxa_dma_desc)); ++ info->data_buf = (char *)info->data_desc + ++ ALIGN(2*sizeof(struct pxa_dma_desc), 32); ++ info->data_buf_addr = (dma_addr_t)((char *)info->data_desc_addr + ++ ALIGN(2*sizeof(struct pxa_dma_desc), 32)); ++ info->cmd_buf = (char *)info->data_buf + ALIGN(data_buf_len, 32); ++ info->cmd_buf_addr = (dma_addr_t)((char *)info->data_buf_addr + ++ ALIGN(data_buf_len, 32)); ++ ++ D1(printk("Get dma buffer for data dma descriptor, virt:0x%x, phys0x:%x\n", ++ (unsigned int)info->data_desc, info->data_desc_addr)); ++ D1(printk("Get dma buffer for command dma descriptors, virt:0x%x," ++ "phys0x:%x\n", (unsigned int)info->cmd_desc, info->cmd_desc_addr)); ++ D1(printk("Get dma buffer for data, virt:0x%x, phys0x:%x\n", ++ (unsigned int)info->data_buf, info->data_buf_addr)); ++ D1(printk("Get dma buffer for command, virt:0x%x, phys0x:%x\n", ++ (unsigned int)info->cmd_buf, info->cmd_buf_addr)); ++ ++ D1(printk("Try to allocate dma channel for data\n")); ++ ++ info->data_dma = pxa_request_dma("NAND DATA", DMA_PRIO_LOW, ++ monahans_dfc_data_dma_irq, info); ++ if (info->data_dma < 0) { ++ printk(KERN_ERR "Monahans NAND device:" ++ "Unable to alloc dma channel for data\n"); ++ ret = info->data_dma; ++ goto free_buf; ++ } ++ D1(printk("Get dma channel:%d for data\n", info->data_dma)); ++ ++ D1(printk("Try to allocate dma channel for command\n")); ++ info->cmd_dma = pxa_request_dma("NAND CMD", DMA_PRIO_LOW, ++ monahans_dfc_cmd_dma_irq, info); ++ if (info->cmd_dma < 0) { ++ printk(KERN_ERR "Monahans NAND device:" ++ "Unable to alloc dma channel for command\n"); ++ ret = info->cmd_dma; ++ goto free_data_dma; ++ } ++ D1(printk("Get dma channel:%d for command\n", info->cmd_dma)); ++ ++ dfc_context.cmd_dma_ch = info->cmd_dma; ++ dfc_context.data_dma_ch = info->data_dma; ++#else ++ printk(KERN_DEBUG "Try to allocate data buffer(len:%d)\n", data_buf_len); ++ info->data_buf = kmalloc(data_buf_len, GFP_KERNEL); ++ if (!info->data_buf) { ++ printk(KERN_ERR "Monahans NAND device:" ++ "Unable to alloc data buffer\n"); ++ ret = -ENOMEM; ++ goto free_mtd; ++ } ++#endif ++ ++ D1(printk("Try to request irq:%d\n", IRQ_NAND)); ++ ret = request_irq(IRQ_NAND, monahans_dfc_irq, 0, pdev->name, info); ++ if (ret < 0) { ++ printk(KERN_ERR "Monahans NAND device: Unable to request irq\n"); ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ goto free_cmd_dma; ++#else ++ goto free_buf; ++#endif ++ } ++ ++ D1(printk("Success request irq\n")); ++ ++ /* set address of NAND IO lines */ ++ this->options = (dfc_context.flash_info->flash_width == 16)? \ ++ NAND_BUSWIDTH_16: 0 | NAND_USE_FLASH_BBT; ++ ++ /* this->IO_ADDR_R = this->IO_ADDR_W = NDDB */ ++ this->waitfunc = monahans_df_waitfunc; ++ this->select_chip = monahans_df_select_chip; ++ this->dev_ready = monahans_df_dev_ready; ++ this->cmdfunc = monahans_df_command; ++ this->read_word= monahans_df_read_word; ++ /*this->write_word= monahans_df_write_word;*/ ++ this->read_byte = monahans_df_read_byte; ++ this->read_buf = monahans_df_read_buf; ++ this->write_buf = monahans_df_write_buf; ++ this->verify_buf = monahans_df_verify_buf; ++ this->ecc.hwctl = monahans_df_enable_hwecc; ++ this->ecc.calculate = monahans_df_calculate_ecc; ++ this->ecc.correct = monahans_df_correct_data; ++ this->block_bad = monahans_df_block_bad; ++ this->block_markbad = monahans_df_block_markbad; ++ this->scan_bbt = monahans_df_scan_bbt; ++ this->chip_delay= 25; ++ this->bbt_td = &monahans_bbt_main; ++ this->bbt_md = &monahans_bbt_mirror; ++ ++ /* If the NAND flash is small block flash, only 512-byte pagesize ++ * is supported. ++ * Adjust parameters of BBT what is depended on large block nand ++ * flash or small block nand flash. ++ */ ++ if (dfc_context.flash_info->oob_size > 16) { ++ this->ecc.layout = &monahans_lb_nand_oob; ++ this->ecc.mode = NAND_ECC_HW; ++ this->ecc.size = 2048; ++ this->ecc.bytes = 24; ++ this->bbt_td->offs = 2; ++ this->bbt_td->veroffs = 6; ++ this->bbt_md->offs = 2; ++ this->bbt_md->veroffs = 6; ++ this->badblockpos = NAND_LARGE_BADBLOCK_POS; ++ monahans_bbt_default.offs = NAND_LARGE_BADBLOCK_POS; ++ monahans_bbt_default.len = 2; ++ /* when scan_bbt() is executed, bbt version can get */ ++ monahans_bbt_default.veroffs = 2; ++ } else { ++ this->ecc.layout = &monahans_sb_nand_oob; ++ this->ecc.mode = NAND_ECC_HW; ++ this->ecc.size = 512; ++ this->ecc.bytes = 6; ++ this->bbt_td->offs = 8; ++ this->bbt_td->veroffs = 12; ++ this->bbt_md->offs = 8; ++ this->bbt_md->veroffs = 12; ++ this->badblockpos = NAND_SMALL_BADBLOCK_POS; ++ monahans_bbt_default.offs = NAND_SMALL_BADBLOCK_POS; ++ monahans_bbt_default.len = 1; ++ monahans_bbt_default.veroffs = 8; ++ } ++ ++ info->context = &dfc_context; ++ /* TODO: allocate dma buffer and channel */ ++ ++ platform_set_drvdata(pdev, monahans_mtd); ++ ++ if (nand_scan(monahans_mtd, 1)) { ++ printk(KERN_ERR "Nand scan failed\n"); ++ ret = -ENXIO; ++ goto free_irq; ++ } ++ ++ /* There is a potential limitation that no more partition can be ++ * added between MassStorage and BBT(last block). ++ * ++ * The last 127 blocks is reserved for relocation table, they aren't ++ * statistical data of mtd size and chip size. ++ * ++ * BBT partitions contains 4 blocks. Two blocks are used to store ++ * main descriptor, the other two are used to store mirror descriptor. ++ */ ++ partition_info[PART_NUM - 1].size = (monahans_bbt_main.maxblocks ++ + monahans_bbt_mirror.maxblocks) ++ << this->phys_erase_shift; ++ partition_info[PART_NUM - 1].offset = this->chipsize ++ - partition_info[PART_NUM - 1].size; ++ partition_info[PART_NUM - 2].offset = partition_info[PART_NUM - 3].offset ++ + partition_info[PART_NUM - 3].size; ++ partition_info[PART_NUM - 2].size = this->chipsize ++ - partition_info[PART_NUM - 2].offset ++ - partition_info[PART_NUM - 1].size; ++ add_mtd_partitions(monahans_mtd, partition_info, PART_NUM); ++ ++#ifdef CONFIG_DVFM ++ dvfm_notifier.client_data = info; ++ mhn_fv_register_notifier(&dvfm_notifier); ++#endif ++ ++ return 0; ++ ++free_irq: ++ free_irq(IRQ_NAND, info); ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++free_cmd_dma: ++ pxa_free_dma(info->cmd_dma); ++free_data_dma: ++ pxa_free_dma(info->data_dma); ++free_buf: ++ dma_free_writecombine(dev, buf_len, info->data_desc, info->data_desc_addr); ++#else ++free_buf: ++ kfree(info->data_buf); ++#endif ++free_mtd: ++ kfree(monahans_mtd); ++out: ++ return ret; ++ ++} ++ ++static int __devexit monahans_df_remove(struct platform_device *dev) ++{ ++ struct mtd_info *mtd = (struct mtd_info *)platform_get_drvdata(dev); ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ unsigned int data_buf_len = dfc_context.flash_info->page_size + ++ dfc_context.flash_info->oob_size; ++ unsigned int buf_len = ALIGN(2*sizeof(struct pxa_dma_desc), 32) + ++ ALIGN(data_buf_len, 32) + ALIGN(NAND_CMD_DMA_LEN, 32); ++#endif ++ ++#ifdef CONFIG_DVFM ++ mhn_fv_unregister_notifier(&dvfm_notifier); ++#endif ++ ++ platform_set_drvdata(dev, NULL); ++ ++ del_mtd_device(mtd); ++ del_mtd_partitions(mtd); ++ free_irq(IRQ_NAND, info); ++#ifdef CONFIG_MTD_NAND_MONAHANS_DMA ++ pxa_free_dma(info->cmd_dma); ++ pxa_free_dma(info->data_dma); ++ dma_free_writecombine(dev, buf_len, info->data_desc, ++ info->data_desc_addr); ++#else ++ kfree(info->data_buf); ++#endif ++ kfree(mtd); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int monahans_df_suspend(struct platform_device *dev, pm_message_t state, u32 level) ++{ ++ struct mtd_info *mtd = (struct mtd_info *)platform_get_drvdata(dev); ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ ++ if( SUSPEND_DISABLE == level){ /*SUSPEND_NOTIFY*/ ++ if (info->state != STATE_READY) { ++ printk(KERN_ERR "current state is %d\n", info->state); ++ return -EAGAIN; ++ } ++ info->state = STATE_SUSPENDED; ++ /* ++ * The PM code need read the mobm from NAND. ++ * So the NAND clock can't be stop here. ++ * The PM code will cover this. ++ */ ++ /* pxa_set_cken(CKEN_NAND, 0); */ ++ } ++ return 0; ++} ++ ++static int monahans_df_resume(struct platform_device *dev, u32 level) ++{ ++ struct mtd_info *mtd = (struct mtd_info *)platform_get_drvdata(dev); ++ struct monahans_dfc_info *info = (struct monahans_dfc_info *) ++ (((struct nand_chip *)(mtd->priv))->priv); ++ int status; ++ ++ if(RESUME_ENABLE == level){ ++ if (info->state != STATE_SUSPENDED) ++ printk(KERN_WARNING "Error State after resume back\n"); ++ ++ info->state = STATE_READY; ++ ++ pxa_set_cken(CKEN_NAND, 1); ++ ++ status = dfc_init(&dfc_context, flash_config); ++ if (status) { ++ printk(KERN_ALERT "Monahans NAND device:" ++ "Nand Flash initialize failure!\n"); ++ return -ENXIO; ++ } ++ } ++ return 0; ++} ++#endif ++ ++#ifdef CONFIG_DVFM ++static int mhn_nand_dvfm_notifier(unsigned cmd, void *client_data, void *info) ++{ ++ struct monahans_dfc_info *dfc_info = ++ (struct monahans_dfc_info *)client_data; ++ ++ switch (cmd) { ++ case FV_NOTIFIER_QUERY_SET : ++ if (dfc_info->state != STATE_READY) ++ return -1; ++ break; ++ ++ case FV_NOTIFIER_PRE_SET : ++ break; ++ ++ case FV_NOTIFIER_POST_SET : ++ break; ++ } ++ ++ return 0; ++} ++#endif ++ ++static struct platform_driver monahans_df_driver = { ++ .probe = monahans_df_probe, ++ .remove = __devexit_p(monahans_df_remove), ++#ifdef CONFIG_PM ++ .suspend = monahans_df_suspend, ++ .resume = monahans_df_resume, ++#endif ++ .driver = { ++ .name = "monahans-nand-flash", ++ } ++}; ++ ++static void __exit monahans_df_cleanup(void) ++{ ++ printk(KERN_ERR "Nand driver registered\n"); ++ platform_driver_unregister(&monahans_df_driver); ++} ++ ++static int __init monahans_df_init(void) ++{ ++ return platform_driver_register(&monahans_df_driver); ++} ++ ++module_init(monahans_df_init); ++module_exit(monahans_df_cleanup); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Jingqing.xu (jingqing.xu@intel.com)"); ++MODULE_DESCRIPTION("Glue logic layer for NAND flash on monahans DFC"); ++ ++ +Index: linux-2.6.23/arch/arm/mach-pxa/zylonite.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/zylonite.c 2008-02-13 00:59:45.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/zylonite.c 2008-02-13 09:11:02.000000000 +0000 +@@ -29,6 +29,8 @@ + #include "generic.h" + + int gpio_backlight; ++int gpio_vsync; ++int gpio_vsync1; + int gpio_eth_irq; + + int lcd_id; +@@ -54,6 +56,16 @@ + .resource = smc91x_resources, + }; + ++static struct platform_device nand_device = { ++ .name = "monahans-nand-flash", ++ .id = -1, ++}; ++ ++static struct platform_device touch_device = { ++ .name = "pxa2xx-touch", ++ .id = -1, ++}; ++ + #if defined(CONFIG_FB_PXA) || (CONFIG_FB_PXA_MODULES) + static void zylonite_backlight_power(int on) + { +@@ -96,7 +108,7 @@ + }; + + static struct pxafb_mode_info sharp_ls037_modes[] = { +- [0] = { ++ [1] = { + .pixclock = 158000, + .xres = 240, + .yres = 320, +@@ -109,8 +121,8 @@ + .lower_margin = 3, + .sync = 0, + }, +- [1] = { +- .pixclock = 39700, ++ [0] = { ++ .pixclock = 45000, + .xres = 480, + .yres = 640, + .bpp = 16, +@@ -137,6 +149,11 @@ + /* backlight GPIO: output, default on */ + gpio_direction_output(gpio_backlight, 1); + ++ gpio_direction_output(gpio_vsync, 0); ++ gpio_direction_output(gpio_vsync1, 0); ++ ++ printk(KERN_ERR "LCD ID is %x\n", lcd_id); ++ + if (lcd_id & 0x20) { + set_pxa_fb_info(&zylonite_sharp_lcd_info); + return; +@@ -169,6 +186,8 @@ + smc91x_resources[1].start = gpio_to_irq(gpio_eth_irq); + smc91x_resources[1].end = gpio_to_irq(gpio_eth_irq); + platform_device_register(&smc91x_device); ++ platform_device_register(&nand_device); ++ platform_device_register(&touch_device); + + zylonite_init_lcd(); + } +Index: linux-2.6.23/arch/arm/mach-pxa/zylonite_pxa300.c +=================================================================== +--- linux-2.6.23.orig/arch/arm/mach-pxa/zylonite_pxa300.c 2008-02-13 00:59:45.000000000 +0000 ++++ linux-2.6.23/arch/arm/mach-pxa/zylonite_pxa300.c 2008-02-13 14:01:13.000000000 +0000 +@@ -62,12 +62,12 @@ + GPIO110_UART3_RXD, + + /* AC97 */ +- GPIO23_AC97_nACRESET, ++ /*GPIO23_AC97_nACRESET, + GPIO24_AC97_SYSCLK, + GPIO29_AC97_BITCLK, + GPIO25_AC97_SDATA_IN_0, + GPIO27_AC97_SDATA_OUT, +- GPIO28_AC97_SYNC, ++ GPIO28_AC97_SYNC,*/ + + /* Keypad */ + GPIO107_KP_DKIN_0, +@@ -104,6 +104,41 @@ + /* Ethernet */ + GPIO2_nCS3, + GPIO99_GPIO, ++ ++ /* NAND */ ++ MFP_CFG_X(DF_INT_RnB, AF0, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nRE_nOE, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nWE, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_CLE_nOE, AF0, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nADV1_ALE, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nCS0, AF1, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_nCS1, AF0, DS10X, PULL_LOW), ++ MFP_CFG_X(DF_IO0, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO1, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO2, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO3, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO4, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO5, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO6, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO7, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO8, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO9, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO10, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO11, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO12, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO13, AF1, DS08X, PULL_LOW), ++ MFP_CFG_X(DF_IO14, AF1, DS08X, PULL_LOW), ++ ++ /* AC97 */ ++ MFP_CFG_X(GPIO23, AF1, DS03X, PULL_LOW), ++ MFP_CFG_X(GPIO27, AF1, DS03X, PULL_LOW), ++ MFP_CFG_X(GPIO28, AF1, DS03X, PULL_LOW), ++ MFP_CFG_X(GPIO29, AF1, DS03X, PULL_LOW), ++ MFP_CFG_X(GPIO25, AF1, DS03X, PULL_LOW), ++ ++ MFP_CFG_X(GPIO26, AF0, DS01X, PULL_LOW), /* Interrupt */ ++ MFP_CFG_X(GPIO24, AF0, DS03X, PULL_LOW), /*SYSCLK external */ ++ MFP_CFG_X(GPIO11, AF0, DS01X, PULL_LOW), + }; + + static mfp_cfg_t pxa310_mfp_cfg[] __initdata = { +@@ -163,6 +198,9 @@ + pxa3xx_mfp_write(lcd_detect_pins[i], mfpr_save[i]); + } + ++extern int gpio_vsync; ++extern int gpio_vsync1; ++ + void __init zylonite_pxa300_init(void) + { + if (cpu_is_pxa300() || cpu_is_pxa310()) { +@@ -174,6 +212,8 @@ + + /* GPIO pin assignment */ + gpio_backlight = mfp_to_gpio(MFP_PIN_GPIO20); ++ gpio_vsync = mfp_to_gpio(GPIO76_LCD_VSYNC); ++ gpio_vsync1 = mfp_to_gpio(GPIO71_LCD_LDD_17); + } + + if (cpu_is_pxa300()) { +Index: linux-2.6.23/drivers/video/pxafb.c +=================================================================== +--- linux-2.6.23.orig/drivers/video/pxafb.c 2008-02-13 00:59:45.000000000 +0000 ++++ linux-2.6.23/drivers/video/pxafb.c 2008-02-13 00:59:45.000000000 +0000 +@@ -1543,9 +1543,9 @@ + if (inf->lccr0 & LCCR0_INVALID_CONFIG_MASK) + dev_warn(&dev->dev, "machine LCCR0 setting contains illegal bits: %08x\n", + inf->lccr0 & LCCR0_INVALID_CONFIG_MASK); +- if (inf->lccr3 & LCCR3_INVALID_CONFIG_MASK) +- dev_warn(&dev->dev, "machine LCCR3 setting contains illegal bits: %08x\n", +- inf->lccr3 & LCCR3_INVALID_CONFIG_MASK); ++ //if (inf->lccr3 & LCCR3_INVALID_CONFIG_MASK) ++ // dev_warn(&dev->dev, "machine LCCR3 setting contains illegal bits: %08x\n", ++ // inf->lccr3 & LCCR3_INVALID_CONFIG_MASK); + if (inf->lccr0 & LCCR0_DPD && + ((inf->lccr0 & LCCR0_PAS) != LCCR0_Pas || + (inf->lccr0 & LCCR0_SDS) != LCCR0_Sngl || +Index: linux-2.6.23/include/asm-arm/arch-pxa/mfp-pxa300.h +=================================================================== +--- linux-2.6.23.orig/include/asm-arm/arch-pxa/mfp-pxa300.h 2008-02-13 00:59:45.000000000 +0000 ++++ linux-2.6.23/include/asm-arm/arch-pxa/mfp-pxa300.h 2008-02-13 00:59:45.000000000 +0000 +@@ -175,13 +175,13 @@ + #define GPIO68_LCD_LDD_14 MFP_CFG_DRV(GPIO68, AF1, DS01X) + #define GPIO69_LCD_LDD_15 MFP_CFG_DRV(GPIO69, AF1, DS01X) + #define GPIO70_LCD_LDD_16 MFP_CFG_DRV(GPIO70, AF1, DS01X) +-#define GPIO71_LCD_LDD_17 MFP_CFG_DRV(GPIO71, AF1, DS01X) ++#define GPIO71_LCD_LDD_17 MFP_CFG_DRV(GPIO71, AF0, DS01X) + #define GPIO62_LCD_CS_N MFP_CFG_DRV(GPIO62, AF2, DS01X) + #define GPIO72_LCD_FCLK MFP_CFG_DRV(GPIO72, AF1, DS01X) + #define GPIO73_LCD_LCLK MFP_CFG_DRV(GPIO73, AF1, DS01X) + #define GPIO74_LCD_PCLK MFP_CFG_DRV(GPIO74, AF1, DS01X) + #define GPIO75_LCD_BIAS MFP_CFG_DRV(GPIO75, AF1, DS01X) +-#define GPIO76_LCD_VSYNC MFP_CFG_DRV(GPIO76, AF2, DS01X) ++#define GPIO76_LCD_VSYNC MFP_CFG_DRV(GPIO76, AF0, DS01X) + + #define GPIO15_LCD_CS_N MFP_CFG_DRV(GPIO15, AF2, DS01X) + #define GPIO127_LCD_CS_N MFP_CFG_DRV(GPIO127, AF1, DS01X) diff --git a/packages/linux/linux-rp-2.6.26/zylonite_touch-r0.patch b/packages/linux/linux-rp-2.6.26/zylonite_touch-r0.patch new file mode 100644 index 0000000000..1c00696051 --- /dev/null +++ b/packages/linux/linux-rp-2.6.26/zylonite_touch-r0.patch @@ -0,0 +1,1548 @@ +Index: linux-2.6.23/drivers/input/touchscreen/Kconfig +=================================================================== +--- linux-2.6.23.orig/drivers/input/touchscreen/Kconfig 2008-02-13 01:12:29.000000000 +0000 ++++ linux-2.6.23/drivers/input/touchscreen/Kconfig 2008-02-13 01:13:20.000000000 +0000 +@@ -54,6 +54,12 @@ + To compile this driver as a module, choose M here: the + module will be called corgi_ts. + ++config TOUCHSCREEN_ZYLONITE ++ tristate "Zylonite touchscreen driver" ++ default y ++ help ++ Say Y here for the Zylonite touchscreen driver ++ + config TOUCHSCREEN_FUJITSU + tristate "Fujitsu serial touchscreen" + select SERIO +Index: linux-2.6.23/drivers/input/touchscreen/Makefile +=================================================================== +--- linux-2.6.23.orig/drivers/input/touchscreen/Makefile 2008-02-13 01:12:29.000000000 +0000 ++++ linux-2.6.23/drivers/input/touchscreen/Makefile 2008-02-13 01:13:38.000000000 +0000 +@@ -19,3 +19,4 @@ + obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o + obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o + obj-$(CONFIG_TOUCHSCREEN_TSC2101) += tsc2101_ts.o ++obj-$(CONFIG_TOUCHSCREEN_ZYLONITE) += zylonite-ts.o +Index: linux-2.6.23/drivers/input/touchscreen/zylonite-ts.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.23/drivers/input/touchscreen/zylonite-ts.c 2008-02-13 16:19:15.000000000 +0000 +@@ -0,0 +1,1517 @@ ++/* ++ * drivers/input/touchscreen/mhn_audio_touch.c. ++ * ++ * Author: bridge.wu@marvell.com ++ * Created: Nov 17, 2006 ++ * Copyright: Marvell Corporation. ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++//#include ++#include ++#include ++ ++//#include ++//#include ++ ++#define OSCC __REG(0x41350000) /* Oscillator Configuration Register */ ++#define AC97_DIV __REG(0x41340014) ++ ++#define ALSA_ZY_CARD_DEBUG ++#undef ALSA_ZY_CARD_DEBUG ++ ++#define WM_9713_ID 0x4C13 /* this should be the 7E register value */ ++ ++#ifdef ALSA_ZY_CARD_DEBUG ++#define dbg(format, arg...) printk(KERN_DEBUG format, ##arg) ++#else ++#define dbg(format, arg...) ++#endif ++ ++#define DEBUG ++#undef DEBUG ++#ifdef DEBUG ++unsigned int start_time; ++unsigned int end_time; ++unsigned int time; ++#define PRINT_TIME() do {\ ++ time = ((end_time > start_time))?\ ++ (end_time - start_time)*100/325:\ ++ (0xffffffff - start_time + end_time)*100/325;\ ++ printk("\n%s:%dus\n", __FUNCTION__, time);\ ++} while(0) ++#endif ++ ++ ++ ++ ++/* 9713 specific ++ * Register Name Index ++ */ ++#define RESET 0X00 ++#define SPEAKER_VOLUME 0X02 ++#define HEADPHONE_VOLUME 0X04 ++#define OUT3_OUT4_VOLUME 0X06 ++#define MONOVOL_MONOINPGA_ROUTE 0X08 ++#define LINE_IN_PGA_VOL_ROUTE 0X0A ++#define DAC_PGA_VOL_ROUTE 0X0C ++#define MIC_PGA_VOLUME 0X0E ++#define MIC_ROUTING 0X10 ++#define REC_PGA_VOL 0X12 ++#define REC_ROUTE_MUX_SEL 0X14 ++#define PCBEEP_VOL_ROUTE 0X16 ++#define VXDAC_VOLUME_ROUTE 0X18 ++#define AUX_DAC_VOL_ROUTE 0X1A ++#define OUTPUT_PGA_MUX 0X1C ++#define DAC_3D_CTRL_INV_MUX_SEL 0X1E ++#define DAC_TONE_CTRL 0X20 ++#define MIC_BIAS 0X22 ++#define OUTPUT_VOL_MAPPING_JACK 0X24 ++#define POWERDOWN_CTRL_STAT 0X26 ++#define EXTENDED_AUD_ID 0X28 ++#define EXTENDED_AUD_STAT_CTRL 0X2A ++#define AUDIO_DAC_RATE 0X2C ++#define AUX_DAC_RATE 0X2E ++#define AUDIO_ADC_RATE 0X32 ++#define PCM_CODEC_CTRL 0X36 ++#define SPDIF_CTRL 0X3A ++#define POWER_DOWN_1 0X3C ++#define POWER_DOWN_2 0X3E ++#define GENERAL_PURPOSE_WM_13 0X40 ++#define FAST_POWERUP_CTRL 0X42 ++#define MCLK_PLL_CTRL_1 0X44 ++#define MCLK_PLL_CTRL_2 0X46 ++#define GPIO_PIN_CFG 0X4C ++#define GPIO_PIN_POL_TYPE 0X4E ++#define GPIO_PIN_STICKY 0X50 ++#define GPIO_PIN_WAKEUP 0X52 ++#define GPIO_PIN_STATUS 0X54 ++#define GPIO_PIN_SHARING 0X56 ++#define GPIO_PULL_UP_DOWN_CTRL 0X58 ++#define ADD_FUNC_1 0X5A ++#define ADD_FUNC_2 0X5C ++#define ALC_CTRL 0X60 ++#define ALC_NOISE_GATE_CTRL 0X62 ++#define AUX_DAC_INPUT_CTRL 0X64 ++#define TEST_REG_1 0X68 ++#define TEST_REG_2 0X6A ++#define TEST_REG_3 0X6C ++#define TEST_REG_4 0X6E ++#define DIGITIZER_1_WM13 0x74 ++#define DIGITIZER_2_WM13 0x76 ++#define DIGITIZER_3_WM13 0x78 ++#define DIGITIZER_READ_BACK 0x7a ++#define VENDOR_ID1 0x7c ++#define VENDOR_ID2 0x7e ++ ++#define ZY_TOUCH_SAMPLE_X 1 ++#define ZY_TOUCH_SAMPLE_Y 2 ++ ++#define ZY_EVENT_TYPE_NONE 0 ++#define ZY_EVENT_TYPE_PDN 1 ++ ++ ++typedef enum _zy_acodec_error_t { ++ ZY_ACODEC_SUCCESS = 0, /* successful completion of a function */ ++ ZY_ACODEC_GENERAL_SW_ERR, /* null pointer to registers or other software error */ ++ ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT, /* time-out for waiting for respponse */ ++ ZY_ACODEC_SAMPLERATE_NOT_SUPPORTED, /* the sample rate is not supported either in controller or codec */ ++ ZY_ACODEC_FEATURE_NO_SUPPORTED, /* this codec feature is not supported */ ++ ZY_ACODEC_GENERAL_HW_ERR ,/* other hardware error besides time out */ ++ ZY_ACODEC_ROUTE_NO_SUPPORTED, /* the codec can not set the route required */ ++ ZY_ACODEC_SLEEP /* the codec is sleep */ ++} zy_acodec_error_t; ++ ++typedef unsigned int zy_acodec_device_id_t; ++ ++typedef enum _codec_state { ++ ZY_CODEC_SLEEP = 0, ++ ZY_CODEC_WAKEUP = 1 ++} acodec_state_t; ++ ++typedef enum { ++ ZY_FM = 0, ++ ZY_MIC1 = 1, ++ ZY_MIC2 = 2, ++ ZY_SPEAKER =3, ++ ZY_HEADSET =4, ++ ZY_HANDSET =5, ++} vol_port_type_t; ++ ++typedef struct _context_t { ++ int use_count; /* probe/remove and suspend/resume usage count, sync among multiple devices */ ++ zy_acodec_device_id_t acodec_id;/* - an ID that uniquely identifies the codec to be used */ ++ unsigned long init_number; /* used by driver to track whether it is inited or not */ ++ ++ void *p_voice_reg; /* pointer to Monahans registers that has PCM interface to codec */ ++ void *p_hifi_reg; /* pointer to Monahans registers that has hifi interface to codec */ ++ void *p_ctrl_reg; /* pointer to Monahans registers that has control interface to codec */ ++ int *p_ost_regs; /* needed for time out */ ++ void *p_save_memory; /* pointer to a memory region to save context while suspend */ ++ void *p_zy_scenario; /* pointer to the scenario data structure */ ++ long u_max_read_write_time_out_ms;/* input the max time to wait in milliseconds before giving up on a read or write operation */ ++ long u_max_setup_time_out_ms; /* input the maximum time in milliseconds to wait during initial setup of the ACODEC controller and codec */ ++ ++ /* member functions these pointers must be set by */ ++ zy_acodec_error_t (* g_pfn_codec_specific_init) (struct _context_t *p_device_context); ++ zy_acodec_error_t (* g_pfn_codec_specific_dinit) (struct _context_t *p_device_context); ++ zy_acodec_error_t (* g_pfn_acodec_read) (struct _context_t *p_dev_context, unsigned short reg_addr, unsigned short *p_reg_value); ++ zy_acodec_error_t (* g_pfn_acodec_write) (struct _context_t *p_dev_context, unsigned short reg_addr, unsigned short reg_value); ++ ++ /* add for route */ ++ zy_acodec_error_t (* g_pfn_set_route) (struct _context_t *p_device_context, unsigned short * rout_map ,unsigned short* current_map); ++ /* add for sleep the codec */ ++ zy_acodec_error_t (* g_pfn_sleep_codec) (struct _context_t *p_device_context); ++ /* add for Wake up the codec */ ++ zy_acodec_error_t (* g_pfn_wake_codec) (struct _context_t *p_device_context); ++ /* add for get codec state */ ++ zy_acodec_error_t (* g_pfn_get_state) (struct _context_t *p_device_context, acodec_state_t *p_state); ++ /* add for volume */ ++ zy_acodec_error_t (* g_pfn_get_vol)(struct _context_t *p_device_context, vol_port_type_t port, unsigned short *gain_in_db); ++ zy_acodec_error_t (* g_pfn_set_vol)(struct _context_t *p_device_context, vol_port_type_t port, unsigned short gain_in_db); ++ ++ void (* g_pfn_get_event)(struct _context_t *p_device_context, unsigned char * event_type); ++ void (* g_pfn_event_ack)(struct _context_t *p_device_context, unsigned char event_type); ++ zy_acodec_error_t (* g_pfn_enable_touch)(struct _context_t *p_device_context); ++ zy_acodec_error_t (* g_pfn_disable_touch)(struct _context_t *p_device_context); ++} zy_acocec_context_t, *p_zy_acocec_context_t; ++ ++ ++ ++ ++ ++static p_zy_acocec_context_t p_zy_codec_ctxt = NULL; ++ ++#include ++//#include ++ ++#define PEN_DOWN 1 ++#define PEN_UP 0 ++#define TS_SAMPLE_INTERVAL 1 ++ ++typedef struct { ++ struct input_dev *idev; ++ struct timer_list *timer; ++ int use_count; ++} codec_zy_ts_t; ++ ++codec_zy_ts_t codec_zy_ts; ++ ++static struct input_dev *codec_zy_ts_input; ++ ++#ifdef CONFIG_PM ++static volatile int touch_suspend = 0 ; ++#endif ++ ++#define ZY_AC97_CODEC_REGS_NUM 0x40 ++ ++typedef struct ++{ // Register symbol // Usage ++ volatile unsigned long pocr; // PCM Out Control Register ++ volatile unsigned long picr; // PCM In Control Register ++ volatile unsigned long mccr; // Mic In Control Register ++ volatile unsigned long gcr; // Global Control Register ++ volatile unsigned long posr; // PCM Out Status Register ++ volatile unsigned long pisr; // PCM In Status Register ++ volatile unsigned long mcsr; // Mic In Status Register ++ volatile unsigned long gsr; // Global Status Register ++ volatile unsigned long car; // CODEC Access Register ++ volatile unsigned long pcscr; // PCM Surround Out Control ++ volatile unsigned long pcssr; // PCM Surround Out Status ++ volatile unsigned long pcsdr; // PCM Surround Out Data ++ volatile unsigned long pcclcr; // PCM Center/LFE Out Control ++ volatile unsigned long pcclsr; // PCM Center/LFE Out Status ++ volatile unsigned long pccldr; // PCM Center/LFE Out Data ++ volatile unsigned long reserved1; // ++ volatile unsigned long pcdr; // PCM FIFO Data Register ++ volatile unsigned long reserved2 [0x7]; // 0x4050-0044 through 0x4050-005C ++ volatile unsigned long mcdr; // Mic-in FIFO Data Register ++ volatile unsigned long reserved3 [0x27]; // 0x4050-0064 through 0x4050-00FC ++ volatile unsigned long mocr; // MODEM Out Control Register ++ volatile unsigned long reserved4; ++ volatile unsigned long micr; // MODEM In Control Register ++ volatile unsigned long reserved5; ++ volatile unsigned long mosr; // MODEM Out Status Register ++ volatile unsigned long reserved6; ++ volatile unsigned long misr; // MODEM In Status Register ++ volatile unsigned long reserved7 [0x9]; // 0x4050-011C through 0x4050-013C ++ volatile unsigned long modr; // MODEM FIFO Data Register ++ volatile unsigned long reserved8 [0x2F]; // 0x4050-0144 through 0x4050-01FC ++ // Primary Audio CODEC registers access ++ volatile unsigned long codec_regs_primary_aud [ZY_AC97_CODEC_REGS_NUM]; ++ // Secondary ID 01 Audio CODEC registers access ++ volatile unsigned long codec_regs_secondary_aud [ZY_AC97_CODEC_REGS_NUM]; ++ // Primary MODEM CODEC registers access ++ volatile unsigned long codec_regs_primary_mdm [ZY_AC97_CODEC_REGS_NUM]; ++ // Secondary ID 01 MODEM CODEC registers access ++ volatile unsigned long codec_regs_secondary_mdm [ZY_AC97_CODEC_REGS_NUM]; ++ // Secondary ID 10 MODEM CODEC registers access ++ volatile unsigned long codec_regs_third_mdm [ZY_AC97_CODEC_REGS_NUM]; ++ // Secondary ID 11 MODEM CODEC registers access ++ volatile unsigned long codec_regs_fouth_mdm [ZY_AC97_CODEC_REGS_NUM]; ++ // Secondary ID 10 Audio CODEC registers access ++ volatile unsigned long codec_regs_third_aud [ZY_AC97_CODEC_REGS_NUM]; ++ // Secondary ID 11 Audio CODEC registers access ++ volatile unsigned long codec_regs_fouth_aud [ZY_AC97_CODEC_REGS_NUM]; ++} zy_ac97_acodec_t, *p_zy_ac97acodec_t ; ++ ++ ++/* Constants for the Global Control Register and Global Status Register */ ++ ++// AC97 Global Control Register bit mask constants ++ ++#define ZY_AC97_GCR_GIE_MSK (1u << 0 ) ++#define ZY_AC97_GCR_COLD_RESET_MSK (1u << 1 ) ++#define ZY_AC97_GCR_WARM_RESET_MSK (1u << 2 ) ++#define ZY_AC97_GCR_LINK_OFF_MSK (1u << 3 ) ++#define ZY_AC97_GCR_PCRSM_IEN_MSK (1u << 4 ) ++#define ZY_AC97_GCR_SCRSM_IEN_MSK (1u << 5 ) ++#define ZY_AC97_GCR_PCRDY_IEN_MSK (1u << 8 ) ++#define ZY_AC97_GCR_SCRDY_IEN_MSK (1u << 9 ) ++#define ZY_AC97_GCR_SDONE_IE_MSK (1u << 18) ++#define ZY_AC97_GCR_CDONE_IE_MSK (1u << 19) ++#define ZY_AC97_GCR_nDMAEN_MSK (1u << 24) ++#define ZY_AC97_GCR_CLKBPB_MSK (1u << 31) ++#define ZY_AC97_GCR_FRCRST_MSK (1u << 30) ++// Global Status Register bit mask constants ++ ++#define ZY_AC97_GSR_GSCI_MSK (1u << 0 ) ++#define ZY_AC97_GSR_MIINT_MSK (1u << 1 ) ++#define ZY_AC97_GSR_MOINT_MSK (1u << 2 ) ++#define ZY_AC97_GSR_ACOFFD_MSK (1u << 3 ) ++#define ZY_AC97_GSR_PIINT_MSK (1u << 5 ) ++#define ZY_AC97_GSR_POINT_MSK (1u << 6 ) ++#define ZY_AC97_GSR_MINT_MSK (1u << 7 ) ++#define ZY_AC97_GSR_PCRDY_MSK (1u << 8 ) ++#define ZY_AC97_GSR_SCRDY_MSK (1u << 9 ) ++#define ZY_AC97_GSR_PCRSM_MSK (1u << 10) ++#define ZY_AC97_GSR_SCRSM_MSK (1u << 11) ++#define ZY_AC97_GSR_SLT12_BITS_MSK (7u << 12) ++#define ZY_AC97_GSR_RCS_ERR_MSK (1u << 15) ++#define ZY_AC97_GSR_SDONE_MSK (1u << 18) ++#define ZY_AC97_GSR_CDONE_MSK (1u << 19) ++ ++ ++// Bit mask and values for CAIP bit in car register. ++#define ZY_AC97_CAR_CAIP_MSK (0x1<<0) ++#define ZY_AC97_CAR_CAIP_LOCKED (0x1<<0) ++#define ZY_AC97_CAR_CAIP_CLEAR (0<<0) ++ ++/* Constants for FIFO status reporting and control */ ++ ++// One bit location is used to report FIFO error conditions and clear ++// interrupts on those conditions in the various non-global status registers. ++ ++// ZY_AC97_FIFOSTAT_FIFOE is used in: ++ // posr ++ // pisr ++ // mcsr ++ // mosr ++ // misr ++ ++#define ZY_AC97_FIFOSTAT_FIFOE (1u << 4) ++#define ZY_AC97_FIFOSTAT_EOC (1u << 3) ++#define ZY_AC97_FIFOSTAT_FSR (1u << 2) ++ ++// A different bit location is used to enable or disable interrupts based on ++// FIFO error conditions in the various non-global control registers. ++ ++// ZY_AC97_FIFOCTRL_FEIE is used in: ++ // pocr ++ // picr ++ // mccr ++ // mocr ++ // micr ++ ++#define ZY_AC97_FIFOCTRL_FEIE (1u << 3) ++#define ZY_AC97_FIFOCTRL_FSRIE (1u << 1) ++ ++/* ++******************************************************************************* ++ AC'97 Codec Registers Location and Bit Definition ++******************************************************************************* ++*/ ++ ++/* */ ++ ++ // Includes symbolic values for certain proprietary register asssignments ++ // in AC'97 devices that might be used with ZY_AC97. ++ ++ // Valid for subset of R 2.1 specification. ++ // Leading "e" in comment means it is an "expanded" register definition as ++ // found in one or more of the Appendices A-D of the R 2.1 specification. ++ // Appendix identifier will immediately follow the "e", such as "eA" ++ // R/O indicates read-only ++ // Registers not supported by the assumed controller will be commented out. ++ ++#define ZY_AC97_CR_RESET_ID 0x00 // RESET CODEC TO DEFAULT, get ID info ++#define ZY_AC97_CR_MASTER_VOLUME 0x02 // LINE OUT VOLUME ++#define ZY_AC97_CR_HEADPHONE_VOLUME 0x04 // ++#define ZY_AC97_CR_MASTER_VOLUME_MONO 0x06 // ++#define ZY_AC97_CR_MASTER_TONE_R_L 0x08 // ++#define ZY_AC97_CR_PC_BEEP_VOLUME 0x0A // ++#define ZY_AC97_CR_PHONE_VOLUME 0x0C // ++#define ZY_AC97_CR_MIC_VOLUME 0x0E // micrOPHONE VOLUME/ AGC ++#define ZY_AC97_CR_LINE_IN_VOLUME 0x10 // LINE IN VOLUME ++#define ZY_AC97_CR_CD_VOLUME 0x12 // ++#define ZY_AC97_CR_VIDEO_VOLUME 0x14 // ++#define ZY_AC97_CR_AUX_VOLUME 0x16 // ++#define ZY_AC97_CR_PCM_OUT_VOLUME 0x18 // ++#define ZY_AC97_CR_RECORD_SELECT 0x1A // SELECT LINE IN OR micrOPHONE ++#define ZY_AC97_CR_RECORD_GAIN 0x1C // ++#define ZY_AC97_CR_RECORD_GAIN_MIC 0x1E // ++#define ZY_AC97_CR_GENERAL_PURPOSE 0x20 // ++#define ZY_AC97_CR_CONTROL_3D 0x22 // ++#define ZY_AC97_CR_POWERDOWN_CTRL_STAT 0x26 // POWER MANAGEMENT ++#define ZY_AC97_CR_E_AUDIO_ID 0x28 // eA Extended audio sprt info, R/O ++#define ZY_AC97_CR_E_AUDIO_CTRL_STAT 0x2A // eA Extended audio stat + control ++ ++// ++// Audio Sample Rate Control Registers, 0x2C - 0x34 ++// ++ // eA PCM Front DAC rate control ++#define ZY_AC97_CR_E_ASR_PCM_FRNT_DAC_RT 0x2C // (output slots 3, 4, 6) ++#define ZY_AC97_CR_E_ASR_PCM_LR_ADC_RT 0x32 // eA PCM L+R ADC rate control (3+4) ++#define ZY_AC97_CR_E_ASR_MIC_ADC_RT 0x34 // eA PCM Mic ADC rate control (5) ++ ++ ++#define ZY_AC97_CR_E_MDM_GPIO_PIN_STAT 0x54 ++// ++// 5Ah-7Ah: Vendor Reserved ++// ++// ++// 7Ch-7Eh: Vendor ID registers. Optional but standardized for Plug'n'Play ++// ++#define ZY_AC97_CR_VENDOR_ID1 0x7C ++#define ZY_AC97_CR_VENDOR_ID2 0x7E ++ ++#define ZY_AC97_CR_MAX ZY_AC97_CR_VENDOR_ID2 ++ ++#define ZY_AC97_CR_END_OF_LIST (ZY_AC97_CR_MAX + 2) ++ ++ ++ ++/* Other Constants */ ++ ++// For accessing the Codec mixer registers, each increment of one 32-bit word ++// in processor space increments the addressed mixer register by two. ++// This does not cause any ambiguities because only even mixer register ++// addresses are currently supported (AC '97 spec, R 2.2) ++#define ZY_AC97_CODEC_REGS_PER_WORD 2 ++ ++/* Default timeout and holdtime settings */ ++ ++// timeout in reading and writing codec registers through AC link ++#define ZY_AC97_RW_TIMEOUT_DEF 200 //unit is us ++ ++// timeout in waiting for codec's ready signal during setup process ++#define ZY_AC97_SETUP_TIMEOUT_DEF 500 //unit is us ++ ++// timeout in waiting for locking the link successfully ++#define ZY_AC97_LOCK_TIMEOUT_DEF 300 //unit is us ++ ++// timeout in shutting down the link ++#define ZY_AC97_LINKOFF_TIMEOUT_DEF 500 //unit is us ++ ++// holdtime for keeping nReset signal active(low) in AC link ++#define ZY_AC97_COLD_HOLDTIME 100 //unit is us ++ ++/* ++******************************************************************************* ++ ZY AC97 data structure used in function interface ++******************************************************************************* ++*/ ++ ++typedef struct ++{ ++ unsigned long pocr; // PCM Out Control Register ++ unsigned long picr; // PCM In Control Register ++ unsigned long mccr; // Mic In Control Register ++ unsigned long gcr; // Global Control Register ++ unsigned long pcscr; // PCM Surround Out Control ++ unsigned long pcclcr; // PCM Center/LFE Out Control ++ unsigned long mocr; // MODEM Out Control Register ++ unsigned long micr; // MODEM In Control Register ++}zy_ac97_save_context_t; ++ ++ ++#define AC97_SAVE_CONTEXT_SIZE (sizeof(zy_ac97_save_context_t)) ++ ++static int zy_ac97_acodec_link_lock(p_zy_ac97acodec_t p_ac97_reg) ++{ ++ int status = 1; ++ volatile unsigned long car_tmp; ++ ++ car_tmp = p_ac97_reg->car; ++ if (car_tmp & ZY_AC97_CAR_CAIP_MSK) /* "1" in CAIP bit means lock failed. */ ++ { ++ status = 0; ++ } ++ return (status); ++} ++ ++ ++zy_acodec_error_t zy_ac97_acodec_write (zy_acocec_context_t *p_dev_context, unsigned short offset, unsigned short data) ++{ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ int got_link; ++ unsigned long time_remaining; ++ volatile unsigned long * p_codec_reg; ++ p_zy_ac97acodec_t p_ac97_reg = (p_zy_ac97acodec_t)(p_dev_context->p_ctrl_reg); ++ unsigned long max_rw_time_out_us = (p_dev_context->u_max_read_write_time_out_ms) * 1000; ++ ++ ++ if(offset == ZY_AC97_CR_E_MDM_GPIO_PIN_STAT) ++ {/* it is a special register and sent out on slot 12 */ ++ p_codec_reg = &(p_ac97_reg->codec_regs_primary_mdm[0]); ++ p_codec_reg += offset / ZY_AC97_CODEC_REGS_PER_WORD; ++ /* The data will be sent out on slot 12. */ ++ *p_codec_reg = (unsigned long)data; ++ goto done; ++ } ++ ++ /* Point to specified register within area mapped to target codec regs */ ++ p_codec_reg = &(p_ac97_reg->codec_regs_primary_aud[0]); ++ p_codec_reg += offset / ZY_AC97_CODEC_REGS_PER_WORD; ++ ++ ++ /* Lock the ACLINK */ ++ time_remaining = ZY_AC97_LOCK_TIMEOUT_DEF; ++ do ++ { ++ got_link = zy_ac97_acodec_link_lock(p_ac97_reg); ++ if (0 == got_link) /* 1 usec is a long time. Skip delay if possible. */ ++ { ++ udelay(1); ++ } ++ } /* Wait while time remaining and ACLINK not available */ ++ while (time_remaining-- && (0 == got_link)); ++ ++ if (0 == got_link) /* Didn't get the ACLINK */ ++ { ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ printk(KERN_ERR "AC97 Write Link Timeout\n"); ++ } ++ else /* We got the link. Perform the write operation and don't wait. */ ++ { ++ /* First, clear old write status indication CDONE by writing a ONE to that bit. */ ++ p_ac97_reg->gsr = ZY_AC97_GSR_CDONE_MSK; ++ ++ *p_codec_reg = (unsigned long)data; /* Now the write! */ ++ ++ /* Wait until write cycle is complete. There should be a way ++ * to do this speculatively at the beginning of the procedure. ++ * Need to discover it. Too inefficient to always wait. ++ */ ++ ++ time_remaining = max_rw_time_out_us; ++ do ++ { ++ udelay(1); ++ } /* Wait while time remaining and command I/O still incomplete. */ ++ while ( (time_remaining--) && !(p_ac97_reg->gsr & ZY_AC97_GSR_CDONE_MSK)); ++ if (!(p_ac97_reg->gsr & ZY_AC97_GSR_CDONE_MSK)) ++ { ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ p_ac97_reg->car = ZY_AC97_CAR_CAIP_CLEAR; ++ } ++ } /* Got AC link */ ++ ++done: ++ return(status); ++} /* Ac97CtrlCodecWrite() */ ++ ++#define CKENA __REG(0x4134000C) /* A Clock Enable Register */ ++#define CKENB __REG(0x41340010) ++ ++zy_acodec_error_t zy_ac97_acodec_read (zy_acocec_context_t *p_dev_context, unsigned short offset, unsigned short *pdata) ++{ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ int got_link; ++ unsigned long time_remaining; ++ volatile unsigned long * p_codec_reg; ++ p_zy_ac97acodec_t p_ac97_reg = (p_zy_ac97acodec_t)(p_dev_context->p_ctrl_reg); ++ unsigned long max_rw_time_out_us = (p_dev_context->u_max_read_write_time_out_ms) * 1000; ++ ++ /* Point to specified register within area mapped to target codec regs */ ++ p_codec_reg = &(p_ac97_reg->codec_regs_primary_aud[0]); ++ p_codec_reg += offset / ZY_AC97_CODEC_REGS_PER_WORD; ++ ++ /* Lock the ACLINK */ ++ time_remaining = ZY_AC97_LOCK_TIMEOUT_DEF; ++ do ++ { ++ got_link = zy_ac97_acodec_link_lock(p_ac97_reg); ++ if (0 == got_link) /* 1 usec is a long time. Skip delay if possible. */ ++ { ++ udelay(1); ++ } ++ } /* Wait while time remaining and ACLINK not available */ ++ while (time_remaining-- && (0 == got_link)); ++ ++ if (0 == got_link) /* Didn't get the ACLINK */ ++ { ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ printk(KERN_ERR "AC97 Read Link Timeout\n"); ++ } ++ else /* We got the link. Perform the write operation and don't wait. */ ++ { ++ /* First, clear old read status indications. */ ++ p_ac97_reg->gsr = ZY_AC97_GSR_SDONE_MSK | ZY_AC97_GSR_RCS_ERR_MSK; ++ ++ *pdata = (unsigned short)(*p_codec_reg); /* This is THE DUMMY READ. */ ++ ++ /* Wait for read I/O with codec to complete before doing real read. */ ++ time_remaining = max_rw_time_out_us; ++ do ++ { ++ udelay(1); ++ } /* Wait while time remaining and read I/O still incomplete */ ++ while( (time_remaining--) && (!(p_ac97_reg->gsr & ZY_AC97_GSR_SDONE_MSK)) ); ++ ++ if ((p_ac97_reg->gsr & ZY_AC97_GSR_SDONE_MSK) && (!(p_ac97_reg->gsr & ZY_AC97_GSR_RCS_ERR_MSK)) ) ++ { ++ if (p_ac97_reg->gsr & ZY_AC97_GSR_RCS_ERR_MSK) ++ {/* timeout indicated by RCS bit */ ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ } ++ /* succeed in reading. clear status bits first. */ ++ p_ac97_reg->gsr = ZY_AC97_GSR_SDONE_MSK | ZY_AC97_GSR_RCS_ERR_MSK; ++ *pdata = (unsigned short)(*p_codec_reg); /* THE REAL READ. */ ++ if (*pdata == 0xffff) ++ {/* timeout indicated by returned value */ ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ } ++ /* check later: is second waiting really needed? */ ++ time_remaining = max_rw_time_out_us; ++ do ++ { ++ udelay(1); ++ } /* Wait while time remaining and read I/O still incomplete */ ++ while( (time_remaining--) && (!(p_ac97_reg->gsr & ZY_AC97_GSR_SDONE_MSK)) ); ++ //printk(KERN_ERR "AC97 Read Result %d\n", (p_ac97_reg->gsr & ZY_AC97_GSR_SDONE_MSK) ); ++ } ++ else /* failed */ ++ { ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ p_ac97_reg->car = ZY_AC97_CAR_CAIP_CLEAR; ++ //printk(KERN_ERR "AC97 Read Link Timeout2 %x %x %x\n", CKENA, OSCC, CKENB); ++ } /* else (OK to do real read) */ ++ ++ } /* else (We got the link. Perform the read operations.) */ ++ ++ return (status); ++} ++ ++ ++ ++zy_acodec_error_t zy_acodec_get_adc_sample(zy_acocec_context_t *p_device_context, unsigned short *p_sample_data, unsigned short adc_type, int *p_pen_down) ++{ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ unsigned short value; ++ unsigned long wait; ++ ++ if (adc_type == ZY_TOUCH_SAMPLE_X) ++ { ++ value = 0x202; ++ } ++ else ++ {/* Y sample */ ++ value = 0x204; ++ } ++ ++ status = zy_ac97_acodec_write(p_device_context, DIGITIZER_1_WM13, value); ++ ++ wait = 0; ++ do ++ { ++ status = zy_ac97_acodec_read(p_device_context, DIGITIZER_1_WM13, &value); ++ if ( !(value & 0x200 ) ) ++ { ++ break; ++ } ++ }while ( 100 > wait++ ); ++ ++ status = zy_ac97_acodec_read(p_device_context, DIGITIZER_READ_BACK, &value); ++ if (value & 0x8000) ++ {/* means pen down */ ++ *p_pen_down = 1; ++ } ++ else ++ { ++ *p_pen_down = 0; ++ } ++ *p_sample_data = value & 0xfff; ++ ++ return status; ++} ++ ++ ++ ++/* ++ * add a touch event ++ */ ++static int codec_zy_ts_evt_add(codec_zy_ts_t* ts, u16 pressure, u16 x, u16 y) ++{ ++ /* add event and remove adc src bits */ ++ static u16 pre_press = 0; ++ ++ input_report_abs(ts->idev, ABS_X, x & 0xfff); ++ input_report_abs(ts->idev, ABS_Y, y & 0xfff); ++ if (pressure == pre_press){ ++ pressure--; ++ } ++ pre_press = pressure; ++ input_report_abs(ts->idev, ABS_PRESSURE, pressure & 0xfff); ++ input_sync(ts->idev); ++#ifdef CONFIG_IPM ++ ipm_event_notify(IPM_EVENT_UI, IPM_EVENT_DEVICE_TSI, NULL, 0); ++#endif ++ return 0; ++} ++ ++/* ++ * add a pen up event ++ */ ++static void codec_zy_ts_evt_release(codec_zy_ts_t* ts) ++{ ++ input_report_abs(ts->idev, ABS_PRESSURE, 0); ++ input_sync(ts->idev); ++ ++#ifdef CONFIG_IPM ++ ipm_event_notify(IPM_EVENT_UI, IPM_EVENT_DEVICE_TSI, NULL, 0); ++#endif ++ p_zy_codec_ctxt->g_pfn_event_ack(p_zy_codec_ctxt,ZY_EVENT_TYPE_PDN); ++} ++ ++/* ++ * Kill the touchscreen thread and stop ++ * the touch digitiser. ++ */ ++static void codec_zy_ts_input_close(struct input_dev *idev) ++{ ++ codec_zy_ts_t *ts = (codec_zy_ts_t *) &codec_zy_ts; ++ ++#ifdef CONFIG_PM ++ if(touch_suspend){ ++ pr_info("touch is suspended!\n"); ++ return -1; ++ } ++#endif ++ dbg("close ts input!\n"); ++ if (--ts->use_count == 0) { ++ del_timer(ts->timer); ++ if (ts->timer != NULL) ++ kfree(ts->timer); ++ p_zy_codec_ctxt->g_pfn_disable_touch(p_zy_codec_ctxt); ++ } ++} ++ ++/* ++ * Sample the touchscreen ++ */ ++int ac97_poll_touch(codec_zy_ts_t *ts) ++{ ++ unsigned short x=0, y=0; ++ int if_down= 0; ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ ++#ifdef DEBUG ++ start_time = OSCR; ++#endif ++ ++ /* get x value */ ++ status = zy_acodec_get_adc_sample(p_zy_codec_ctxt, &x, ZY_TOUCH_SAMPLE_X, &if_down); ++ if (ZY_ACODEC_SUCCESS != status ){ ++ return -EIO; ++ } ++ dbg("x:0x%x\n", x); ++ ++ /* the pen is up */ ++ if (1 != if_down){ ++ return PEN_UP; ++ } ++ ++ /* get y vaule */ ++ status = zy_acodec_get_adc_sample(p_zy_codec_ctxt, &y, ZY_TOUCH_SAMPLE_Y, &if_down); ++ if (ZY_ACODEC_SUCCESS != status ){ ++ return -EIO; ++ } ++ dbg("y:0x%x\n",y); ++ ++ /* the pen is up */ ++ if (1 != if_down){ ++ return PEN_UP; ++ } ++ ++ /* the pen is down, can not get the pressure value, ++ * so if pen is down, give the max pressure value ++ */ ++ codec_zy_ts_evt_add(ts,0xfff, x, y); ++ ++#ifdef DEBUG ++ end_time = OSCR; ++ PRINT_TIME(); ++#endif ++ ++ return PEN_DOWN; ++} ++ ++static void touch_timer_handler(unsigned long unused) ++{ ++ int event; ++ codec_zy_ts_t *ts = &codec_zy_ts; ++ ++ event = ac97_poll_touch(ts); ++ ++ if (event == PEN_DOWN) { ++ dbg("pen down!\n"); ++ ts->timer->expires = jiffies + TS_SAMPLE_INTERVAL; ++ add_timer(ts->timer); ++ } else if(event == PEN_UP) { ++ dbg("pen up!\n"); ++ codec_zy_ts_evt_release(ts); ++ } else if(event == -EIO) { ++ printk(KERN_ERR "Access touch interface error!\n"); ++ } ++ return; ++} ++ ++static zy_acodec_error_t zy_ac97_acodec_cold_reset(zy_acocec_context_t * p_ac97_ctxt) ++{ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ p_zy_ac97acodec_t p_ac97 = (p_zy_ac97acodec_t)(p_ac97_ctxt->p_ctrl_reg); ++ int pri_codec_ready; ++ unsigned long time_remaining; ++ ++ p_ac97->gcr = 0; ++ p_ac97->gcr |= ZY_AC97_GCR_CLKBPB_MSK; ++ /* Hold reset active for a minimum time */ ++ udelay(ZY_AC97_COLD_HOLDTIME); ++ p_ac97->gcr &= ~ZY_AC97_GCR_CLKBPB_MSK; ++ ++ /* Deactivate cold reset condition */ ++ p_ac97->gcr |= (ZY_AC97_GCR_COLD_RESET_MSK | ZY_AC97_GCR_WARM_RESET_MSK); ++ ++ ++ pri_codec_ready = 0; ++ time_remaining = (p_ac97_ctxt->u_max_setup_time_out_ms) * 10; ++ do ++ { ++ udelay(1); ++ if (p_ac97->gsr & ZY_AC97_GSR_PCRDY_MSK) ++ pri_codec_ready = 1; ++ } ++ while (time_remaining-- && (pri_codec_ready == 0)); ++ ++ /* Timeout status if some of the devices weren't ready. */ ++ if (pri_codec_ready == 0) ++ { ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ } ++ ++ return (status); ++} ++ ++ ++zy_acodec_error_t zy_ac97_acodec_init(zy_acocec_context_t *p_ac97_ctxt) ++{ ++ zy_acodec_error_t status ; ++ ++ status = zy_ac97_acodec_cold_reset(p_ac97_ctxt); ++ ++ return (status); ++} ++ ++ ++/* ++ * Start the touchscreen thread and ++ * the touch digitiser. ++ */ ++static int codec_zy_ts_input_open(struct input_dev *idev) ++{ ++ codec_zy_ts_t *ts = (codec_zy_ts_t *) &codec_zy_ts; ++ ++#ifdef CONFIG_PM ++ if(touch_suspend){ ++ pr_info("touch is suspended!\n"); ++ return -1; ++ } ++#endif ++ ++ if (ts->use_count++ > 0) ++ return 0; ++ ++ dbg("Touch is opened. Use count: %d\n", ts->use_count); ++ ts->idev = idev; ++ ts->timer = kmalloc(sizeof(struct timer_list), GFP_KERNEL); ++ if (!ts->timer) { ++ printk(KERN_ERR "Alloc memory error for timer!\n"); ++ return -ENOMEM; ++ } ++ ++ init_timer(ts->timer); ++ ts->timer->function = touch_timer_handler; ++ ts->timer->data = 0; ++ p_zy_codec_ctxt->g_pfn_enable_touch(p_zy_codec_ctxt); ++ ++ return 0; ++} ++ ++/* ++ * initilze the pxa touch screen ++ */ ++static int alsa_ts_init( void ) ++{ ++ codec_zy_ts_t* ts = &codec_zy_ts; ++ ++ memset(ts, 0, sizeof(codec_zy_ts_t)); ++ ++ codec_zy_ts_input = input_allocate_device(); ++ if (!codec_zy_ts_input) ++ return -ENOMEM; ++ ++ ++ /* tell input system what we events we accept and register */ ++ codec_zy_ts_input->name = "codec zy touchscreen"; ++ codec_zy_ts_input->open = codec_zy_ts_input_open; ++ codec_zy_ts_input->close = codec_zy_ts_input_close; ++ __set_bit(EV_ABS, codec_zy_ts_input->evbit); ++ __set_bit(ABS_X, codec_zy_ts_input->absbit); ++ __set_bit(ABS_Y, codec_zy_ts_input->absbit); ++ __set_bit(ABS_PRESSURE, codec_zy_ts_input->absbit); ++ input_register_device(codec_zy_ts_input); ++ ++ return 0; ++} ++ ++static irqreturn_t pxa_touch_irq(int irq, void *dev) ++{ ++ unsigned char event_type; ++ ++ //printk(KERN_ERR "%s: enter codec event handler\n", __FUNCTION__); ++ ++ dbg("%s: enter codec event handler\n", __FUNCTION__); ++ p_zy_codec_ctxt->g_pfn_get_event(p_zy_codec_ctxt, &event_type); ++ switch (event_type) { ++ case ZY_EVENT_TYPE_PDN: ++ { ++ codec_zy_ts_t *ts = &codec_zy_ts; ++ /*if the touch is not open need not acknowledge the event*/ ++ if (ts->use_count <= 0) ++ break; ++ ts->timer->expires = jiffies + TS_SAMPLE_INTERVAL; ++ add_timer(ts->timer); ++ break; ++ } ++ default: ++ printk("unsupported codec event:0x%x\n", event_type); ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++ ++ ++ ++ ++ ++ ++ ++ ++static mfp_cfg_t extra_cfg[] = { ++ MFP_CFG_X(GPIO17, AF3, DS03X, PULL_LOW), ++ MFP_CFG_X(GPIO25, AF0, DS01X, PULL_LOW), ++}; ++ ++#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) ++ ++extern void dump_mfp(void); ++ ++zy_acodec_error_t zy_ac97_acodec_mfp_init(zy_acocec_context_t *p_device_context) ++{ ++ unsigned short codec_id; ++ ++ //mhn_mfp_set_afds(MFP_RSVD_AC97_SDATA_IN_0, MFP_AF0, MFP_DS03X); ++ //enable_ac97_pins(); ++ zy_ac97_acodec_init(p_device_context); ++ if (zy_ac97_acodec_read(p_device_context, 0x0, &codec_id)){ ++ ++ /* ++ * there is a bug on MonahansL/MonhansPL PC card: AC97_SDATA_IN is not connected to CODEC ++ * ECO 72: Connect PWM_0(MFP_RSVD_AC97_SDATA_IN_0) to CODEC as AC97_SDATA_IN ++ */ ++ ++ //mhn_mfp_set_afds(MFP_RSVD_AC97_SDATA_IN_0, MFP_RSVD_AC97_SDATA_IN_0_AF, MFP_DS03X); ++ //mhn_mfp_set_afds(MFP_AC97_SDATA_IN_0, MFP_AF0, MFP_DS01X); ++ ++ gpio_direction_output(mfp_to_gpio(MFP_PIN_GPIO17), 0); ++ pxa3xx_mfp_config(ARRAY_AND_SIZE(extra_cfg)); ++ gpio_direction_input(mfp_to_gpio(MFP_PIN_GPIO25)); ++ } ++ ++ ++ return ZY_ACODEC_SUCCESS; ++} ++ ++#define ZY_AC97_WM9713_GPIO_PIN_PDN ( 0x1 << 13 ) /* Pen down */ ++ ++/*power enable bit in 3ch and 3eh */ ++/*3ch */ ++#define ZY_AC97_9713_PWR_PADCPD ( 0x1 << 15 ) ++#define ZY_AC97_9713_PWR_VMID ( 0x1 << 14 ) ++#define ZY_AC97_9713_PWR_TSHUT ( 0x1 << 13 ) ++#define ZY_AC97_9713_PWR_VXDAC ( 0x1 << 12 ) ++#define ZY_AC97_9713_PWR_AUXDAC ( 0x1 << 11 ) ++#define ZY_AC97_9713_PWR_MBIAS ( 0x1 << 10 ) ++#define ZY_AC97_9713_PWR_PLL ( 0x1 << 9 ) ++#define ZY_AC97_9713_PWR_DACL ( 0x1 << 7 ) ++#define ZY_AC97_9713_PWR_DACR ( 0x1 << 6 ) ++#define ZY_AC97_9713_PWR_ADCL ( 0x1 << 5 ) ++#define ZY_AC97_9713_PWR_ADCR ( 0x1 << 4 ) ++#define ZY_AC97_9713_PWR_HPLX ( 0x1 << 3 ) ++#define ZY_AC97_9713_PWR_HPRX ( 0x1 << 2 ) ++#define ZY_AC97_9713_PWR_SPKX ( 0x1 << 1 ) ++#define ZY_AC97_9713_PWR_MX ( 0x1 << 0 ) ++ ++/*3EH */ ++#define ZY_AC97_9713_PWR_MCD ( 0x1 << 15 ) ++#define ZY_AC97_9713_PWR_MICBIAS ( 0x1 << 14 ) ++#define ZY_AC97_9713_PWR_MONO ( 0x1 << 13 ) ++#define ZY_AC97_9713_PWR_OUT4 ( 0x1 << 12 ) ++#define ZY_AC97_9713_PWR_OUT3 ( 0x1 << 11 ) ++#define ZY_AC97_9713_PWR_HPL ( 0x1 << 10 ) ++#define ZY_AC97_9713_PWR_HPR ( 0x1 << 9 ) ++#define ZY_AC97_9713_PWR_SPKL ( 0x1 << 8 ) ++#define ZY_AC97_9713_PWR_SPKR ( 0x1 << 7 ) ++#define ZY_AC97_9713_PWR_LL ( 0x1 << 6 ) ++#define ZY_AC97_9713_PWR_LR ( 0x1 << 5 ) ++#define ZY_AC97_9713_PWR_MOIN ( 0x1 << 4 ) ++#define ZY_AC97_9713_PWR_MA ( 0x1 << 3 ) ++#define ZY_AC97_9713_PWR_MB ( 0x1 << 2 ) ++#define ZY_AC97_9713_PWR_MPA ( 0x1 << 1 ) ++#define ZY_AC97_9713_PWR_MPB ( 0x1 << 0 ) ++ ++ ++void zy_wm9713_get_event(zy_acocec_context_t *p_device_context, unsigned char * event_type) ++{ ++ unsigned short event_state = 0; ++ zy_ac97_acodec_read(p_device_context, GPIO_PIN_STATUS, &event_state); ++ if(event_state & ZY_AC97_WM9713_GPIO_PIN_PDN){ ++ *event_type = ZY_EVENT_TYPE_PDN; ++ return; ++ } ++ return; ++} ++ ++void zy_wm9713_event_ack(zy_acocec_context_t *p_device_context, unsigned char event_type) ++{ ++ unsigned short event_state = 0; ++ zy_ac97_acodec_read(p_device_context, GPIO_PIN_STATUS, &event_state); ++ if( event_type == ZY_EVENT_TYPE_PDN){ ++ zy_ac97_acodec_write(p_device_context, ++ GPIO_PIN_STATUS, ++ (event_state & (~ZY_AC97_WM9713_GPIO_PIN_PDN))); ++ } ++ ++ zy_ac97_acodec_read(p_device_context, GPIO_PIN_STATUS, &event_state); ++ return; ++} ++ ++static void * p_saved_memory = NULL; ++static void * p_zy_scenario = NULL; ++static p_zy_acocec_context_t p_zy_ctxt = NULL; ++ ++#define WM9713_SAVE_REGISTER_NO (64-11) ++typedef struct { ++ unsigned short wm9713RegisterContext [WM9713_SAVE_REGISTER_NO + 1]; /* Fixed (data misalignment error) */ ++}ZY_9713_CONTEXT_SAVE_T; ++ ++ ++/** ++ * alsa_prepare_for_zy - create and initialize the p_zy_acocec_context_t ++ * open the clock of data link ++ * @p_p_zy_ctxt: return the data structure p_zy_acocec_context_t ++ * return: 0 success ; -ENOMEM ++ **/ ++int alsa_prepare_for_zy(p_zy_acocec_context_t * p_p_zy_ctxt) ++{ ++ if (p_zy_ctxt) { ++ p_zy_ctxt->use_count++; ++ *p_p_zy_ctxt = p_zy_ctxt; ++ return 0; ++ } ++ ++ p_zy_ctxt = kzalloc(sizeof(zy_acocec_context_t), GFP_KERNEL); ++ if (!p_zy_ctxt) ++ return -ENOMEM; ++ ++ /* enable CLK_POUT as CODEC clock input */ ++ OSCC |= 0x800; ++ ++ p_saved_memory = kzalloc(sizeof(ZY_9713_CONTEXT_SAVE_T) + ++ sizeof(zy_ac97_save_context_t), GFP_KERNEL); ++ if (NULL == p_saved_memory) { ++ if (p_zy_ctxt) ++ kfree(p_zy_ctxt); ++ return -ENOMEM; ++ } ++ ++ p_zy_ctxt->acodec_id = (zy_acodec_device_id_t) (WM_9713_ID); ++ p_zy_ctxt->use_count++; ++ /* ++ p_zy_ctxt->pMfpRegBase = (unsigned long) (MFP_BASE); ++ p_zy_ctxt->pMfpRmDb = ZY_MFP_RM_DATABASE; ++ p_zy_ctxt->p_ost_regs = OST_BASE; ++ */ ++ p_zy_ctxt->p_voice_reg = NULL; ++ p_zy_ctxt->p_hifi_reg = (void *) (&POCR); ++ p_zy_ctxt->p_ctrl_reg = (void *) (&POCR); ++ p_zy_ctxt->u_max_read_write_time_out_ms = ZY_AC97_RW_TIMEOUT_DEF; ++ p_zy_ctxt->u_max_setup_time_out_ms = ZY_AC97_SETUP_TIMEOUT_DEF; ++ p_zy_ctxt->p_save_memory = p_saved_memory; ++ p_zy_ctxt->p_zy_scenario = p_zy_scenario; ++// pxa_set_cken(24, 1); ++ CKENA |= (1 << 24); ++ AC97_DIV = 1625<<12 | 128; ++#ifdef DEBUG_ALSA_ZY ++ debug_pac97ctxt = p_zy_ctxt; ++ misc_register(&audio_dev); ++#endif ++ ++ (*p_p_zy_ctxt) = p_zy_ctxt; ++ ++ return 0; ++} ++ ++ ++/* this is platform specific */ ++/* do later: not to enable recording route and playback route in this function, ++ * leave it to driver to call other function ++ */ ++zy_acodec_error_t zy_wm9713_specific_init (zy_acocec_context_t *p_device_context) ++{ ++ ++ unsigned short value; ++ ++ /* this assumes that the aclink is initialized wait some time and then ++ * do a warm reset to enabled the ACLINK, required for wm9713 ++ * (not wm9712 or ucb1400) ++ */ ++ ++ /* pay attention: whether the workaround is still needed? */ ++ p_zy_ac97acodec_t p_ac97_reg = (p_zy_ac97acodec_t)(p_device_context->p_ctrl_reg); ++ ++ p_ac97_reg->gcr |= ZY_AC97_GCR_WARM_RESET_MSK; ++ ++ mdelay(5); ++ ++ /* power on all the necessary unit */ ++ zy_ac97_acodec_write(p_device_context,POWERDOWN_CTRL_STAT, 0x000); /*26*/ ++ /* open left headphone mixer */ ++ /* open right headphone mixer */ ++ /* open right/left dac */ ++ /* open right/left adc */ ++ /* open temperature sensor */ ++ /* enable reference generator */ ++ zy_ac97_acodec_write(p_device_context,POWER_DOWN_1, 0xda00); /*3c */ ++ /* open microphone bias */ ++ /* open HPL output PGA */ ++ /* open HPR output PGA */ ++ /* open mic PGA MA */ ++ /* open mic pre-amp MPA */ ++ /* if here we enable SPKL and SPKR PGA, then Touch screen will doesn't work */ ++ zy_ac97_acodec_write(p_device_context,POWER_DOWN_2,0xb9f5); /*3e */ ++ ++ /* recording route and microphone input */ ++ /* microphone selection, now fixed to MIC1 input and mic bias output */ ++ /* MIC1 only, MICBIAS enable */ ++ zy_ac97_acodec_write (p_device_context, MIC_BIAS, 0xC440); /*0x22h*/ ++ ++ /* mic pga setting to mixer (side tone) */ ++ /* comment the below code to make MICA/B play back volume gain + 0db */ ++ /* zy_ac97_acodec_write (p_device_context, MIC_PGA_VOLUME, 0x0000); */ /*0x0eh*/ ++ ++ /* recording side tone and ADC boost, now fixed to default (14h) */ ++ /* recording volume 0dB */ ++ zy_ac97_acodec_write(p_device_context, REC_PGA_VOL, 0x0); /*12*/ ++ ++ /* hifi playback route and output mixer */ ++ /* by default, fixed to enable headphone only */ ++ ++ /* comment the below code to make SPEAKER default MUTE */ ++ zy_ac97_acodec_write (p_device_context, SPEAKER_VOLUME, 0x0); /*02*/ ++ ++ /* comment the below code to make OUT3_OUT4 default MUTE */ ++ /* zy_ac97_acodec_write (p_device_context, OUT3_OUT4_VOLUME, 0x8000); */ /*06*/ ++ ++ /* remove all the mute bit volume gain + 0db */ ++ zy_ac97_acodec_write(p_device_context, HEADPHONE_VOLUME, 0x0); /*04*/ ++ ++ /* DAC route */ ++ /* open DAC to headphone mixer path */ ++ /* left DAC gain +0db */ ++ /* right DAC gain +0db */ ++ zy_ac97_acodec_write(p_device_context, DAC_PGA_VOL_ROUTE,0x0808); /*0c*/ ++ ++ /* out3 configure, invert to HPMIXR */ ++ /* zy_ac97_acodec_write(p_device_context,DAC_3D_CTRL_INV_MUX_SEL, 0x8000); */ /*1e*/ ++ ++ /* output control */ ++ /* select HPMIXR HPMIXL out */ ++ /* other out are all VIM */ ++ zy_ac97_acodec_write(p_device_context,OUTPUT_PGA_MUX, 0x9BA8); /*1c*/ ++ ++ /* set sample rates */ ++ /* enable variable rate conversion */ ++ zy_ac97_acodec_write(p_device_context, EXTENDED_AUD_STAT_CTRL , 0x1); /*2a*/ ++ /* DAC 44kHZ */ ++ zy_ac97_acodec_write(p_device_context,AUDIO_DAC_RATE,0xac44); /*2c*/ ++ /* ADC 16KHZ */ ++ zy_ac97_acodec_write(p_device_context,AUDIO_ADC_RATE,0x3E80); /*32*/ ++ ++ /* clock scheme, use external clock, it is 24MHZ from MCLK_A */ ++ ++ ++ zy_ac97_acodec_read(p_device_context, MCLK_PLL_CTRL_1, &value); ++ zy_ac97_acodec_write(p_device_context, MCLK_PLL_CTRL_1, value | 0x2); ++ ++ return ZY_ACODEC_SUCCESS; ++} ++ ++zy_acodec_error_t zy_wm9713_specific_deinit (zy_acocec_context_t *p_device_context) ++{/* do later: shut down all power */ ++ unsigned short value = 0; ++ ++ /* close the power of all units */ ++ zy_ac97_acodec_write(p_device_context, POWER_DOWN_1, 0xffff); ++ zy_ac97_acodec_write(p_device_context, POWER_DOWN_2, 0xffff); ++ zy_ac97_acodec_read(p_device_context, POWER_DOWN_1, &value); ++ value &= ~(ZY_AC97_9713_PWR_MBIAS); ++ zy_ac97_acodec_write(p_device_context, POWER_DOWN_1, value); ++ ++ return ZY_ACODEC_SUCCESS; ++} ++ ++zy_acodec_error_t zy_acodec_set_pen_down_interrupt(zy_acocec_context_t *p_device_context, int enable) ++{/* disable/enable pen down interrupt in the codec. This function is not implemented for Wm9713 */ ++ /* because the pen down detection could not be disabled in codec */ ++ return ZY_ACODEC_SUCCESS; ++} ++ ++zy_acodec_error_t zy_wm9713_enable_touch(zy_acocec_context_t *p_device_context) ++{/* enable touch functionality in the codec */ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ unsigned short value; ++ ++ /* power setting */ ++ status = zy_ac97_acodec_read(p_device_context, POWER_DOWN_1, &value); ++ value &= ~(ZY_AC97_9713_PWR_PADCPD); ++ status = zy_ac97_acodec_write(p_device_context, POWER_DOWN_1, value); ++ ++ /* basic touch setting */ ++ status = zy_ac97_acodec_write(p_device_context, DIGITIZER_3_WM13, 0xc008); ++ status = zy_ac97_acodec_write(p_device_context, DIGITIZER_2_WM13, 0x6); ++ ++ ++ /* 9713 powerdown virtual gpio setting (polarity, sticky, wakeup) */ ++ /* 9713 gpio 2(pin45) route to IRQ */ ++ /* Notes: Can use defaults for IRQ polarity, PENDOWN polarity in IRQ, */ ++ /* sticky for PENDOWN in IRQ and wakeup for PENDOWN. */ ++ status = zy_ac97_acodec_read(p_device_context, GPIO_PIN_CFG, &value); ++ value &= ~(0x4); ++ status = zy_ac97_acodec_write(p_device_context, GPIO_PIN_CFG, value); ++ ++ status = zy_ac97_acodec_read(p_device_context, GPIO_PIN_SHARING, &value); ++ value &= ~(0x4); ++ status = zy_ac97_acodec_write(p_device_context, GPIO_PIN_SHARING, value); ++ ++ status = zy_ac97_acodec_read(p_device_context, GPIO_PIN_WAKEUP, &value); ++ value |= (0x2000); ++ status = zy_ac97_acodec_write(p_device_context, GPIO_PIN_WAKEUP, value); ++ ++ status = zy_ac97_acodec_read(p_device_context, GPIO_PIN_STICKY, &value); ++ value |= (0x2000); ++ status = zy_ac97_acodec_write(p_device_context, GPIO_PIN_STICKY, value); ++ ++ return status; ++} ++ ++zy_acodec_error_t zy_wm9713_disable_touch(zy_acocec_context_t *p_device_context) ++{/* disable touch functionality in the codec */ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ unsigned short value; ++ ++ /* power setting */ ++ status = zy_ac97_acodec_read(p_device_context, POWER_DOWN_1, &value); ++ value |= (ZY_AC97_9713_PWR_PADCPD); ++ status = zy_ac97_acodec_write(p_device_context, POWER_DOWN_1, value); ++ ++ return status; ++} ++zy_acodec_error_t zy_ac97_acodec_mfp_deinit(zy_acocec_context_t *p_device_context) ++{/* do later: free all MFP resources. */ ++ return ZY_ACODEC_SUCCESS; ++} ++ ++static zy_acodec_error_t zy_ac97_acodec_shut_down_aclink(p_zy_ac97acodec_t p_ac97_reg, int * p_ost_regs) ++{ ++ zy_acodec_error_t status = ZY_ACODEC_SUCCESS; ++ unsigned long time_remaining = ZY_AC97_LINKOFF_TIMEOUT_DEF; ++ ++ p_ac97_reg->gcr |= ZY_AC97_GCR_LINK_OFF_MSK; ++ p_ac97_reg->gcr |= ZY_AC97_GCR_CLKBPB_MSK; ++ ++ while (!(p_ac97_reg->gsr & ZY_AC97_GSR_ACOFFD_MSK)) ++ { ++ time_remaining --; ++ if (0 == time_remaining) ++ { ++ status = ZY_ACODEC_CONTROLLER_INTERFACE_TIMEOUT; ++ break; ++ } ++ udelay(1); ++ } ++ p_ac97_reg->gcr |= ZY_AC97_GCR_FRCRST_MSK; ++ /* check later: any delay needed */ ++ p_ac97_reg->gcr &= ~ZY_AC97_GCR_FRCRST_MSK; ++ p_ac97_reg->gcr &= ~ZY_AC97_GCR_CLKBPB_MSK; ++ ++ return(status); ++} ++ ++ ++zy_acodec_error_t zy_ac97_acodec_deinit(zy_acocec_context_t * p_ac97_ctxt) ++{ ++ zy_acodec_error_t status ; ++ ++ status = zy_ac97_acodec_shut_down_aclink((p_zy_ac97acodec_t)(p_ac97_ctxt->p_ctrl_reg), p_ac97_ctxt->p_ost_regs); ++ ++ return (status); ++} ++ ++zy_acodec_error_t zy_acodec_deinit(zy_acocec_context_t *p_device_context) ++{ ++ /* power down codec by codec specific power down function */ ++ if (p_device_context->g_pfn_codec_specific_dinit) ++ { ++ p_device_context->g_pfn_codec_specific_dinit(p_device_context); ++ } ++ /* call bus deinit function */ ++ zy_ac97_acodec_deinit(p_device_context); ++ /* restore MFP, set GPIO to suitable value */ ++ zy_ac97_acodec_mfp_deinit(p_device_context); ++ ++ return ZY_ACODEC_SUCCESS; ++} ++ ++void alsa_zy_codec_put(p_zy_acocec_context_t p_acodectxt) ++{ ++ ++ zy_acodec_deinit(p_acodectxt); ++ //pxa_set_cken(24, 0); ++ CKENA &= ~(1 << 24); ++ ++ if(p_acodectxt->p_save_memory){ ++ kfree(p_saved_memory); ++ } ++ if(p_acodectxt->p_zy_scenario){ ++ kfree(p_zy_scenario); ++ } ++} ++ ++ ++zy_acodec_error_t zy_acodec_init(zy_acocec_context_t *p_device_context, int hw_init) ++{ ++ /* set codec specific functions ++ * set mfp for Zylonite platform ++ * call bus init function (AC97, I2S, I2C, SSP) ++ * call specific init of codec ++ */ ++ zy_acodec_error_t retval = ZY_ACODEC_SUCCESS; ++ ++ if (p_device_context->acodec_id != WM_9713_ID) ++ {/* on Zylonite, it is Wolfson 9713 codec only */ ++ return ZY_ACODEC_GENERAL_SW_ERR; ++ } ++ ++ if (1 == hw_init) ++ { ++ zy_ac97_acodec_mfp_init(p_device_context); ++ zy_ac97_acodec_init(p_device_context); /* codec init common to ac97 */ ++ } ++ ++ /* wm9713-specific functions */ ++ (p_device_context->g_pfn_codec_specific_init) = zy_wm9713_specific_init; ++ (p_device_context->g_pfn_codec_specific_dinit) = zy_wm9713_specific_deinit; ++ (p_device_context->g_pfn_acodec_read) = zy_ac97_acodec_read; ++ (p_device_context->g_pfn_acodec_write) = zy_ac97_acodec_write; ++ ++ (p_device_context->g_pfn_event_ack) = zy_wm9713_event_ack; ++ (p_device_context->g_pfn_get_event) = zy_wm9713_get_event; ++ (p_device_context->g_pfn_disable_touch) = zy_wm9713_disable_touch; ++ (p_device_context->g_pfn_enable_touch) = zy_wm9713_enable_touch; ++ ++ if (1 == hw_init) ++ { ++ retval = p_device_context->g_pfn_codec_specific_init(p_device_context); ++ } ++ ++ return retval; ++} ++ ++static int __devinit touch_codec_zy_probe(struct platform_device *dev) ++{ ++ int ret = 0; ++ struct snd_card *card = NULL; ++ zy_acodec_error_t status; ++ ++ /* will increase codec context use count */ ++ ret = alsa_prepare_for_zy(&p_zy_codec_ctxt); ++ if (ret) ++ goto err; ++ ++ /* codec specific initialization, audio will do it either */ ++ if (1 == p_zy_codec_ctxt->use_count) { ++ status = zy_acodec_init(p_zy_codec_ctxt, 1); ++ if (ZY_ACODEC_SUCCESS != status) { ++ printk(KERN_ERR "initialize codec error\n"); ++ ret = -EIO; ++ goto err; ++ } ++ ++ /* power down the units of the acodec, sleep the acodec, zy_acodec_init() ++ * will open all the units' power of the codec while ALSA need all the codec ++ * units power down and the codec should sleep if it can. ++ * So on the zylonite platform we call below function to power down and sleep ++ * wm9713 codec. ++ */ ++ p_zy_codec_ctxt->g_pfn_codec_specific_dinit(p_zy_codec_ctxt); ++ ++ } ++ ++ alsa_ts_init(); ++ ++ //mhn_mfp_set_afds(MFP_AC97_INT_N_GPIO,0,0); ++ //mhn_gpio_set_direction(MFP_AC97_INT_N_GPIO, GPIO_DIR_IN); ++ //mhn_gpio_clear_edge_detect_status(MFP_AC97_INT_N_GPIO); ++ gpio_direction_input(mfp_to_gpio(MFP_PIN_GPIO26)); ++ ret = request_irq(IRQ_GPIO(mfp_to_gpio(MFP_PIN_GPIO26)), ++ pxa_touch_irq, IRQF_TRIGGER_RISING, ++ "wm9713 touch event interrupt", NULL); ++ if (ret) { ++ printk(KERN_ERR "Request IRQ for touch failed (%d).\n", ret); ++ goto err; ++ } ++ ++ return 0; ++err: ++ if (p_zy_codec_ctxt && (!--p_zy_codec_ctxt->use_count)) { ++ zy_acodec_deinit(p_zy_codec_ctxt); ++ //pxa_set_cken(24, 0); ++ CKENA &= ~(1 << 24); ++ kfree(p_zy_codec_ctxt); ++ p_zy_codec_ctxt = NULL; ++ } ++ ++ if (card) ++ snd_card_free(card); ++ ++ return ret; ++} ++ ++static int __devexit touch_codec_zy_remove(struct platform_device *dev) ++{ ++ struct snd_card *card = platform_get_drvdata(dev); ++ ++ input_unregister_device(codec_zy_ts_input); ++ ++ if (p_zy_codec_ctxt && (!--p_zy_codec_ctxt->use_count)) { ++ alsa_zy_codec_put(p_zy_codec_ctxt); ++ kfree(p_zy_codec_ctxt); ++ p_zy_codec_ctxt = NULL; ++ } ++ ++ if (card) { ++ snd_card_free(card); ++ platform_set_drvdata(dev, NULL); ++ } ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int touch_codec_zy_suspend(struct platform_device *_dev, pm_message_t state, u32 level) ++{ ++ int ret=0; ++ ++ if (level == SUSPEND_DISABLE) { ++ ret = audio_codec_zy_do_suspend(NULL, SNDRV_CTL_POWER_D3cold, p_zy_codec_ctxt); ++ touch_suspend = 1; ++ } ++ return ret; ++} ++ ++static int touch_codec_zy_resume(struct platform_device *_dev, u32 level) ++{ ++ int ret = 0; ++ ++ if (level == RESUME_ENABLE) { ++ ret = audio_codec_zy_do_resume(NULL, SNDRV_CTL_POWER_D0, p_zy_codec_ctxt); ++ touch_suspend = 0; ++ } ++ return ret; ++} ++#else ++#define touch_codec_zy_suspend NULL ++#define touch_codec_zy_resume NULL ++#endif ++ ++static struct platform_driver touch_codec_zy_driver = { ++ .probe = touch_codec_zy_probe, ++ .remove = __devexit_p(touch_codec_zy_remove), ++ .suspend= touch_codec_zy_suspend, ++ .resume = touch_codec_zy_resume, ++ .driver = { ++ .name = "pxa2xx-touch", ++ }, ++}; ++ ++static int __init touch_codec_zy_init(void) ++{ ++ return platform_driver_register(&touch_codec_zy_driver); ++} ++ ++static void __exit touch_code_zy_exit(void) ++{ ++ platform_driver_unregister(&touch_codec_zy_driver); ++} ++module_init(touch_codec_zy_init); ++module_exit(touch_code_zy_exit); ++ ++EXPORT_SYMBOL(p_zy_codec_ctxt); ++ ++MODULE_AUTHOR("bridge.wu@marvell.com"); ++MODULE_DESCRIPTION("zylonite audio touch codec driver on ALSA"); ++MODULE_LICENSE("GPL"); ++ diff --git a/packages/linux/linux-rp_2.6.26.bb b/packages/linux/linux-rp_2.6.26.bb new file mode 100644 index 0000000000..b2d378dd8e --- /dev/null +++ b/packages/linux/linux-rp_2.6.26.bb @@ -0,0 +1,188 @@ +require linux-rp.inc + +PR = "r0" + +DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_qemuarm = "-1" +DEFAULT_PREFERENCE_qemux86 = "-1" +DEFAULT_PREFERENCE_spitz = "1" + +# Handy URLs +# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046 +# ${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 = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2 \ + ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \ + ${RPSRC}/hx2750_base-r34.patch;patch=1 \ + ${RPSRC}/hx2750_bl-r9.patch;patch=1 \ + ${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \ + ${RPSRC}/pxa_keys-r9.patch;patch=1 \ + ${RPSRC}/tsc2101-r19.patch;patch=1 \ + ${RPSRC}/hx2750_test1-r8.patch;patch=1 \ + ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \ + ${RPSRC}/pm_changes-r1.patch;patch=1 \ + ${RPSRC}/locomo_kbd_tweak-r2.patch;patch=1 \ +# ${RPSRC}/pxa27x_overlay-r8.patch;patch=1 \ + ${RPSRC}/w100_extaccel-r2.patch;patch=1 \ + ${RPSRC}/w100_extmem-r1.patch;patch=1 \ + ${RPSRC}/poodle_pm-r6.patch;patch=1 \ + ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \ + ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \ + ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \ + ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \ + file://hostap-monitor-mode.patch;patch=1;status=unmergable \ + file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable \ + ${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \ + ${RPSRC}/mmcsd_no_scr_check-r2.patch;patch=1;status=hack \ + ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \ + ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \ + file://sharpsl-rc-r1.patch;patch=1 \ + file://spitz_h_rewrite.patch;patch=1 \ + file://pxa-serial-hack.patch;patch=1;status=hack \ + file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \ + file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \ + file://htcuni.patch;patch=1 \ + file://versatile-armv6.patch;patch=1 \ + file://defconfig-c7x0 \ + file://defconfig-hx2000 \ + file://defconfig-akita \ + file://defconfig-spitz \ + file://defconfig-qemuarm \ + file://defconfig-qemux86 \ + file://defconfig-bootcdx86 \ + file://defconfig-htcuniversal \ + file://defconfig-zylonite" +# Disabled until the patchset is updated: +# file://defconfig-tosa +# file://defconfig-collie +# file://defconfig-poodle + + +# FIXMEs before made default +# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack + + +# Add this to enable pm debug code (useful with a serial lead) +# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1 + +# Disabled until I find the reason this gives issues with cdc_subset +# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \ + + +SRC_URI_append_collie = "\ + ${TKSRC}/mtd-sharp-flash-hack-r4.patch;patch=1 \ + ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \ + ${TKSRC}/locomo-r1.patch;patch=1 \ + ${TKSRC}/collie-kexec-r1.patch;patch=1 \ + ${TKSRC}/sharpsl_pm-4.patch;patch=1 \ + ${TKSRC}/collie_pm-3.patch;patch=1 \ + ${TKSRC}/ucb1x00_suspend.patch;patch=1 \ + ${TKSRC}/collie-ts.patch;patch=1 \ + ${TKSRC}/pcmcia_suspend.patch;patch=1 \ + ${TKSRC}/locomo_spi-6.patch;patch=1 \ + ${TKSRC}/config.patch;patch=1 \ + ${TKSRC}/locomokeyb-2.patch;patch=1 \ + ${TKSRC}/mmc-spi.patch;patch=1 \ + ${TKSRC}/linux-2.6.24-SIMpad-rtc-sa1100.patch;patch=1 \ + ${TKSRC}/sa1100_spinlock.patch;patch=1 \ + ${TKSRC}/sa1100-dma.patch;patch=1 \ + ${TKSRC}/sa1100_udc_g_ether-2.patch;patch=1 \ +" + +SRC_URI_append_poodle = "\ + ${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \ + file://poodle_ts.patch;patch=1 \ + file://pxafb.patch;patch=1 \ +" + +SRC_URI_append_tosa = "\ + file://tosa/0001-Allow-runtime-registration-of-regions-of-memory-that.patch;patch=1 \ + file://tosa/0002-Modify-dma_alloc_coherent-on-ARM-so-that-it-supports.patch;patch=1 \ + file://tosa/0003-Core-MFD-support.patch;patch=1 \ + file://tosa/0004-Add-support-for-tc6393xb-MFD-core.patch;patch=1 \ + file://tosa/0005-Add-support-for-tc6387xb-MFD-core.patch;patch=1 \ + file://tosa/0006-Add-support-for-t7l66xb-MFD-core.patch;patch=1 \ + file://tosa/0007-Common-headers-for-TMIO-MFD-subdevices.patch;patch=1 \ + file://tosa/0008-Nand-driver-for-TMIO-devices.patch;patch=1 \ + file://tosa/0009-FB-driver-for-TMIO-devices.patch;patch=1 \ + file://tosa/0010-OHCI-driver-for-TMIO-devices.patch;patch=1 \ + file://tosa/0011-MMC-driver-for-TMIO-devices.patch;patch=1 \ + file://tosa/0012-Tosa-keyboard-support.patch;patch=1 \ + file://tosa/0013-USB-gadget-pxa2xx_udc-supports-inverted-vbus.patch;patch=1 \ + file://tosa/0014-tosa_udc_use_gpio_vbus.patch.patch;patch=1 \ + file://tosa/0015-sharpsl-export-params.patch;patch=1 \ + file://tosa/0016-This-patch-fixes-the-pxa25x-clocks-definitions-to-ad.patch;patch=1 \ + file://tosa/0017-Convert-pxa2xx-UDC-to-use-debugfs.patch;patch=1 \ + file://tosa/0018-Fix-the-pxa2xx_udc-to-balance-calls-to-clk_enable-cl.patch;patch=1 \ + file://tosa/0026-I-don-t-think-we-should-check-for-IRQs-when-determin.patch;patch=1 \ + file://tosa/0027-Add-LiMn-one-of-the-most-common-for-small-non-recha.patch;patch=1 \ + file://tosa/0028-Add-suspend-resume-wakeup-support-for-pda_power.patch;patch=1 \ + file://tosa/0029-Support-using-VOLTAGE_-properties-for-apm-calculati.patch;patch=1 \ + file://tosa/0030-Core-driver-for-WM97xx-touchscreens.patch;patch=1 \ + file://tosa/0031-Add-chip-driver-for-WM9705-touchscreen.patch;patch=1 \ + file://tosa/0032-Add-chip-driver-for-WM9712-touchscreen.patch;patch=1 \ + file://tosa/0033-Add-chip-driver-for-WM9713-touchscreen.patch;patch=1 \ + file://tosa/0034-Driver-for-WM97xx-touchscreens-in-streaming-mode-on.patch;patch=1 \ + file://tosa/0035-Build-system-and-MAINTAINERS-entry-for-WM97xx-touchs.patch;patch=1 \ + file://tosa/0036-Set-id-to-1-for-wm97xx-subdevices.patch;patch=1 \ + file://tosa/0037-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1 \ + file://tosa/0038-Don-t-lock-the-codec-list-in-snd_soc_dapm_new_widget.patch;patch=1 \ + file://tosa/0044-fix-tmio_mmc-debug-compilation.patch;patch=1 \ + file://tosa/0045-Update-tmio_ohci.patch;patch=1 \ + file://tosa/0046-patch-tc6393xb-cleanup.patch;patch=1 \ + file://tosa/0047-tc6393xb-use-bitmasks-instead-of-bit-field-structs.patch;patch=1 \ + file://tosa/0048-tc6393xb-GPIO-support.patch;patch=1 \ + file://tosa/0049-platform-support-for-TMIO-on-tosa.patch;patch=1 \ + file://tosa/0050-tosa-update-for-tc6393xb-gpio.patch;patch=1 \ + file://tosa/0051-fix-sound-soc-pxa-tosa.c-to-new-gpio-api.patch;patch=1 \ + file://tosa/0052-tosa-platform-backlight-support.patch;patch=1 \ + file://tosa/0053-sound-soc-codecs-wm9712.c-28.patch;patch=1 \ + file://tosa/0054-sound-soc-codecs-wm9712.c-2.patch;patch=1 \ + file://tosa/0055-Add-GPIO_POWERON-to-the-list-of-devices-that-we-supp.patch;patch=1 \ + file://tosa/0058-Fix-tosakbd-suspend.patch;patch=1 \ + file://tosa/0059-patch-tosa-wakeup-test.patch;patch=1 \ + file://tosa/0060-Add-support-for-power_supply-on-tosa.patch;patch=1 \ + file://tosa/0061-tosa-bat-unify.patch;patch=1 \ + file://tosa/0062-tosa-bat-fix-charging.patch;patch=1 \ + file://tosa/0063-patch-tosa-bat-jacket-detect.patch;patch=1 \ + file://tosa/0064-Export-modes-via-sysfs.patch;patch=1 \ + file://tosa/0065-wm97xx-core-fixes.patch;patch=1 \ + file://tosa/0066-tmiofb_probe-should-be-__devinit.patch;patch=1 \ + file://tosa/0067-modeswitching.patch;patch=1 \ + file://tosa/0068-Preliminary-tosa-denoiser.patch;patch=1 \ + file://tosa/0019-pxa-remove-periodic-mode-emulation-support.patch;patch=1 \ + file://tosa/0020-Provide-dew-device-clock-backports-from-2.6.24-git.patch;patch=1 \ + file://tosa/0021-Add-an-empty-drivers-gpio-directory-for-gpiolib-infr.patch;patch=1 \ + file://tosa/0022-Provide-new-implementation-infrastructure-that-platf.patch;patch=1 \ + file://tosa/0023-This-adds-gpiolib-support-for-the-PXA-architecture.patch;patch=1 \ + file://tosa/0024-Update-Documentation-gpio.txt-primarily-to-include.patch;patch=1 \ + file://tosa/0025-Signed-off-by-Dmitry-Baryshkov-dbaryshkov-gmail.co.patch;patch=1 \ + file://tosa/0039-Add-generic-framework-for-managing-clocks.patch;patch=1 \ + file://tosa/0040-Clocklib-debugfs-support.patch;patch=1 \ + file://tosa/0041-From-80a359e60c2aec59ccf4fca0a7fd20495f82b1d2-Mon-Se.patch;patch=1 \ + file://tosa/0042-Use-correct-clock-for-IrDA-on-pxa.patch;patch=1 \ + file://tosa/0043-Use-clocklib-for-sa1100-sub-arch.patch;patch=1 \ + file://tosa/0056-Support-resetting-by-asserting-GPIO-pin.patch;patch=1 \ + file://tosa/0057-Clean-up-tosa-resetting.patch;patch=1 \ + " + +SRC_URI_append_htcuniversal ="\ + file://htcuni-acx.patch;patch=1;status=external \ + " + +SRC_URI_append_zylonite ="\ + file://pxa_fb_overlay.patch;patch=1 \ + file://zylonite-boot.patch;patch=1 \ + file://zylonite_mtd-r0.patch;patch=1 \ + file://zylonite_touch-r0.patch;patch=1 \ + file://zylonite_keypad-r0.patch;patch=1 \ + " + +S = "${WORKDIR}/linux-2.6.26" -- cgit v1.2.3 From ec3798a3228ae2bba42b60ec0cc3c7fdafaf2b54 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 13:10:47 +0000 Subject: ffmpeg, omapfbplay: bump SRCREV --- packages/ffmpeg/ffmpeg_git.bb | 4 ++-- packages/ffmpeg/omapfbplay_git.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ffmpeg/ffmpeg_git.bb b/packages/ffmpeg/ffmpeg_git.bb index 548d5a5139..979da0362e 100644 --- a/packages/ffmpeg/ffmpeg_git.bb +++ b/packages/ffmpeg/ffmpeg_git.bb @@ -3,7 +3,7 @@ require ffmpeg.inc DEPENDS += "libgsm" PV = "0.4.9+${PR}+gitr${SRCREV}" -PR = "r14" +PR = "r15" DEFAULT_PREFERENCE = "-1" DEFAULT_PREFERENCE_armv7a = "1" @@ -12,7 +12,7 @@ FFBRANCH_arm = "arm-neon" FFBRANCH ?= "master" SRCREV = "dee1c2d60a67dc6411ed3fcbe26db5113cb1a371" -SRCREV_arm = "3ea1180b31078c276783f68e153ec54cfe567977" +SRCREV_arm = "7137e7907e706300183c120703d4c9b46db93029" SRC_URI = "git://git.mansr.com/ffmpeg.mru;protocol=git;branch=${FFBRANCH} \ " diff --git a/packages/ffmpeg/omapfbplay_git.bb b/packages/ffmpeg/omapfbplay_git.bb index b8e092def6..9494e57d33 100644 --- a/packages/ffmpeg/omapfbplay_git.bb +++ b/packages/ffmpeg/omapfbplay_git.bb @@ -2,7 +2,7 @@ DESCRIPTION = "Simple ffmpeg-based player that uses the omapfb overlays" DEPENDS = "bzip2 lame ffmpeg virtual/kernel" LICENSE = "MIT" -PR = "r4" +PR = "r5" inherit module-base -- cgit v1.2.3 From 15b4463a24e796a4ffe43c68f32df7c8402fa173 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 13:48:33 +0000 Subject: gst-ffmpeg: prefer 0.10.4 for armv7a --- packages/gstreamer/gst-ffmpeg_0.10.4.bb | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gstreamer/gst-ffmpeg_0.10.4.bb b/packages/gstreamer/gst-ffmpeg_0.10.4.bb index dc6db0dd9c..34ae157094 100644 --- a/packages/gstreamer/gst-ffmpeg_0.10.4.bb +++ b/packages/gstreamer/gst-ffmpeg_0.10.4.bb @@ -8,6 +8,7 @@ PR = "r1" # This uses the systems ffmpeg, which is unsupported, but we can't build the internal one with the current autotools (ab)usage DEFAULT_PREFERENCE = "-1" +DEFAULT_PREFERENCE_armv7a = "1" inherit autotools pkgconfig -- cgit v1.2.3 From 5374c87d2d09f8544e612ca99f0ce1c92d329861 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Tue, 15 Jul 2008 15:54:44 +0000 Subject: Added tangogps-0.9.0.3: * based on openmoko-projects/tangogps_0.7.bb * removed openmoko specific requirements * updated to version 0.9.0.3 --- packages/tangogps/.mtn2git_empty | 0 packages/tangogps/tangogps_0.9.0.3.bb | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 packages/tangogps/.mtn2git_empty create mode 100644 packages/tangogps/tangogps_0.9.0.3.bb diff --git a/packages/tangogps/.mtn2git_empty b/packages/tangogps/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/tangogps/tangogps_0.9.0.3.bb b/packages/tangogps/tangogps_0.9.0.3.bb new file mode 100644 index 0000000000..f980b0bb04 --- /dev/null +++ b/packages/tangogps/tangogps_0.9.0.3.bb @@ -0,0 +1,10 @@ +LICENSE = "GPLv2" +SECTION = "x11/applications" +PRIORITY = "optional" +DESCRIPTION = "lightweight and fast mapping application" +DEPENDS = "curl gtk+ gconf gpsd" +RDEPENDS = "gpsd" + +SRC_URI = "http://www.tangogps.org/downloads/${PN}-${PV}.tar.gz" + +inherit autotools -- cgit v1.2.3 From ca1c6cf7150acfc2586243c7ecec29c3f8dcb64b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 15 Jul 2008 19:53:31 +0000 Subject: linux-omap2 git: add patch to fix a race in i2c code --- .../beagleboard/i2c-omap-race-fix.diff | 118 +++++++++++++++++++++ packages/linux/linux-omap2_git.bb | 3 +- 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-omap2-git/beagleboard/i2c-omap-race-fix.diff diff --git a/packages/linux/linux-omap2-git/beagleboard/i2c-omap-race-fix.diff b/packages/linux/linux-omap2-git/beagleboard/i2c-omap-race-fix.diff new file mode 100644 index 0000000000..6eb33f76b7 --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/i2c-omap-race-fix.diff @@ -0,0 +1,118 @@ +From linux-omap-owner@vger.kernel.org Tue Jul 15 21:23:13 2008 +Received: from localhost + ([127.0.0.1] helo=dominion ident=koen) + by dominion.dominion.void with esmtp (Exim 4.69) + (envelope-from ) + id 1KIq7E-0004FX-VS + for koen@localhost; Tue, 15 Jul 2008 21:23:13 +0200 +Received: from xs.service.utwente.nl [130.89.5.250] + by dominion with POP3 (fetchmail-6.3.6) + for (single-drop); Tue, 15 Jul 2008 21:23:12 +0200 (CEST) +Received: from mail.service.utwente.nl ([130.89.5.254]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); + Tue, 15 Jul 2008 21:01:02 +0200 +Received: from mx.utwente.nl ([130.89.2.12]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959); + Tue, 15 Jul 2008 21:01:01 +0200 +Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) + by mx.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m6FJ0qDf031889 + for ; Tue, 15 Jul 2008 21:00:52 +0200 +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S1756776AbYGOTAV (ORCPT ); + Tue, 15 Jul 2008 15:00:21 -0400 +Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755065AbYGOTAV + (ORCPT ); + Tue, 15 Jul 2008 15:00:21 -0400 +Received: from utopia.booyaka.com ([72.9.107.138]:35569 "EHLO + utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S1756776AbYGOTAU (ORCPT + ); Tue, 15 Jul 2008 15:00:20 -0400 +Received: (qmail 2982 invoked by uid 526); 15 Jul 2008 19:00:18 -0000 +Date: Tue, 15 Jul 2008 13:00:18 -0600 (MDT) +From: Paul Walmsley +To: linux-omap@vger.kernel.org +Subject: [PATCH] i2c-omap: close suspected race between omap_i2c_idle() and + omap_i2c_isr() +Message-ID: +User-Agent: Alpine 1.00 (DEB 882 2007-12-20) +MIME-Version: 1.0 +Content-Type: TEXT/PLAIN; charset=US-ASCII +Sender: linux-omap-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-omap@vger.kernel.org +X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information. +X-UTwente-MailScanner: Found to be clean +X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org +X-Spam-Status: No +X-OriginalArrivalTime: 15 Jul 2008 19:01:01.0610 (UTC) FILETIME=[1FBA68A0:01C8E6AD] + + +omap_i2c_idle() sets an internal flag, "dev->idle", instructing its +ISR to decline interrupts. It sets this flag before it actually masks +the interrupts on the I2C controller. This is problematic, since an +I2C interrupt could arrive after dev->idle is set, but before the +interrupt source is masked. When this happens, Linux disables the I2C +controller's IRQ, causing all future transactions on the bus to fail. + +Symptoms, happening on about 7% of boots: + + irq 56: nobody cared (try booting with the "irqpoll" option) + + Disabling IRQ #56 + i2c_omap i2c_omap.1: controller timed out + +In omap_i2c_idle(), this patch sets dev->idle only after the interrupt +mask write to the I2C controller has left the ARM write buffer. +That's probably the major offender. For additional prophylaxis, in +omap_i2c_unidle(), the patch clears the dev->idle flag before +interrupts are enabled, rather than afterwards. + +The patch has survived twenty-two reboots on the 3430SDP here without +wedging I2C1. Not absolutely dispositive, but promising! + + +Signed-off-by: Paul Walmsley +--- + + drivers/i2c/busses/i2c-omap.c | 10 ++++++++-- + 1 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c +index 55779f5..ed7e9ad 100644 +--- a/drivers/i2c/busses/i2c-omap.c ++++ b/drivers/i2c/busses/i2c-omap.c +@@ -209,22 +209,28 @@ static void omap_i2c_unidle(struct omap_i2c_dev *dev) + if (dev->iclk != NULL) + clk_enable(dev->iclk); + clk_enable(dev->fclk); ++ dev->idle = 0; + if (dev->iestate) + omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate); +- dev->idle = 0; + } + + static void omap_i2c_idle(struct omap_i2c_dev *dev) + { + u16 iv; + +- dev->idle = 1; + dev->iestate = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG); + omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0); + if (dev->rev1) + iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); + else + omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, dev->iestate); ++ /* ++ * The wmb() is to ensure that the I2C interrupt mask write ++ * reaches the I2C controller before the dev->idle store ++ * occurs. ++ */ ++ wmb(); ++ dev->idle = 1; + clk_disable(dev->fclk); + if (dev->iclk != NULL) + clk_disable(dev->iclk); +-- +To unsubscribe from this list: send the line "unsubscribe linux-omap" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html + diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 53bcd297d9..800a0eb02e 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -5,7 +5,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MA SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" -PR = "r44" +PR = "r45" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -30,6 +30,7 @@ SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ file://07-set-burst-size.diff;patch=1 \ file://cache-display-fix.patch;patch=1 \ file://serialfix.diff;patch=1 \ + file://i2c-omap-race-fix.diff;patch=1 \ " SRC_URI_append_omap3evm = " file://no-harry-potter.diff;patch=1 \ -- cgit v1.2.3 From ff44a61a9b672aab9b86c2870b6972fbb040440b Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 16 Jul 2008 04:49:21 +0000 Subject: Fix rsync source path. --- packages/rsync/rsync.inc | 2 +- packages/rsync/rsync_2.6.9.bb | 2 +- packages/rsync/rsync_3.0.0.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/rsync/rsync.inc b/packages/rsync/rsync.inc index 7ec83293ff..75f4c46303 100644 --- a/packages/rsync/rsync.inc +++ b/packages/rsync/rsync.inc @@ -7,7 +7,7 @@ DEPENDS += "popt" inherit autotools -SRC_URI = "http://rsync.samba.org/ftp/rsync/old-versions/rsync-${PV}.tar.gz" +SRC_URI = "http://rsync.samba.org/ftp/rsync/src/rsync-${PV}.tar.gz" EXTRA_OEMAKE='STRIP=""' diff --git a/packages/rsync/rsync_2.6.9.bb b/packages/rsync/rsync_2.6.9.bb index 067df4f2f3..77cb0b2b67 100644 --- a/packages/rsync/rsync_2.6.9.bb +++ b/packages/rsync/rsync_2.6.9.bb @@ -1,5 +1,5 @@ require rsync.inc -PR = "r2" +PR = "r3" SRC_URI += "file://rsyncd.conf" diff --git a/packages/rsync/rsync_3.0.0.bb b/packages/rsync/rsync_3.0.0.bb index 99bec628d3..cd8a986f8f 100644 --- a/packages/rsync/rsync_3.0.0.bb +++ b/packages/rsync/rsync_3.0.0.bb @@ -1,6 +1,6 @@ require rsync.inc -PR = "r0" +PR = "r1" SRC_URI += "\ file://m4.patch;patch=1 \ -- cgit v1.2.3 From 1329a4624bfec8dc8dcf86c2a6e14125a32d9021 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 07:40:40 +0000 Subject: python-evas cvs quickhack to make it work with newer pyrex --- packages/python/python-evas_cvs.bb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/python/python-evas_cvs.bb b/packages/python/python-evas_cvs.bb index 92f4466a24..57e28b28ed 100644 --- a/packages/python/python-evas_cvs.bb +++ b/packages/python/python-evas_cvs.bb @@ -3,6 +3,10 @@ DEPENDS += "evas" PV = "0.2.1+cvs${SRCDATE}" PR = "r0" +do_compile_prepend() { + touch include/evas/__init__.py +} + do_stage() { distutils_stage_all } -- cgit v1.2.3 From 74a560bfe000c60dedd513604cea372dbac6590a Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 07:51:03 +0000 Subject: python 2.5.2 add parameter to run python in unoptimized bytecode mode Thanks to the default-is-optimized patch, this python was running in optimized mode all the time, there was no way to run it unoptimized. However this is necessary at times (e.g. if you want to run code that contains 'assert' statements, since optimized bytecode strips these out), so I added a new command line parameter 'N' to python that allows you to run it unoptimized. --- .../python/python-2.5.2/default-is-optimized.patch | 41 ++++++++++++++++++++-- packages/python/python_2.5.2.bb | 2 +- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/packages/python/python-2.5.2/default-is-optimized.patch b/packages/python/python-2.5.2/default-is-optimized.patch index 6beeb6e022..072bf0b059 100644 --- a/packages/python/python-2.5.2/default-is-optimized.patch +++ b/packages/python/python-2.5.2/default-is-optimized.patch @@ -1,7 +1,7 @@ -Index: Python-2.5.1/Python/compile.c +Index: Python-2.5.2/Python/compile.c =================================================================== ---- Python-2.5.1.orig/Python/compile.c -+++ Python-2.5.1/Python/compile.c +--- Python-2.5.2.orig/Python/compile.c ++++ Python-2.5.2/Python/compile.c @@ -30,7 +30,7 @@ #include "symtable.h" #include "opcode.h" @@ -11,3 +11,38 @@ Index: Python-2.5.1/Python/compile.c /* ISSUES: +Index: Python-2.5.2/Modules/main.c +=================================================================== +--- Python-2.5.2.orig/Modules/main.c ++++ Python-2.5.2/Modules/main.c +@@ -40,7 +40,7 @@ static char **orig_argv; + static int orig_argc; + + /* command line options */ +-#define BASE_OPTS "c:dEhim:OQ:StuUvVW:xX?" ++#define BASE_OPTS "c:dEhim:ONQ:StuUvVW:xX?" + + #ifndef RISCOS + #define PROGRAM_OPTS BASE_OPTS +@@ -68,8 +68,7 @@ Options and arguments (and corresponding + "; + static char *usage_2 = "\ + -m mod : run library module as a script (terminates option list)\n\ +--O : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\ +--OO : remove doc-strings in addition to the -O optimizations\n\ ++-N : do NOT optimize generated bytecode\n\ + -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\ + -S : don't imply 'import site' on initialization\n\ + -t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\ +@@ -302,7 +301,10 @@ Py_Main(int argc, char **argv) + break; + + case 'O': +- Py_OptimizeFlag++; ++ fprintf(stderr, "-O is already default in this version. Ignoring\n"); ++ ++ case 'N': ++ Py_OptimizeFlag=0; + break; + + case 'S': diff --git a/packages/python/python_2.5.2.bb b/packages/python/python_2.5.2.bb index 22aac7c9ee..9617871fff 100644 --- a/packages/python/python_2.5.2.bb +++ b/packages/python/python_2.5.2.bb @@ -6,7 +6,7 @@ PRIORITY = "optional" DEPENDS = "python-native readline zlib gdbm openssl sqlite3 tcl tk" DEPENDS_sharprom = "python-native readline zlib gdbm openssl" # bump this on every change in contrib/python/generate-manifest-2.5.py -PR = "ml4" +PR = "ml6" PYTHON_MAJMIN = "2.5" -- cgit v1.2.3 From 19b05c7055f59c11f0f16ca5b5404f35eb7ea13c Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 08:06:53 +0000 Subject: preferred-om-2008-versions: bump pyrex --- conf/distro/include/preferred-om-2008-versions.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc index a9fbb3067d..a03f42fe0d 100644 --- a/conf/distro/include/preferred-om-2008-versions.inc +++ b/conf/distro/include/preferred-om-2008-versions.inc @@ -1555,8 +1555,8 @@ PREFERRED_VERSION_python-pymp3 ?= "0.3.4" PREFERRED_VERSION_python-pyrad ?= "0.8" PREFERRED_VERSION_python-pyraf ?= "1.4" PREFERRED_VERSION_python-pyreverse ?= "0.5.2" -PREFERRED_VERSION_python-pyrex ?= "0.9.5.1a" -PREFERRED_VERSION_python-pyrex-native ?= "0.9.5.1a" +PREFERRED_VERSION_python-pyrex ?= "0.9.8" +PREFERRED_VERSION_python-pyrex-native ?= "0.9.8" PREFERRED_VERSION_python-pyro ?= "3.7" PREFERRED_VERSION_python-pyserial ?= "2.2" PREFERRED_VERSION_python-pytester ?= "0.6.0" -- cgit v1.2.3 From fd219d6869f897f3d559227f6a7b86f02f60696b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 08:08:28 +0000 Subject: moko-autorev.inc: remove duplicate entry --- conf/distro/include/moko-autorev.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/distro/include/moko-autorev.inc b/conf/distro/include/moko-autorev.inc index c411149cd9..9043345134 100644 --- a/conf/distro/include/moko-autorev.inc +++ b/conf/distro/include/moko-autorev.inc @@ -21,7 +21,6 @@ SRCREV_pn-openmoko-agpsui ?= "${AUTOREV}" SRCREV_pn-openmoko-alsa-scenarios ?= "${AUTOREV}" SRCREV_pn-openmoko-appearance ?= "${AUTOREV}" SRCREV_pn-openmoko-appmanager2 ?= "${AUTOREV}" -SRCREV_pn-openmoko-appearance ?= "${AUTOREV}" SRCREV_pn-openmoko-browser2 ?= "${AUTOREV}" SRCREV_pn-openmoko-calculator2 ?= "${AUTOREV}" SRCREV_pn-openmoko-common2 ?= "${AUTOREV}" -- cgit v1.2.3 From c178f8f3a7815663493e6d5cac0ccb3959a812b6 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 08:08:51 +0000 Subject: sane-srcdates: bump EFL srcdate --- conf/distro/include/sane-srcdates.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc index 10a0330f17..f248a81bba 100644 --- a/conf/distro/include/sane-srcdates.inc +++ b/conf/distro/include/sane-srcdates.inc @@ -52,7 +52,7 @@ SRCDATE_gtkhtml2 ?= "20060323" # Enlightenment Foundation Libraries # Caution: This is not alphabetically, but (roughly) dependency-sorted. # Please leave it like that. -EFL_SRCDATE ?= "20080610" +EFL_SRCDATE ?= "20080716" SRCDATE_edb-native ?= "${EFL_SRCDATE}" SRCDATE_edb ?= "${EFL_SRCDATE}" SRCDATE_eet-native ?= "${EFL_SRCDATE}" -- cgit v1.2.3 From 4a5149ccbb13a8425e672d4c1b82754456b747ed Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 08:11:30 +0000 Subject: remove deprecated freesmartphone.org recipes --- .../freesmartphone/python-odeviced/.mtn2git_empty | 0 packages/freesmartphone/python-odeviced/odeviced | 40 ---------------------- .../freesmartphone/python-odeviced/odeviced.conf | 0 .../python-odeviced/om-gta02/.mtn2git_empty | 0 .../python-odeviced/om-gta02/odeviced.conf | 8 ----- packages/freesmartphone/python-odeviced_git.bb | 35 ------------------- .../freesmartphone/python-oeventd/.mtn2git_empty | 0 packages/freesmartphone/python-oeventd/oeventd | 40 ---------------------- packages/freesmartphone/python-oeventd_git.bb | 34 ------------------ .../freesmartphone/python-ophoned/.mtn2git_empty | 0 packages/freesmartphone/python-ophoned/ophoned | 40 ---------------------- packages/freesmartphone/python-ophoned_git.bb | 35 ------------------- .../freesmartphone/python-ousaged/.mtn2git_empty | 0 packages/freesmartphone/python-ousaged/ousaged | 40 ---------------------- packages/freesmartphone/python-ousaged_git.bb | 36 ------------------- 15 files changed, 308 deletions(-) delete mode 100644 packages/freesmartphone/python-odeviced/.mtn2git_empty delete mode 100644 packages/freesmartphone/python-odeviced/odeviced delete mode 100644 packages/freesmartphone/python-odeviced/odeviced.conf delete mode 100644 packages/freesmartphone/python-odeviced/om-gta02/.mtn2git_empty delete mode 100644 packages/freesmartphone/python-odeviced/om-gta02/odeviced.conf delete mode 100644 packages/freesmartphone/python-odeviced_git.bb delete mode 100644 packages/freesmartphone/python-oeventd/.mtn2git_empty delete mode 100644 packages/freesmartphone/python-oeventd/oeventd delete mode 100644 packages/freesmartphone/python-oeventd_git.bb delete mode 100644 packages/freesmartphone/python-ophoned/.mtn2git_empty delete mode 100644 packages/freesmartphone/python-ophoned/ophoned delete mode 100644 packages/freesmartphone/python-ophoned_git.bb delete mode 100644 packages/freesmartphone/python-ousaged/.mtn2git_empty delete mode 100644 packages/freesmartphone/python-ousaged/ousaged delete mode 100644 packages/freesmartphone/python-ousaged_git.bb diff --git a/packages/freesmartphone/python-odeviced/.mtn2git_empty b/packages/freesmartphone/python-odeviced/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/freesmartphone/python-odeviced/odeviced b/packages/freesmartphone/python-odeviced/odeviced deleted file mode 100644 index 52d3a1d196..0000000000 --- a/packages/freesmartphone/python-odeviced/odeviced +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# -# odeviced This shell script starts and stops the open device daemon. -# -# chkconfig: 345 90 20 -# description: py-odeviced is the open device daemon -# processname: python - -PATH=/bin:/usr/bin:/sbin:/usr/sbin -NAME=odeviced - -[ -f /etc/default/rcS ] && . /etc/default/rcS - -case "$1" in - start) - echo -n "Starting open device daemon: " - start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -x /usr/bin/odeviced - if [ $? = 0 ]; then - echo "(ok)" - else - echo "(failed)" - fi - ;; - stop) - echo -n "Stopping open device daemon: " - start-stop-daemon --stop --pidfile /var/run/${NAME}.pid --oknodo - rm -f /var/run/${NAME}.pid - echo "(done)" - ;; - restart|force-reload) - $0 stop - $0 start - ;; - *) - echo "Usage: /etc/init.d/odeviced {start|stop|restart|force-reload}" - exit 1 - ;; -esac - -exit 0 diff --git a/packages/freesmartphone/python-odeviced/odeviced.conf b/packages/freesmartphone/python-odeviced/odeviced.conf deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/freesmartphone/python-odeviced/om-gta02/.mtn2git_empty b/packages/freesmartphone/python-odeviced/om-gta02/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/freesmartphone/python-odeviced/om-gta02/odeviced.conf b/packages/freesmartphone/python-odeviced/om-gta02/odeviced.conf deleted file mode 100644 index 0076639f98..0000000000 --- a/packages/freesmartphone/python-odeviced/om-gta02/odeviced.conf +++ /dev/null @@ -1,8 +0,0 @@ -[idlenotifier] -# don't read from accellerometers for now -ignoreinput=2,3 - -[input] -# don't read from accellerometers for now -ignoreinput=2,3 - diff --git a/packages/freesmartphone/python-odeviced_git.bb b/packages/freesmartphone/python-odeviced_git.bb deleted file mode 100644 index 121a434585..0000000000 --- a/packages/freesmartphone/python-odeviced_git.bb +++ /dev/null @@ -1,35 +0,0 @@ -DESCRIPTION = "The Open Device Daemon Prototype in Python" -HOMEPAGE = "http://www.freesmartphone.org/mediawiki/index.php/Implementations/OpenDeviceDaemon" -AUTHOR = "Michael 'Mickey' Lauer " -SECTION = "console/network" -DEPENDS = "python-cython-native python-pyrex-native" -LICENSE = "GPLv2" -PV = "0.7.9+gitr${SRCREV}" -PR = "r2" - -inherit distutils update-rc.d - -INITSCRIPT_NAME = "odeviced" -INITSCRIPT_PARAMS = "defaults 21" - -SRC_URI = "${FREESMARTPHONE_GIT}/python-odeviced.git;protocol=git;branch=master \ - file://odeviced \ - file://odeviced.conf" -S = "${WORKDIR}/git" - -do_install_append() { - install -d ${D}${sysconfdir}/init.d/ - install -m 0755 ${WORKDIR}/odeviced ${D}${sysconfdir}/init.d/ - install -m 0644 ${WORKDIR}/odeviced.conf ${D}${sysconfdir} - install -d ${D}${sysconfdir}/dbus-1/system.d/ - mv -f ${D}${datadir}/etc/dbus-1/system.d/odeviced.conf ${D}${sysconfdir}/dbus-1/system.d/ -} - -RDEPENDS_${PN} += "\ - python-dbus \ - python-pygobject \ - python-pyrtc \ - python-syslog \ -" - -FILES_${PN} += "${sysconfdir}" diff --git a/packages/freesmartphone/python-oeventd/.mtn2git_empty b/packages/freesmartphone/python-oeventd/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/freesmartphone/python-oeventd/oeventd b/packages/freesmartphone/python-oeventd/oeventd deleted file mode 100644 index 8ed467b079..0000000000 --- a/packages/freesmartphone/python-oeventd/oeventd +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# -# odeviced This shell script starts and stops the open event daemon. -# -# chkconfig: 345 90 20 -# description: py-oeventd is the open evend daemon -# processname: python - -PATH=/bin:/usr/bin:/sbin:/usr/sbin -NAME=oeventd - -[ -f /etc/default/rcS ] && . /etc/default/rcS - -case "$1" in - start) - echo -n "Starting open event daemon: " - start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -x /usr/bin/oeventd - if [ $? = 0 ]; then - echo "(ok)" - else - echo "(failed)" - fi - ;; - stop) - echo -n "Stopping open event daemon: " - start-stop-daemon --stop --pidfile /var/run/${NAME}.pid --oknodo - rm -f /var/run/${NAME}.pid - echo "(done)" - ;; - restart|force-reload) - $0 stop - $0 start - ;; - *) - echo "Usage: /etc/init.d/oeventd {start|stop|restart|force-reload}" - exit 1 - ;; -esac - -exit 0 diff --git a/packages/freesmartphone/python-oeventd_git.bb b/packages/freesmartphone/python-oeventd_git.bb deleted file mode 100644 index c08e1af3b7..0000000000 --- a/packages/freesmartphone/python-oeventd_git.bb +++ /dev/null @@ -1,34 +0,0 @@ -DESCRIPTION = "The Open Event Daemon Prototype in Python" -HOMEPAGE = "http://www.freesmartphone.org/mediawiki/index.php/Implementations/OpenEventDaemon" -AUTHOR = "Michael 'Mickey' Lauer " -SECTION = "console/network" -DEPENDS = "python-cython-native python-pyrex-native" -LICENSE = "GPLv2" -PV = "0.0.0+gitr${SRCREV}" -PR = "r1" - -inherit distutils update-rc.d - -INITSCRIPT_NAME = "oeventd" -INITSCRIPT_PARAMS = "defaults 21" - -SRC_URI = "\ - ${FREESMARTPHONE_GIT}/eventd.git;protocol=git;branch=master \ - file://oeventd \ -" -S = "${WORKDIR}/git" - -do_install_append() { - install -d ${D}${sysconfdir}/init.d/ - install -m 0755 ${WORKDIR}/oeventd ${D}${sysconfdir}/init.d/ - install -d ${D}${sysconfdir}/dbus-1/system.d/ - mv -f ${D}${datadir}/etc/dbus-1/system.d/oeventd.conf ${D}${sysconfdir}/dbus-1/system.d/ -} - -RDEPENDS_${PN} += "\ - python-dbus \ - python-pygobject \ - python-syslog \ -" - -FILES_${PN} += "${sysconfdir}" diff --git a/packages/freesmartphone/python-ophoned/.mtn2git_empty b/packages/freesmartphone/python-ophoned/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/freesmartphone/python-ophoned/ophoned b/packages/freesmartphone/python-ophoned/ophoned deleted file mode 100644 index edc800711a..0000000000 --- a/packages/freesmartphone/python-ophoned/ophoned +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# -# ophoned This shell script starts and stops the open phone daemon. -# -# chkconfig: 345 90 20 -# description: py-ophoned is the open phone daemon -# processname: python - -PATH=/bin:/usr/bin:/sbin:/usr/sbin -NAME=ophoned - -[ -f /etc/default/rcS ] && . /etc/default/rcS - -case "$1" in - start) - echo -n "Starting open phone daemon: " - start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -x /usr/bin/ophoned - if [ $? = 0 ]; then - echo "(ok)" - else - echo "(failed)" - fi - ;; - stop) - echo -n "Stopping open phone daemon: " - start-stop-daemon --stop --pidfile /var/run/${NAME}.pid --oknodo - rm -f /var/run/${NAME}.pid - echo "(done)" - ;; - restart|force-reload) - $0 stop - $0 start - ;; - *) - echo "Usage: /etc/init.d/ophoned {start|stop|restart|force-reload}" - exit 1 - ;; -esac - -exit 0 diff --git a/packages/freesmartphone/python-ophoned_git.bb b/packages/freesmartphone/python-ophoned_git.bb deleted file mode 100644 index 7f30f4c24a..0000000000 --- a/packages/freesmartphone/python-ophoned_git.bb +++ /dev/null @@ -1,35 +0,0 @@ -DESCRIPTION = "The Open Phone Daemon (Python Implementation)" -HOMEPAGE = "http://www.freesmartphone.org/mediawiki/index.php/Implementations/OpenPhoneServer" -AUTHOR = "Michael 'Mickey' Lauer " -SECTION = "console/network" -DEPENDS = "python-cython-native python-pyrex-native" -LICENSE = "GPLv2" -PV = "0.0.0+gitr${SRCREV}" -PR = "r1" - -inherit distutils update-rc.d - -INITSCRIPT_NAME = "ophoned" -INITSCRIPT_PARAMS = "defaults 21" - -SRC_URI = "${FREESMARTPHONE_GIT}/python-ophoned.git;protocol=git;branch=master \ - file://ophoned" -S = "${WORKDIR}/git" - -do_install_append() { - install -d ${D}${sysconfdir}/init.d/ - install -m 0755 ${WORKDIR}/ophoned ${D}${sysconfdir}/init.d/ -# install -m 0644 ${WORKDIR}/ophoned.conf ${D}${sysconfdir} - install -d ${D}${sysconfdir}/dbus-1/system.d/ - mv -f ${D}${datadir}/etc/dbus-1/system.d/ophoned.conf ${D}${sysconfdir}/dbus-1/system.d/ -} - -RDEPENDS_${PN} += "\ - python-dbus \ - python-pygobject \ - python-pyrtc \ - python-pyserial \ - python-syslog \ -" - -FILES_${PN} += "${sysconfdir}" diff --git a/packages/freesmartphone/python-ousaged/.mtn2git_empty b/packages/freesmartphone/python-ousaged/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/freesmartphone/python-ousaged/ousaged b/packages/freesmartphone/python-ousaged/ousaged deleted file mode 100644 index 7b62d7f93c..0000000000 --- a/packages/freesmartphone/python-ousaged/ousaged +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# -# odeviced This shell script starts and stops the open device daemon. -# -# chkconfig: 345 90 20 -# description: py-ousaged is the open usage daemon -# processname: python - -PATH=/bin:/usr/bin:/sbin:/usr/sbin -NAME=odeviced - -[ -f /etc/default/rcS ] && . /etc/default/rcS - -case "$1" in - start) - echo -n "Starting open usage daemon: " - start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -x /usr/bin/ousaged - if [ $? = 0 ]; then - echo "(ok)" - else - echo "(failed)" - fi - ;; - stop) - echo -n "Stopping open usage daemon: " - start-stop-daemon --stop --pidfile /var/run/${NAME}.pid --oknodo - rm -f /var/run/${NAME}.pid - echo "(done)" - ;; - restart|force-reload) - $0 stop - $0 start - ;; - *) - echo "Usage: /etc/init.d/ousaged {start|stop|restart|force-reload}" - exit 1 - ;; -esac - -exit 0 diff --git a/packages/freesmartphone/python-ousaged_git.bb b/packages/freesmartphone/python-ousaged_git.bb deleted file mode 100644 index 1188da34a3..0000000000 --- a/packages/freesmartphone/python-ousaged_git.bb +++ /dev/null @@ -1,36 +0,0 @@ -DESCRIPTION = "The Open Usage Daemon Prototype in Python" -HOMEPAGE = "http://www.freesmartphone.org/mediawiki/index.php/Implementations/OpenUsageDaemon" -AUTHOR = "Michael 'Mickey' Lauer " -SECTION = "console/network" -DEPENDS = "python-cython-native python-pyrex-native" -LICENSE = "GPLv2" -PV = "0.7.9+gitr${SRCREV}" -PR = "r1" - -inherit distutils update-rc.d - -INITSCRIPT_NAME = "ousaged" -INITSCRIPT_PARAMS = "defaults 21" - -SRC_URI = "\ - ${FREESMARTPHONE_GIT}/usaged.git;protocol=git;branch=master \ - file://ousaged \ -" -S = "${WORKDIR}/git" - -do_install_append() { - install -d ${D}${sysconfdir}/init.d/ - install -m 0755 ${WORKDIR}/ousaged ${D}${sysconfdir}/init.d/ - install -d ${D}${sysconfdir}/dbus-1/system.d/ - mv -f ${D}${datadir}/etc/dbus-1/system.d/ousaged.conf ${D}${sysconfdir}/dbus-1/system.d/ -} - -RDEPENDS_${PN} += "\ - python-dbus \ - python-pygobject \ - python-pyrtc \ - python-syslog \ - python-odeviced \ -" - -FILES_${PN} += "${sysconfdir}" -- cgit v1.2.3 From 4fe64e497bb8af2ca8298c7b5af3f52d68e0467d Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 08:12:33 +0000 Subject: remove deprecated openmoko stuff, it's no longer buildable anyways --- packages/openmoko-3rdparty/.mtn2git_empty | 0 packages/openmoko-3rdparty/omext_0.2.bb | 12 + .../openmoko-3rdparty/openmoko-gps_0.0.1+svnr9.bb | 33 + .../openmoko-3rdparty/settingsgui_0.7+0.8-beta.bb | 11 + packages/openmoko-apps/.mtn2git_empty | 0 packages/openmoko-apps/files/.mtn2git_empty | 0 .../openmoko-apps/files/unbreak-messages.patch | 29 - packages/openmoko-apps/omext_0.2.bb | 12 - packages/openmoko-apps/openmoko-appmanager_svn.bb | 7 - packages/openmoko-apps/openmoko-calculator_svn.bb | 9 - packages/openmoko-apps/openmoko-dialer_svn.bb | 9 - packages/openmoko-apps/openmoko-footer_svn.bb | 6 - packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb | 33 - packages/openmoko-apps/openmoko-messages_svn.bb | 7 - .../openmoko-simplemediaplayer_svn.bb | 19 - packages/openmoko-apps/openmoko-taskmanager_svn.bb | 6 - .../openmoko-apps/openmoko-terminal/.mtn2git_empty | 0 .../openmoko-apps/openmoko-terminal/gtkterm2rc | 85 -- .../openmoko-terminal/openmoko-terminal.desktop | 12 - .../openmoko-terminal/openmoko-terminal.png | Bin 11078 -> 0 bytes packages/openmoko-apps/openmoko-terminal_svn.bb | 34 - packages/openmoko-inputmethods/.mtn2git_empty | 0 .../openmoko-inputmethods/openmoko-keyboard_svn.bb | 20 - packages/openmoko-pim/.mtn2git_empty | 0 packages/openmoko-pim/files/.mtn2git_empty | 0 packages/openmoko-pim/files/index.theme | 654 ------------ packages/openmoko-pim/files/intltool-update.in | 1089 -------------------- packages/openmoko-pim/files/openmoko-dates.desktop | 12 - packages/openmoko-pim/files/openmoko-dates.png | Bin 12121 -> 0 bytes packages/openmoko-pim/files/stock_contact.png | Bin 2311 -> 0 bytes packages/openmoko-pim/files/stock_person.png | Bin 2280 -> 0 bytes packages/openmoko-pim/openmoko-contacts_svn.bb | 31 - packages/openmoko-pim/openmoko-dates_svn.bb | 29 - packages/openmoko-pim/openmoko-tasks_svn.bb | 15 - packages/openmoko-pim/openmoko-today_svn.bb | 8 - packages/openmoko-tools/.mtn2git_empty | 0 .../openmoko-tools/openmoko-chordmaster_svn.bb | 6 - packages/openmoko-tools/pty-forward-native.bb | 24 - packages/openmoko-tools/serial-forward.bb | 15 - packages/openmoko2/settingsgui_0.7+0.8-beta.bb | 11 - packages/serial-utils/.mtn2git_empty | 0 packages/serial-utils/pty-forward-native.bb | 24 + packages/serial-utils/serial-forward.bb | 15 + 43 files changed, 95 insertions(+), 2182 deletions(-) create mode 100644 packages/openmoko-3rdparty/.mtn2git_empty create mode 100644 packages/openmoko-3rdparty/omext_0.2.bb create mode 100644 packages/openmoko-3rdparty/openmoko-gps_0.0.1+svnr9.bb create mode 100644 packages/openmoko-3rdparty/settingsgui_0.7+0.8-beta.bb delete mode 100644 packages/openmoko-apps/.mtn2git_empty delete mode 100644 packages/openmoko-apps/files/.mtn2git_empty delete mode 100644 packages/openmoko-apps/files/unbreak-messages.patch delete mode 100644 packages/openmoko-apps/omext_0.2.bb delete mode 100644 packages/openmoko-apps/openmoko-appmanager_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-calculator_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-dialer_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-footer_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb delete mode 100644 packages/openmoko-apps/openmoko-messages_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-simplemediaplayer_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-taskmanager_svn.bb delete mode 100644 packages/openmoko-apps/openmoko-terminal/.mtn2git_empty delete mode 100644 packages/openmoko-apps/openmoko-terminal/gtkterm2rc delete mode 100644 packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop delete mode 100644 packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png delete mode 100644 packages/openmoko-apps/openmoko-terminal_svn.bb delete mode 100644 packages/openmoko-inputmethods/.mtn2git_empty delete mode 100644 packages/openmoko-inputmethods/openmoko-keyboard_svn.bb delete mode 100644 packages/openmoko-pim/.mtn2git_empty delete mode 100644 packages/openmoko-pim/files/.mtn2git_empty delete mode 100644 packages/openmoko-pim/files/index.theme delete mode 100644 packages/openmoko-pim/files/intltool-update.in delete mode 100644 packages/openmoko-pim/files/openmoko-dates.desktop delete mode 100644 packages/openmoko-pim/files/openmoko-dates.png delete mode 100644 packages/openmoko-pim/files/stock_contact.png delete mode 100644 packages/openmoko-pim/files/stock_person.png delete mode 100644 packages/openmoko-pim/openmoko-contacts_svn.bb delete mode 100644 packages/openmoko-pim/openmoko-dates_svn.bb delete mode 100644 packages/openmoko-pim/openmoko-tasks_svn.bb delete mode 100644 packages/openmoko-pim/openmoko-today_svn.bb delete mode 100644 packages/openmoko-tools/.mtn2git_empty delete mode 100644 packages/openmoko-tools/openmoko-chordmaster_svn.bb delete mode 100644 packages/openmoko-tools/pty-forward-native.bb delete mode 100644 packages/openmoko-tools/serial-forward.bb delete mode 100644 packages/openmoko2/settingsgui_0.7+0.8-beta.bb create mode 100644 packages/serial-utils/.mtn2git_empty create mode 100644 packages/serial-utils/pty-forward-native.bb create mode 100644 packages/serial-utils/serial-forward.bb diff --git a/packages/openmoko-3rdparty/.mtn2git_empty b/packages/openmoko-3rdparty/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/openmoko-3rdparty/omext_0.2.bb b/packages/openmoko-3rdparty/omext_0.2.bb new file mode 100644 index 0000000000..203b84e3df --- /dev/null +++ b/packages/openmoko-3rdparty/omext_0.2.bb @@ -0,0 +1,12 @@ +DESCRIPTION = "Openmoko extensionhandler" +LICENSE = "GPLv2" + +DEPENDS = "dbus-glib" + +SRC_URI = "http://www.devzero.net/openmoko/dist/omext-${PV}.tar.gz" + +inherit autotools pkgconfig + +S = "{WORKDIR}/openmoko-extensionhandler" + + diff --git a/packages/openmoko-3rdparty/openmoko-gps_0.0.1+svnr9.bb b/packages/openmoko-3rdparty/openmoko-gps_0.0.1+svnr9.bb new file mode 100644 index 0000000000..71a9f3cdb6 --- /dev/null +++ b/packages/openmoko-3rdparty/openmoko-gps_0.0.1+svnr9.bb @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright Matthias Hentges (c) 2008 +# License: MIT (see http://www.opensource.org/licenses/mit-license.php +# for a copy of the license) +# +# Filename: openmoko-gps_svn.bb +# Date: 20080101 (YMD) + +DESCRIPTION = "A tiny GPS output parser for the Openmoko platform." +HOMEPAGE = "http://forge.bearstech.com/trac/wiki/OpenmokoGPS" +SECTION = "base" +LICENSE = "GPL" + +RDEPENDS = "python-pygtk" + +PR = "r0" + +###################################################################################### + +SRC_URI = "svn://forge.bearstech.com/bearforge/openmoko;module=gps;rev=9" + +S = "${WORKDIR}/gps" + +do_install() { + install -d ${D}/usr/bin + install -d ${D}/usr/share/applications/ + install -d ${D}/usr/share/pixmaps/ + + install -m 0755 ${S}/gps_reader.py ${D}/usr/bin + install -m 0644 ${S}/openmoko-gps.desktop ${D}/usr/share/applications/ + install -m 0644 ${S}/*.png ${D}/usr/share/pixmaps/ +} diff --git a/packages/openmoko-3rdparty/settingsgui_0.7+0.8-beta.bb b/packages/openmoko-3rdparty/settingsgui_0.7+0.8-beta.bb new file mode 100644 index 0000000000..f0d6f84ce6 --- /dev/null +++ b/packages/openmoko-3rdparty/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/openmoko-apps/.mtn2git_empty b/packages/openmoko-apps/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-apps/files/.mtn2git_empty b/packages/openmoko-apps/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-apps/files/unbreak-messages.patch b/packages/openmoko-apps/files/unbreak-messages.patch deleted file mode 100644 index c8d3413c0b..0000000000 --- a/packages/openmoko-apps/files/unbreak-messages.patch +++ /dev/null @@ -1,29 +0,0 @@ -Index: sms-membership-window.c -=================================================================== ---- sms-membership-window.c (wersja 1565) -+++ openmoko-messages/src/sms-membership-window.c (kopia robocza) -@@ -36,9 +36,6 @@ - #define SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SMS_TYPE_MEMBERSHIP_WINDOW, SmsMembershipWindowPrivate)) - - typedef struct _SmsMembershipWindowPrivate SmsMembershipWindowPrivate; --typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, -- GtkTreeIter *iter, -- gpointer data); - - struct _SmsMembershipWindowPrivate - { -Index: main.c -=================================================================== ---- main.c (wersja 1565) -+++ openmoko-messages/src/main.c (kopia robocza) -@@ -41,10 +41,6 @@ - - #include - --typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, -- GtkTreeIter *iter, -- gpointer data); -- - gboolean init_dbus (MessengerData* d) - { - DBusError error; diff --git a/packages/openmoko-apps/omext_0.2.bb b/packages/openmoko-apps/omext_0.2.bb deleted file mode 100644 index 203b84e3df..0000000000 --- a/packages/openmoko-apps/omext_0.2.bb +++ /dev/null @@ -1,12 +0,0 @@ -DESCRIPTION = "Openmoko extensionhandler" -LICENSE = "GPLv2" - -DEPENDS = "dbus-glib" - -SRC_URI = "http://www.devzero.net/openmoko/dist/omext-${PV}.tar.gz" - -inherit autotools pkgconfig - -S = "{WORKDIR}/openmoko-extensionhandler" - - diff --git a/packages/openmoko-apps/openmoko-appmanager_svn.bb b/packages/openmoko-apps/openmoko-appmanager_svn.bb deleted file mode 100644 index 7acc872bc1..0000000000 --- a/packages/openmoko-apps/openmoko-appmanager_svn.bb +++ /dev/null @@ -1,7 +0,0 @@ -DESCRIPTION = "The Openmoko Application Manager" -SECTION = "openmoko/applications" -DEPENDS += "ipkg" -PV = "0.0.1+svnr${SRCREV}" - -inherit openmoko - diff --git a/packages/openmoko-apps/openmoko-calculator_svn.bb b/packages/openmoko-apps/openmoko-calculator_svn.bb deleted file mode 100644 index 39c180cc05..0000000000 --- a/packages/openmoko-apps/openmoko-calculator_svn.bb +++ /dev/null @@ -1,9 +0,0 @@ -DESCRIPTION = "The Openmoko Calculator Application" -SECTION = "openmoko/applications" -AUTHOR = "Rodolphe Ortalo " - -PV = "0.0.3+svnr${SRCREV}" -PR = "r0" - -inherit openmoko - diff --git a/packages/openmoko-apps/openmoko-dialer_svn.bb b/packages/openmoko-apps/openmoko-dialer_svn.bb deleted file mode 100644 index 8a0f3fd999..0000000000 --- a/packages/openmoko-apps/openmoko-dialer_svn.bb +++ /dev/null @@ -1,9 +0,0 @@ -DESCRIPTION = "The Openmoko Dialer" -SECTION = "openmoko/applications" -PV = "0.0.1+svnr${SRCREV}" - -inherit openmoko - -DEPENDS += " eds-dbus libgsmd" - - diff --git a/packages/openmoko-apps/openmoko-footer_svn.bb b/packages/openmoko-apps/openmoko-footer_svn.bb deleted file mode 100644 index 83ab7ab045..0000000000 --- a/packages/openmoko-apps/openmoko-footer_svn.bb +++ /dev/null @@ -1,6 +0,0 @@ -DESCRIPTION = "The Openmoko Footer" -SECTION = "openmoko/applications" -PV = "0.0.1+svnr${SRCREV}" - -inherit openmoko - diff --git a/packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb b/packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb deleted file mode 100644 index 71a9f3cdb6..0000000000 --- a/packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb +++ /dev/null @@ -1,33 +0,0 @@ -#! /bin/sh -# -# Copyright Matthias Hentges (c) 2008 -# License: MIT (see http://www.opensource.org/licenses/mit-license.php -# for a copy of the license) -# -# Filename: openmoko-gps_svn.bb -# Date: 20080101 (YMD) - -DESCRIPTION = "A tiny GPS output parser for the Openmoko platform." -HOMEPAGE = "http://forge.bearstech.com/trac/wiki/OpenmokoGPS" -SECTION = "base" -LICENSE = "GPL" - -RDEPENDS = "python-pygtk" - -PR = "r0" - -###################################################################################### - -SRC_URI = "svn://forge.bearstech.com/bearforge/openmoko;module=gps;rev=9" - -S = "${WORKDIR}/gps" - -do_install() { - install -d ${D}/usr/bin - install -d ${D}/usr/share/applications/ - install -d ${D}/usr/share/pixmaps/ - - install -m 0755 ${S}/gps_reader.py ${D}/usr/bin - install -m 0644 ${S}/openmoko-gps.desktop ${D}/usr/share/applications/ - install -m 0644 ${S}/*.png ${D}/usr/share/pixmaps/ -} diff --git a/packages/openmoko-apps/openmoko-messages_svn.bb b/packages/openmoko-apps/openmoko-messages_svn.bb deleted file mode 100644 index a79353b603..0000000000 --- a/packages/openmoko-apps/openmoko-messages_svn.bb +++ /dev/null @@ -1,7 +0,0 @@ -DESCRIPTION = "The Openmoko Messaging Application" -SECTION = "openmoko/applications" - -PV = "0.0.1+svnr${SRCREV}" -PR = "r2" - -inherit openmoko diff --git a/packages/openmoko-apps/openmoko-simplemediaplayer_svn.bb b/packages/openmoko-apps/openmoko-simplemediaplayer_svn.bb deleted file mode 100644 index c90d35e3d5..0000000000 --- a/packages/openmoko-apps/openmoko-simplemediaplayer_svn.bb +++ /dev/null @@ -1,19 +0,0 @@ -DESCRIPTION = "The Openmoko Media Player" -SECTION = "openmoko/applications" -DEPENDS += "alsa-lib dbus-glib id3lib libvorbis" -PV = "0.0.1+svnr${SRCREV}" -PR = "r1" - -inherit openmoko - -PARALLEL_MAKE ="" - -do_install_prepend() { - touch mkinstalldirs -} - - -FILES_${PN} += " \ - ${datadir}/images \ - ${libdir}/bmp/*/*.so \ - " diff --git a/packages/openmoko-apps/openmoko-taskmanager_svn.bb b/packages/openmoko-apps/openmoko-taskmanager_svn.bb deleted file mode 100644 index e7725bee44..0000000000 --- a/packages/openmoko-apps/openmoko-taskmanager_svn.bb +++ /dev/null @@ -1,6 +0,0 @@ -DESCRIPTION = "The Openmoko Task Manager" -SECTION = "openmoko/applications" -PV = "0.0.1+svnr${SRCREV}" - -inherit openmoko - diff --git a/packages/openmoko-apps/openmoko-terminal/.mtn2git_empty b/packages/openmoko-apps/openmoko-terminal/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-apps/openmoko-terminal/gtkterm2rc b/packages/openmoko-apps/openmoko-terminal/gtkterm2rc deleted file mode 100644 index d68f01ab57..0000000000 --- a/packages/openmoko-apps/openmoko-terminal/gtkterm2rc +++ /dev/null @@ -1,85 +0,0 @@ -## -# 1=RIGHT, 2=TOP, 3=BOTTOM, 4=LEFT -## -notebookPanel=3 - -## -# 0=HIDDEN, 1=LEFT, 2=RIGHT -## -terminalScrollbar=2 - -## -# 0=NO SCROLLBAR -## -maxScrollbackBuffer=999 - -## -# 0=FALSE, 1=TRUE -## -quitPRGonExitLastTerminal=1 - -## -# 0=FALSE, 1=TRUE -## -showTabsByOneTerminal=0 - -## -#A Font name: use gnome-font-properties to look at available fonts -## -terminalFont=BitStream Vera Sans Mono 11 - -## -# Separator for marking with mouse -## -worldClass=-A-Za-z0-9/_:.,?+%= - -## -# 0=FALSE, 1=TRUE -## -scrollOnKeyStroke=1 - -## -# 0=FALSE, 1=TRUE -## -scrollOnOutput=0 - -## -# 0=FALSE, 1=TRUE -## -blink=1 - -## -# 0=FALSE, 1=TRUE -## -beep=1 - -## -# x y Default Terminal Size in pix -## -terminalSize=80 25 - -## -# NEW COLOR Definition -## -red=0x0000 0xcccc 0x0000 0xaaaa 0x0000 0xaaaa 0x6666 0xaaaa 0x0000 0xcccc 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff -grn=0x0000 0xcccc 0x0000 0x0000 0xaaaa 0x5555 0x6666 0x0000 0xaaaa 0xcccc 0x5555 0x5555 0xffff 0xffff 0x5555 0x5555 0xffff 0xffff -blu=0x0000 0xcccc 0x0000 0x0000 0x0000 0x0000 0xffff 0xaaaa 0xaaaa 0xcccc 0x5555 0x5555 0x5555 0x5555 0xffff 0xffff 0xffff 0xffff - -## -# COLOR Definition -## - -## -# First section -## -[section] -match= -worldClass=-A-Za-z0-9/_:.,?+%= -scrollOnKeyStroke=1 -scrollOnOutput=0 -beep=1 -blink=1 -red=0x0000 0xcccc 0x0000 0xaaaa 0x0000 0xaaaa 0x6666 0xaaaa 0x0000 0x0000 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff -grn=0x0000 0xcccc 0x0000 0x0000 0xaaaa 0x5555 0x6666 0x0000 0xaaaa 0xcccc 0x5555 0x5555 0xffff 0xffff 0x5555 0x5555 0xffff 0xffff -blu=0x0000 0xcccc 0x0000 0x0000 0x0000 0x0000 0xffff 0xaaaa 0xaaaa 0x0000 0x5555 0x5555 0x5555 0x5555 0xffff 0xffff 0xffff 0xffff - diff --git a/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop b/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop deleted file mode 100644 index ced7c0b8e2..0000000000 --- a/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Terminal -Comment=Command Line Interface Terminal -Exec=gtkterm2 -Icon=openmoko-terminal -Terminal=false -Type=Application -Categories=GTK;Application;PIM;Office -MimeType=text/x-vcard; -SingleInstance=false -StartupNotify=true diff --git a/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png b/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png deleted file mode 100644 index 56e8e59628..0000000000 Binary files a/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png and /dev/null differ diff --git a/packages/openmoko-apps/openmoko-terminal_svn.bb b/packages/openmoko-apps/openmoko-terminal_svn.bb deleted file mode 100644 index 1a33b03598..0000000000 --- a/packages/openmoko-apps/openmoko-terminal_svn.bb +++ /dev/null @@ -1,34 +0,0 @@ -DESCRIPTION = "The Openmoko Command Line Console" -SECTION = "openmoko/applications" -RDEPENDS += "gtkterm2" -PV = "1.0.0" -PR = "r1" - -inherit openmoko - -SRC_URI = "file://openmoko-terminal.png \ - file://openmoko-terminal.desktop \ - file://gtkterm2rc" - -do_install() { - install -d ${D}${sysconfdir}/skel - install -d ${D}${datadir}/pixmaps - install -d ${D}${datadir}/applications - install -m 0644 ${WORKDIR}/openmoko-terminal.png ${D}${datadir}/pixmaps/ - install -m 0644 ${WORKDIR}/openmoko-terminal.desktop ${D}${datadir}/applications/ - install -m 0644 ${WORKDIR}/gtkterm2rc ${D}${sysconfdir}/skel/.gtkterm2rc -} - -pkg_postinst_openmoko-terminal() { -#!/bin/sh -e -if [ "x$D" != "x" ]; then - exit 1 # don't run at image generation time -else - if [ -e "$HOME/.gtkterm2rc" ]; then - echo "not overriding $HOME/.gtkterm2rc" - else - echo "installing $HOME/.gtkterm2rc from /etc/skel" - cp -f ${sysconfdir}/skel/.gtkterm2rc $HOME/ - fi -fi -} diff --git a/packages/openmoko-inputmethods/.mtn2git_empty b/packages/openmoko-inputmethods/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-inputmethods/openmoko-keyboard_svn.bb b/packages/openmoko-inputmethods/openmoko-keyboard_svn.bb deleted file mode 100644 index e5dc9264d0..0000000000 --- a/packages/openmoko-inputmethods/openmoko-keyboard_svn.bb +++ /dev/null @@ -1,20 +0,0 @@ -DESCRIPTION = "Matchbox virtual keyboard for X11 - Openmoko fork" -LICENSE = "GPL" -DEPENDS = "libfakekey expat libxft" -SECTION = "openmoko/inputmethods" -PV = "0.0+svnr${SRCREV}" -PR = "r1" - -inherit openmoko autotools pkgconfig gettext - -SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/inputmethods;module=${PN};proto=http" - -S = "${WORKDIR}/${PN}" - -EXTRA_OECONF = "--disable-cairo" - -FILES_${PN} = "${bindir}/* \ - ${datadir}/applications \ - ${datadir}/pixmaps \ - ${datadir}/openmoko-keyboard" - diff --git a/packages/openmoko-pim/.mtn2git_empty b/packages/openmoko-pim/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-pim/files/.mtn2git_empty b/packages/openmoko-pim/files/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-pim/files/index.theme b/packages/openmoko-pim/files/index.theme deleted file mode 100644 index 4e9cf67820..0000000000 --- a/packages/openmoko-pim/files/index.theme +++ /dev/null @@ -1,654 +0,0 @@ -[Icon Theme] -Name=Hicolor -Comment=Fallback icon theme -Hidden=true -Directories=192x192/apps,128x128/actions,128x128/apps,128x128/devices,128x128/filesystems,128x128/mimetypes,96x96/actions,96x96/apps,96x96/devices,96x96/filesystems,96x96/mimetypes,72x72/apps,64x64/actions,64x64/apps,64x64/devices,64x64/filesystems,64x64/mimetypes,48x48/actions,48x48/apps,48x48/devices,48x48/filesystems,48x48/mimetypes,36x36/apps,32x32/actions,32x32/apps,32x32/devices,32x32/filesystems,32x32/mimetypes,22x22/actions,22x22/apps,22x22/devices,22x22/filesystems,22x22/mimetypes,16x16/actions,16x16/apps,16x16/devices,16x16/filesystems,16x16/mimetypes,scalable/actions,scalable/apps,scalable/devices,scalable/filesystems,scalable/mimetypes,16x16/stock/chart,16x16/stock/code,16x16/stock/data,16x16/stock/document,16x16/stock/form,16x16/stock/generic,16x16/stock/image,16x16/stock/io,16x16/stock/media,16x16/stock/navigation,16x16/stock/net,16x16/stock/object,16x16/stock/table,16x16/stock/text,24x24/actions,24x24/apps,24x24/devices,24x24/filesystems,24x24/mimetypes,24x24/stock/chart,24x24/stock/code,24x24/stock/data,24x24/stock/document,24x24/stock/form,24x24/stock/generic,24x24/stock/image,24x24/stock/io,24x24/stock/media,24x24/stock/navigation,24x24/stock/net,24x24/stock/object,24x24/stock/table,24x24/stock/text,32x32/stock/chart,32x32/stock/code,32x32/stock/data,32x32/stock/document,32x32/stock/form,32x32/stock/generic,32x32/stock/image,32x32/stock/io,32x32/stock/media,32x32/stock/navigation,32x32/stock/net,32x32/stock/object,32x32/stock/table,32x32/stock/text,36x36/stock/chart,36x36/stock/code,36x36/stock/data,36x36/stock/document,36x36/stock/form,36x36/stock/generic,36x36/stock/image,36x36/stock/io,36x36/stock/media,36x36/stock/navigation,36x36/stock/net,36x36/stock/object,36x36/stock/table,36x36/stock/text,48x48/stock/chart,48x48/stock/code,48x48/stock/data,48x48/stock/document,48x48/stock/form,48x48/stock/generic,48x48/stock/image,48x48/stock/io,48x48/stock/media,48x48/stock/navigation,48x48/stock/net,48x48/stock/object,48x48/stock/table,48x48/stock/text,scalable/emblems,192x192/emblems,96x96/emblems,72x72/emblems,48x48/emblems,36x36/emblems,24x24/emblems,16x16/emblems,12x12/emblems - -[16x16/actions] -Size=16 -Context=Actions -Type=Threshold - -[16x16/apps] -Size=16 -Context=Applications -Type=Threshold - -[16x16/devices] -Size=16 -Context=Devices -Type=Threshold - -[16x16/filesystems] -Size=16 -Context=FileSystems -Type=Threshold - -[16x16/mimetypes] -Size=16 -Context=MimeTypes -Type=Threshold - -[22x22/actions] -Size=22 -Context=Actions -Type=Threshold - -[22x22/apps] -Size=22 -Context=Applications -Type=Threshold - -[22x22/devices] -Size=22 -Context=Devices -Type=Threshold - -[22x22/filesystems] -Size=22 -Context=FileSystems -Type=Threshold - -[22x22/mimetypes] -Size=22 -Context=MimeTypes -Type=Threshold - -[24x24/actions] -Size=24 -Context=Actions -Type=Threshold - -[24x24/apps] -Size=24 -Context=Applications -Type=Threshold - -[24x24/devices] -Size=24 -Context=Devices -Type=Threshold - -[24x24/filesystems] -Size=24 -Context=FileSystems -Type=Threshold - -[24x24/mimetypes] -Size=24 -Context=MimeTypes -Type=Threshold - -[32x32/actions] -Size=32 -Context=Actions -Type=Threshold - -[32x32/apps] -Size=32 -Context=Applications -Type=Threshold - -[32x32/devices] -Size=32 -Context=Devices -Type=Threshold - -[32x32/filesystems] -Size=32 -Context=FileSystems -Type=Threshold - -[32x32/mimetypes] -Size=32 -Context=MimeTypes -Type=Threshold - -[36x36/apps] -Size=36 -Context=Applications -Type=Threshold - -[48x48/actions] -Size=48 -Context=Actions -Type=Threshold - -[48x48/apps] -Size=48 -Context=Applications -Type=Threshold - -[48x48/devices] -Size=48 -Context=Devices -Type=Threshold - -[48x48/filesystems] -Size=48 -Context=FileSystems -Type=Threshold - -[48x48/mimetypes] -Size=48 -Context=MimeTypes -Type=Threshold - -[64x64/actions] -Size=64 -Context=Actions -Type=Threshold - -[64x64/apps] -Size=64 -Context=Applications -Type=Threshold - -[64x64/devices] -Size=64 -Context=Devices -Type=Threshold - -[64x64/filesystems] -Size=64 -Context=FileSystems -Type=Threshold - -[64x64/mimetypes] -Size=64 -Context=MimeTypes -Type=Threshold - -[72x72/apps] -Size=72 -Context=Applications -Type=Threshold - -[96x96/actions] -Size=96 -Context=Actions -Type=Threshold - -[96x96/apps] -Size=96 -Context=Applications -Type=Threshold - -[96x96/devices] -Size=96 -Context=Devices -Type=Threshold - -[96x96/filesystems] -Size=96 -Context=FileSystems -Type=Threshold - -[96x96/mimetypes] -Size=96 -Context=MimeTypes -Type=Threshold - -[128x128/actions] -Size=128 -Context=Actions -Type=Threshold - -[128x128/apps] -Size=128 -Context=Applications -Type=Threshold - -[128x128/devices] -Size=128 -Context=Devices -Type=Threshold - -[128x128/filesystems] -Size=128 -Context=FileSystems -Type=Threshold - -[128x128/mimetypes] -Size=128 -Context=MimeTypes -Type=Threshold - -[192x192/apps] -Size=192 -Context=Applications -Type=Threshold - - -[scalable/actions] -MinSize=1 -Size=128 -MaxSize=256 -Context=Actions -Type=Scalable - -[scalable/apps] -MinSize=1 -Size=128 -MaxSize=256 -Context=Applications -Type=Scalable - -[scalable/devices] -MinSize=1 -Size=128 -MaxSize=256 -Context=Devices -Type=Scalable - -[scalable/filesystems] -MinSize=1 -Size=128 -MaxSize=256 -Context=FileSystems -Type=Scalable - -[scalable/mimetypes] -MinSize=1 -Size=128 -MaxSize=256 -Context=MimeTypes -Type=Scalable - -[16x16/stock/chart] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/code] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/data] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/document] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/form] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/generic] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/image] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/io] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/media] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/navigation] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/net] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/object] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/table] -Size=16 -Context=Stock -Type=Threshold - -[16x16/stock/text] -Size=16 -Context=Stock -Type=Threshold - -[24x24/stock/chart] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/code] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/data] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/document] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/form] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/generic] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/image] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/io] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/media] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/navigation] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/net] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/object] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/table] -Size=24 -Context=Stock -Type=Threshold - -[24x24/stock/text] -Size=24 -Context=Stock -Type=Threshold - -[32x32/stock/chart] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/code] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/data] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/document] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/form] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/generic] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/image] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/io] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/media] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/navigation] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/net] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/object] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/table] -Size=32 -Context=Stock -Type=Threshold - -[32x32/stock/text] -Size=32 -Context=Stock -Type=Threshold - -[36x36/stock/chart] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/code] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/data] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/document] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/form] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/generic] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/image] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/io] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/media] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/navigation] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/net] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/object] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/table] -Size=36 -Context=Stock -Type=Threshold - -[36x36/stock/text] -Size=36 -Context=Stock -Type=Threshold - -[48x48/stock/chart] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/code] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/data] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/document] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/form] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/generic] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/image] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/io] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/media] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/navigation] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/net] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/object] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/table] -Size=48 -Context=Stock -Type=Threshold - -[48x48/stock/text] -Size=48 -Context=Stock -Type=Threshold - -[scalable/emblems] -MinSize=1 -Size=128 -MaxSize=256 -Context=Emblems -Type=Scalable - -[192x192/emblems] -Size=192 -Context=Emblems -Type=Threshold - -[96x96/emblems] -Size=96 -Context=Emblems -Type=Threshold - -[72x72/emblems] -Size=72 -Context=Emblems -Type=Threshold - -[48x48/emblems] -Size=48 -Context=Emblems -Type=Threshold - -[36x36/emblems] -Size=36 -Context=Emblems -Type=Threshold - -[24x24/emblems] -Size=24 -Context=Emblems -Type=Threshold - -[16x16/emblems] -Size=16 -Context=Emblems -Type=Threshold - -[12x12/emblems] -Size=12 -Context=Emblems -Type=Threshold - diff --git a/packages/openmoko-pim/files/intltool-update.in b/packages/openmoko-pim/files/intltool-update.in deleted file mode 100644 index 0342a2740c..0000000000 --- a/packages/openmoko-pim/files/intltool-update.in +++ /dev/null @@ -1,1089 +0,0 @@ -#!@INTLTOOL_PERL@ -# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- - -# -# The Intltool Message Updater -# -# Copyright (C) 2000-2003 Free Software Foundation. -# -# Intltool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# version 2 published by the Free Software Foundation. -# -# Intltool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. -# -# Authors: Kenneth Christiansen -# Maciej Stachowiak -# Darin Adler - -## Release information -my $PROGRAM = "intltool-update"; -my $VERSION = "0.35.0"; -my $PACKAGE = "intltool"; - -## Loaded modules -use strict; -use Getopt::Long; -use Cwd; -use File::Copy; -use File::Find; - -## Scalars used by the option stuff -my $HELP_ARG = 0; -my $VERSION_ARG = 0; -my $DIST_ARG = 0; -my $POT_ARG = 0; -my $HEADERS_ARG = 0; -my $MAINTAIN_ARG = 0; -my $REPORT_ARG = 0; -my $VERBOSE = 0; -my $GETTEXT_PACKAGE = ""; -my $OUTPUT_FILE = ""; - -my @languages; -my %varhash = (); -my %po_files_by_lang = (); - -# Regular expressions to categorize file types. -# FIXME: Please check if the following is correct - -my $xml_support = -"xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required) -"ui|". # Bonobo specific - User Interface desc. files -"lang|". # ? -"glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required) -"scm(?:\\.in)*|". # ? (Note: .in is not required) -"oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files -"etspec|". # ? -"server(?:\\.in)+|". # Bonobo specific -"sheet(?:\\.in)+|". # ? -"schemas(?:\\.in)+|". # GConf specific -"pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer. -"kbd(?:\\.in)+"; # GOK specific. - -my $ini_support = -"icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec -"desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec -"caves(?:\\.in)+|". # GNOME Games specific -"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec -"soundlist(?:\\.in)+|". # GNOME specific -"keys(?:\\.in)+|". # GNOME Mime database specific -"theme(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec -"service(?:\\.in)+"; # DBus specific - -my $buildin_gettext_support = -"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py"; - -## Always flush buffer when printing -$| = 1; - -## Sometimes the source tree will be rooted somewhere else. -my $SRCDIR = "."; -my $POTFILES_in; - -$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"}; -$POTFILES_in = "<$SRCDIR/POTFILES.in"; - -my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null'); - -## Handle options -GetOptions -( - "help" => \$HELP_ARG, - "version" => \$VERSION_ARG, - "dist|d" => \$DIST_ARG, - "pot|p" => \$POT_ARG, - "headers|s" => \$HEADERS_ARG, - "maintain|m" => \$MAINTAIN_ARG, - "report|r" => \$REPORT_ARG, - "verbose|x" => \$VERBOSE, - "gettext-package|g=s" => \$GETTEXT_PACKAGE, - "output-file|o=s" => \$OUTPUT_FILE, - ) or &Console_WriteError_InvalidOption; - -&Console_Write_IntltoolHelp if $HELP_ARG; -&Console_Write_IntltoolVersion if $VERSION_ARG; - -my $arg_count = ($DIST_ARG > 0) - + ($POT_ARG > 0) - + ($HEADERS_ARG > 0) - + ($MAINTAIN_ARG > 0) - + ($REPORT_ARG > 0); - -&Console_Write_IntltoolHelp if $arg_count > 1; - -# --version and --help don't require a module name -my $MODULE = $GETTEXT_PACKAGE || &FindPackageName || "unknown"; - -if ($POT_ARG) -{ - &GenerateHeaders; - &GeneratePOTemplate; -} -elsif ($HEADERS_ARG) -{ - &GenerateHeaders; -} -elsif ($MAINTAIN_ARG) -{ - &FindLeftoutFiles; -} -elsif ($REPORT_ARG) -{ - &GenerateHeaders; - &GeneratePOTemplate; - &Console_Write_CoverageReport; -} -elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/) -{ - my $lang = $ARGV[0]; - - ## Report error if the language file supplied - ## to the command line is non-existent - &Console_WriteError_NotExisting("$SRCDIR/$lang.po") - if ! -s "$SRCDIR/$lang.po"; - - if (!$DIST_ARG) - { - print "Working, please wait..." if $VERBOSE; - &GenerateHeaders; - &GeneratePOTemplate; - } - &POFile_Update ($lang, $OUTPUT_FILE); - &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE); -} -else -{ - &Console_Write_IntltoolHelp; -} - -exit; - -######### - -sub Console_Write_IntltoolVersion -{ - print <<_EOF_; -${PROGRAM} (${PACKAGE}) $VERSION -Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler. - -Copyright (C) 2000-2003 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -_EOF_ - exit; -} - -sub Console_Write_IntltoolHelp -{ - print <<_EOF_; -Usage: ${PROGRAM} [OPTION]... LANGCODE -Updates PO template files and merge them with the translations. - -Mode of operation (only one is allowed): - -p, --pot generate the PO template only - -s, --headers generate the header files in POTFILES.in - -m, --maintain search for left out files from POTFILES.in - -r, --report display a status report for the module - -d, --dist merge LANGCODE.po with existing PO template - -Extra options: - -g, --gettext-package=NAME override PO template name, useful with --pot - -o, --output-file=FILE write merged translation to FILE - -x, --verbose display lots of feedback - --help display this help and exit - --version output version information and exit - -Examples of use: -${PROGRAM} --pot just create a new PO template -${PROGRAM} xy create new PO template and merge xy.po with it - -Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE") -or send email to . -_EOF_ - exit; -} - -sub echo_n -{ - my $str = shift; - my $ret = `echo "$str"`; - - $ret =~ s/\n$//; # do we need the "s" flag? - - return $ret; -} - -sub POFile_DetermineType ($) -{ - my $type = $_; - my $gettext_type; - - my $xml_regex = "(?:" . $xml_support . ")"; - my $ini_regex = "(?:" . $ini_support . ")"; - my $buildin_regex = "(?:" . $buildin_gettext_support . ")"; - - if ($type =~ /\[type: gettext\/([^\]].*)]/) - { - $gettext_type=$1; - } - elsif ($type =~ /schemas(\.in)+$/) - { - $gettext_type="schemas"; - } - elsif ($type =~ /glade2?(\.in)*$/) - { - $gettext_type="glade"; - } - elsif ($type =~ /scm(\.in)*$/) - { - $gettext_type="scheme"; - } - elsif ($type =~ /keys(\.in)+$/) - { - $gettext_type="keys"; - } - - # bucket types - - elsif ($type =~ /$xml_regex$/) - { - $gettext_type="xml"; - } - elsif ($type =~ /$ini_regex$/) - { - $gettext_type="ini"; - } - elsif ($type =~ /$buildin_regex$/) - { - $gettext_type="buildin"; - } - else - { - $gettext_type="unknown"; - } - - return "gettext\/$gettext_type"; -} - -sub TextFile_DetermineEncoding ($) -{ - my $gettext_code="ASCII"; # All files are ASCII by default - my $filetype=`file $_ | cut -d ' ' -f 2`; - - if ($? eq "0") - { - if ($filetype =~ /^(ISO|UTF)/) - { - chomp ($gettext_code = $filetype); - } - elsif ($filetype =~ /^XML/) - { - $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8 - } - } - - return $gettext_code; -} - -sub isNotValidMissing -{ - my ($file) = @_; - - return if $file =~ /^\{arch\}\/.*$/; - return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/; -} - -sub FindLeftoutFiles -{ - my (@buf_i18n_plain, - @buf_i18n_xml, - @buf_i18n_xml_unmarked, - @buf_i18n_ini, - @buf_potfiles, - @buf_potfiles_ignore, - @buf_allfiles, - @buf_allfiles_sorted, - @buf_potfiles_sorted - ); - - ## Search and find all translatable files - find sub { - push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/; - push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/; - push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/; - push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/; - }, ".."; - - - open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n"; - @buf_potfiles = grep !/^(#|\s*$)/, ; - close POTFILES; - - foreach (@buf_potfiles) { - s/^\[.*]\s*//; - } - - print "Searching for missing translatable files...\n" if $VERBOSE; - - ## Check if we should ignore some found files, when - ## comparing with POTFILES.in - foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") - { - (-s $ignore) or next; - - if ("$ignore" eq "POTFILES.ignore") - { - print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n". - "content of this file to POTFILES.skip.\n"; - } - - print "Found $ignore: Ignoring files...\n" if $VERBOSE; - open FILE, "<$ignore" or die "ERROR: Failed to open $ignore!\n"; - - while () - { - push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/; - } - close FILE; - - @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles); - } - - foreach my $file (@buf_i18n_plain) - { - my $in_comment = 0; - my $in_macro = 0; - - open FILE, "<$file"; - while () - { - # Handle continued multi-line comment. - if ($in_comment) - { - next unless s-.*\*/--; - $in_comment = 0; - } - - # Handle continued macro. - if ($in_macro) - { - $in_macro = 0 unless /\\$/; - next; - } - - # Handle start of macro (or any preprocessor directive). - if (/^\s*\#/) - { - $in_macro = 1 if /^([^\\]|\\.)*\\$/; - next; - } - - # Handle comments and quoted text. - while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy - { - my $match = $1; - if ($match eq "/*") - { - if (!s-/\*.*?\*/--) - { - s-/\*.*--; - $in_comment = 1; - } - } - elsif ($match eq "//") - { - s-//.*--; - } - else # ' or " - { - if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) - { - warn "mismatched quotes at line $. in $file\n"; - s-$match.*--; - } - } - } - - if (/\.GetString ?\(QUOTEDTEXT/) - { - if (defined isNotValidMissing (unpack("x3 A*", $file))) { - ## Remove the first 3 chars and add newline - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - } - last; - } - - if (/_\(QUOTEDTEXT/) - { - if (defined isNotValidMissing (unpack("x3 A*", $file))) { - ## Remove the first 3 chars and add newline - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - } - last; - } - } - close FILE; - } - - foreach my $file (@buf_i18n_xml) - { - open FILE, "<$file"; - - while () - { - # FIXME: share the pattern matching code with intltool-extract - if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/) - { - if (defined isNotValidMissing (unpack("x3 A*", $file))) { - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - } - last; - } - } - close FILE; - } - - foreach my $file (@buf_i18n_ini) - { - open FILE, "<$file"; - while () - { - if (/_(.*)=/) - { - if (defined isNotValidMissing (unpack("x3 A*", $file))) { - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - } - last; - } - } - close FILE; - } - - foreach my $file (@buf_i18n_xml_unmarked) - { - if (defined isNotValidMissing (unpack("x3 A*", $file))) { - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - } - } - - - @buf_allfiles_sorted = sort (@buf_allfiles); - @buf_potfiles_sorted = sort (@buf_potfiles); - - my %in2; - foreach (@buf_potfiles_sorted) - { - $in2{$_} = 1; - } - - my @result; - - foreach (@buf_allfiles_sorted) - { - if (!exists($in2{$_})) - { - push @result, $_ - } - } - - my @buf_potfiles_notexist; - - foreach (@buf_potfiles_sorted) - { - chomp (my $dummy = $_); - if ("$dummy" ne "" and ! -f "../$dummy") - { - push @buf_potfiles_notexist, $_; - } - } - - ## Save file with information about the files missing - ## if any, and give information about this procedure. - if (@result + @buf_potfiles_notexist > 0) - { - if (@result) - { - print "\n" if $VERBOSE; - unlink "missing"; - open OUT, ">missing"; - print OUT @result; - close OUT; - warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n". - "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n"; - print STDERR @result, "\n"; - warn "If some of these files are left out on purpose then please add them to\n". - "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n". - "of left out files has been written in the current directory.\n"; - } - if (@buf_potfiles_notexist) - { - unlink "notexist"; - open OUT, ">notexist"; - print OUT @buf_potfiles_notexist; - close OUT; - warn "\n" if ($VERBOSE or @result); - warn "\e[1mThe following files do not exist anymore:\e[0m\n\n"; - warn @buf_potfiles_notexist, "\n"; - warn "Please remove them from POTFILES.in or POTFILES.skip. A file \e[1m'notexist'\e[0m\n". - "containing this list of absent files has been written in the current directory.\n"; - } - } - - ## If there is nothing to complain about, notify the user - else { - print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE; - } -} - -sub Console_WriteError_InvalidOption -{ - ## Handle invalid arguments - print STDERR "Try `${PROGRAM} --help' for more information.\n"; - exit 1; -} - -sub GenerateHeaders -{ - my $EXTRACT = "@INTLTOOL_EXTRACT@"; - chomp $EXTRACT; - - $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"}; - - ## Generate the .h header files, so we can allow glade and - ## xml translation support - if (! -x "$EXTRACT") - { - print STDERR "\n *** The intltool-extract script wasn't found!" - ."\n *** Without it, intltool-update can not generate files.\n"; - exit; - } - else - { - open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n"; - - while () - { - chomp; - next if /^\[\s*encoding/; - - ## Find xml files in POTFILES.in and generate the - ## files with help from the extract script - - my $gettext_type= &POFile_DetermineType ($1); - - if (/\.($xml_support|$ini_support)$/ || /^\[/) - { - s/^\[[^\[].*]\s*//; - - my $filename = "../$_"; - - if ($VERBOSE) - { - system ($EXTRACT, "--update", "--srcdir=$SRCDIR", - "--type=$gettext_type", $filename); - } - else - { - system ($EXTRACT, "--update", "--type=$gettext_type", - "--srcdir=$SRCDIR", "--quiet", $filename); - } - } - } - close FILE; - } -} - -# -# Generate .pot file from POTFILES.in -# -sub GeneratePOTemplate -{ - my $XGETTEXT = $ENV{"XGETTEXT"} || "@INTLTOOL_XGETTEXT@"; - my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || ''; - chomp $XGETTEXT; - - if (! -x $XGETTEXT) - { - print STDERR " *** xgettext is not found on this system!\n". - " *** Without it, intltool-update can not extract strings.\n"; - exit; - } - - print "Building $MODULE.pot...\n" if $VERBOSE; - - open INFILE, $POTFILES_in; - unlink "POTFILES.in.temp"; - open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing"); - - my $gettext_support_nonascii = 0; - - # checks for GNU gettext >= 0.12 - my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`; - if ($? == 0) - { - $gettext_support_nonascii = 1; - } - else - { - # urge everybody to upgrade gettext - print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n". - " strings. That means you should install a version of gettext\n". - " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n". - " or have to let non-ASCII strings untranslated. (If there is any)\n"; - } - - my $encoding = "ASCII"; - my $forced_gettext_code; - my @temp_headers; - my $encoding_problem_is_reported = 0; - - while () - { - next if (/^#/ or /^\s*$/); - - chomp; - - my $gettext_code; - - if (/^\[\s*encoding:\s*(.*)\s*\]/) - { - $forced_gettext_code=$1; - } - elsif (/\.($xml_support|$ini_support)$/ || /^\[/) - { - s/^\[.*]\s*//; - print OUTFILE "../$_.h\n"; - push @temp_headers, "../$_.h"; - $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code); - } - else - { - if ($SRCDIR eq ".") { - print OUTFILE "../$_\n"; - } else { - print OUTFILE "$SRCDIR/../$_\n"; - } - $gettext_code = &TextFile_DetermineEncoding ("../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code); - } - - next if (! $gettext_support_nonascii); - - if (defined $forced_gettext_code) - { - $encoding=$forced_gettext_code; - } - elsif (defined $gettext_code and "$encoding" ne "$gettext_code") - { - if ($encoding eq "ASCII") - { - $encoding=$gettext_code; - } - elsif ($gettext_code ne "ASCII") - { - # Only report once because the message is quite long - if (! $encoding_problem_is_reported) - { - print STDERR "WARNING: You should use the same file encoding for all your project files,\n". - " but $PROGRAM thinks that most of the source files are in\n". - " $encoding encoding, while \"$_\" is (likely) in\n". - " $gettext_code encoding. If you are sure that all translatable strings\n". - " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n". - " line to POTFILES.in:\n\n". - " [encoding: UTF-8]\n\n". - " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n". - "(such warning message will only be reported once.)\n"; - $encoding_problem_is_reported = 1; - } - } - } - } - - close OUTFILE; - close INFILE; - - unlink "$MODULE.pot"; - my @xgettext_argument=("$XGETTEXT", - "--add-comments", - "--directory\=\.", - "--output\=$MODULE\.pot", - "--files-from\=\.\/POTFILES\.in\.temp"); - my $XGETTEXT_KEYWORDS = &FindPOTKeywords; - push @xgettext_argument, $XGETTEXT_KEYWORDS; - my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress; - push @xgettext_argument, "--msgid-bugs-address\=$MSGID_BUGS_ADDRESS" if $MSGID_BUGS_ADDRESS; - push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii); - push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS; - my $xgettext_command = join ' ', @xgettext_argument; - - # intercept xgettext error message - print "Running $xgettext_command\n" if $VERBOSE; - my $xgettext_error_msg = `$xgettext_command 2>\&1`; - my $command_failed = $?; - - unlink "POTFILES.in.temp"; - - print "Removing generated header (.h) files..." if $VERBOSE; - unlink foreach (@temp_headers); - print "done.\n" if $VERBOSE; - - if (! $command_failed) - { - if (! -e "$MODULE.pot") - { - print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE; - } - else - { - print "Wrote $MODULE.pot\n" if $VERBOSE; - } - } - else - { - if ($xgettext_error_msg =~ /--from-code/) - { - # replace non-ASCII error message with a more useful one. - print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n". - " string marked for translation. Please make sure that all strings marked\n". - " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n". - " following line to POTFILES.in and rerun $PROGRAM:\n\n". - " [encoding: UTF-8]\n\n"; - } - else - { - print STDERR "$xgettext_error_msg"; - if (-e "$MODULE.pot") - { - # is this possible? - print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n". - " Please consult error message above if there is any.\n"; - } - else - { - print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n". - " error message above if there is any.\n"; - } - } - exit (1); - } -} - -sub POFile_Update -{ - -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n"; - - my $MSGMERGE = $ENV{"MSGMERGE"} || "@INTLTOOL_MSGMERGE@"; - my ($lang, $outfile) = @_; - - print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE; - - my $infile = "$SRCDIR/$lang.po"; - $outfile = "$SRCDIR/$lang.po" if ($outfile eq ""); - - # I think msgmerge won't overwrite old file if merge is not successful - system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot"); -} - -sub Console_WriteError_NotExisting -{ - my ($file) = @_; - - ## Report error if supplied language file is non-existing - print STDERR "$PROGRAM: $file does not exist!\n"; - print STDERR "Try '$PROGRAM --help' for more information.\n"; - exit; -} - -sub GatherPOFiles -{ - my @po_files = glob ("./*.po"); - - @languages = map (&POFile_GetLanguage, @po_files); - - foreach my $lang (@languages) - { - $po_files_by_lang{$lang} = shift (@po_files); - } -} - -sub POFile_GetLanguage ($) -{ - s/^(.*\/)?(.+)\.po$/$2/; - return $_; -} - -sub Console_Write_TranslationStatus -{ - my ($lang, $output_file) = @_; - my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@"; - - $output_file = "$SRCDIR/$lang.po" if ($output_file eq ""); - - system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file); -} - -sub Console_Write_CoverageReport -{ - my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@"; - - &GatherPOFiles; - - foreach my $lang (@languages) - { - print "$lang: "; - &POFile_Update ($lang, ""); - } - - print "\n\n * Current translation support in $MODULE \n\n"; - - foreach my $lang (@languages) - { - print "$lang: "; - system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po"); - } -} - -sub SubstituteVariable -{ - my ($str) = @_; - - # always need to rewind file whenever it has been accessed - seek (CONF, 0, 0); - - # cache each variable. varhash is global to we can add - # variables elsewhere. - while () - { - if (/^(\w+)=(.*)$/) - { - ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/; - } - } - - if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) - { - my $rest = $3; - my $untouched = $1; - my $sub = ""; - # Ignore recursive definitions of variables - $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/; - - return SubstituteVariable ("$untouched$sub$rest"); - } - - # We're using Perl backticks ` and "echo -n" here in order to - # expand any shell escapes (such as backticks themselves) in every variable - return echo_n ($str); -} - -sub CONF_Handle_Open -{ - my $base_dirname = getcwd(); - $base_dirname =~ s@.*/@@; - - my ($conf_in, $src_dir); - - if ($base_dirname =~ /^po(-.+)?$/) - { - if (-f "Makevars") - { - my $makefile_source; - - local (*IN); - open (IN, ") - { - if (/^top_builddir[ \t]*=/) - { - $src_dir = $_; - $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; - - chomp $src_dir; - if (-f "$src_dir" . "/configure.ac") { - $conf_in = "$src_dir" . "/configure.ac" . "\n"; - } else { - $conf_in = "$src_dir" . "/configure.in" . "\n"; - } - last; - } - } - close IN; - - $conf_in || die "Cannot find top_builddir in Makevars."; - } - elsif (-f "../configure.ac") - { - $conf_in = "../configure.ac"; - } - elsif (-f "../configure.in") - { - $conf_in = "../configure.in"; - } - else - { - my $makefile_source; - - local (*IN); - open (IN, ") - { - if (/^top_srcdir[ \t]*=/) - { - $src_dir = $_; - $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; - - chomp $src_dir; - $conf_in = "$src_dir" . "/configure.in" . "\n"; - - last; - } - } - close IN; - - $conf_in || die "Cannot find top_srcdir in Makefile."; - } - - open (CONF, "<$conf_in"); - } - else - { - print STDERR "$PROGRAM: Unable to proceed.\n" . - "Make sure to run this script inside the po directory.\n"; - exit; - } -} - -sub FindPackageName -{ - my $version; - my $domain = &FindMakevarsDomain; - my $name = $domain || "untitled"; - - &CONF_Handle_Open; - - my $conf_source; { - local (*IN); - open (IN, "<&CONF") || return $name; - seek (IN, 0, 0); - local $/; # slurp mode - $conf_source = ; - close IN; - } - - # priority for getting package name: - # 1. GETTEXT_PACKAGE - # 2. first argument of AC_INIT (with >= 2 arguments) - # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument) - - # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m - # the \s makes this not work, why? - if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m) - { - ($name, $version) = ($1, $2); - $name =~ s/[\[\]\s]//g; - $version =~ s/[\[\]\s]//g; - $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); - $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); - $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); - $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); - } - - if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m) - { - ($name, $version) = ($1, $2); - $name =~ s/[\[\]\s]//g; - $version =~ s/[\[\]\s]//g; - $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); - $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); - $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); - $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); - } - - # \s makes this not work, why? - $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m; - - # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value - # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables. - $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g; - - $name = $domain if $domain; - - $name = SubstituteVariable ($name); - $name =~ s/^["'](.*)["']$/$1/; - - return $name if $name; -} - - -sub FindPOTKeywords -{ - - my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_"; - my $varname = "XGETTEXT_OPTIONS"; - my $make_source; { - local (*IN); - open (IN, "; - close IN; - } - - $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m; - - return $keywords; -} - -sub FindMakevarsDomain -{ - - my $domain = ""; - my $makevars_source; { - local (*IN); - open (IN, "; - close IN; - } - - $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m; - $domain =~ s/^\s+//; - $domain =~ s/\s+$//; - - return $domain; -} - -sub FindMakevarsBugAddress -{ - - my $address = ""; - my $makevars_source; { - local (*IN); - open (IN, "; - close IN; - } - - $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m; - $address =~ s/^\s+//; - $address =~ s/\s+$//; - - return $address; -} diff --git a/packages/openmoko-pim/files/openmoko-dates.desktop b/packages/openmoko-pim/files/openmoko-dates.desktop deleted file mode 100644 index f13cadeb9a..0000000000 --- a/packages/openmoko-pim/files/openmoko-dates.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Dates -Comment=Dates -Exec=dates -Icon=openmoko-dates -Terminal=false -Type=Application -Categories=GTK;Application;PIM;Office -MimeType=text/x-vcard; -SingleInstance=false -StartupNotify=true diff --git a/packages/openmoko-pim/files/openmoko-dates.png b/packages/openmoko-pim/files/openmoko-dates.png deleted file mode 100644 index ebe04f4096..0000000000 Binary files a/packages/openmoko-pim/files/openmoko-dates.png and /dev/null differ diff --git a/packages/openmoko-pim/files/stock_contact.png b/packages/openmoko-pim/files/stock_contact.png deleted file mode 100644 index 123b4485ac..0000000000 Binary files a/packages/openmoko-pim/files/stock_contact.png and /dev/null differ diff --git a/packages/openmoko-pim/files/stock_person.png b/packages/openmoko-pim/files/stock_person.png deleted file mode 100644 index 2b1328b4e2..0000000000 Binary files a/packages/openmoko-pim/files/stock_person.png and /dev/null differ diff --git a/packages/openmoko-pim/openmoko-contacts_svn.bb b/packages/openmoko-pim/openmoko-contacts_svn.bb deleted file mode 100644 index 49177e1c4d..0000000000 --- a/packages/openmoko-pim/openmoko-contacts_svn.bb +++ /dev/null @@ -1,31 +0,0 @@ -DESCRIPTION = "The Openmoko address book" -LICENSE = "GPL" -SECTION = "openmoko/pim" -DEPENDS += "glib-2.0 gtk+ libglade eds-dbus gnome-vfs openmoko-libs" -RDEPENDS = "gnome-vfs-plugin-file libedata-book" -RRECOMMENDS = "gnome-vfs-plugin-http" -PV = "0.1+svnr${SRCREV}" -PR = "r3" - -inherit openmoko - -SRC_URI += "\ - file://intltool-update.in \ - file://stock_contact.png \ - file://stock_person.png" - -EXTRA_OECONF = "--enable-gnome-vfs" - -do_configure_prepend() { - install -m 644 ${WORKDIR}/intltool-update.in ${S} -} - -do_install_append () { - install -d ${D}/${datadir}/pixmaps - install -m 0644 ${WORKDIR}/stock_contact.png ${D}/${datadir}/pixmaps - install -m 0644 ${WORKDIR}/stock_person.png ${D}/${datadir}/pixmaps -} - -FILES_${PN} += "${datadir}/pixmaps/stock_contact.png \ - ${datadir}/pixmaps/stock_person.png" - diff --git a/packages/openmoko-pim/openmoko-dates_svn.bb b/packages/openmoko-pim/openmoko-dates_svn.bb deleted file mode 100644 index b43b738131..0000000000 --- a/packages/openmoko-pim/openmoko-dates_svn.bb +++ /dev/null @@ -1,29 +0,0 @@ -DESCRIPTION = "The Openmoko Dates Application" -SECTION = "openmoko/pim" -LICENSE = "GPL" -DEPENDS = "glib-2.0 gtk+ libglade eds-dbus openmoko-libs" -RDEPENDS = "libedata-cal" -PV = "0.1+svnr${SRCREV}" -PR = "r9" - -inherit gnome autotools pkgconfig gtk-icon-cache - -SRC_URI = "svn://svn.o-hand.com/repos/dates/branches/;module=openmoko;proto=http \ - file://openmoko-dates.png \ - file://openmoko-dates.desktop" - -S = "${WORKDIR}/openmoko" - -EXTRA_OECONF = "--enable-omoko" - -do_install_append () { - rm -rf ${D}${datadir}/icons - rm -rf ${D}${datadir}/applications/dates.desktop - install -d ${D}/${datadir}/pixmaps - install -m 0644 ${WORKDIR}/openmoko-dates.png ${D}/${datadir}/pixmaps/ - install -m 0644 ${WORKDIR}/openmoko-dates.desktop ${D}${datadir}/applications/ -} - -FILES_${PN} += "${datadir}/pixmaps \ - ${datadir}/dates/" - diff --git a/packages/openmoko-pim/openmoko-tasks_svn.bb b/packages/openmoko-pim/openmoko-tasks_svn.bb deleted file mode 100644 index 08acf4e9d3..0000000000 --- a/packages/openmoko-pim/openmoko-tasks_svn.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "The Openmoko Tasks Application" -SECTION = "openmoko/pim" -LICENSE = "GPL" -DEPENDS = "glib-2.0 gtk+ libglade eds-dbus openmoko-libs" -RDEPENDS = "libedata-cal" -PV = "0.1+svnr${SRCREV}" -PR = "r0" - -inherit gnome autotools pkgconfig gtk-icon-cache - -SRC_URI = "svn://svn.o-hand.com/repos/tasks/;module=trunk;proto=http" -S = "${WORKDIR}/trunk" - -EXTRA_OECONF = "--enable-omoko --disable-gtk" - diff --git a/packages/openmoko-pim/openmoko-today_svn.bb b/packages/openmoko-pim/openmoko-today_svn.bb deleted file mode 100644 index b26a2e8156..0000000000 --- a/packages/openmoko-pim/openmoko-today_svn.bb +++ /dev/null @@ -1,8 +0,0 @@ -DESCRIPTION = "Openmoko Today application." -SECTION = "openmoko/pim" -LICENSE = "GPL" -DEPENDS = "openmoko-libs eds-dbus startup-notification" -PV = "0.1+svnr${SRCREV}" - -inherit autotools pkgconfig gtk-icon-cache openmoko - diff --git a/packages/openmoko-tools/.mtn2git_empty b/packages/openmoko-tools/.mtn2git_empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/openmoko-tools/openmoko-chordmaster_svn.bb b/packages/openmoko-tools/openmoko-chordmaster_svn.bb deleted file mode 100644 index 9c6716c929..0000000000 --- a/packages/openmoko-tools/openmoko-chordmaster_svn.bb +++ /dev/null @@ -1,6 +0,0 @@ -DESCRIPTION = "A guitar chord database for Openmoko" -SECTION = "openmoko/tools" -PV = "0.0.1+svn${SRCDATE}" - -inherit openmoko - diff --git a/packages/openmoko-tools/pty-forward-native.bb b/packages/openmoko-tools/pty-forward-native.bb deleted file mode 100644 index 972070d6b6..0000000000 --- a/packages/openmoko-tools/pty-forward-native.bb +++ /dev/null @@ -1,24 +0,0 @@ -LICENSE="GPL" -SUMMARY="Receive a forwarded serial from serial-forward and provide a PTY" - -SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http" -S = "${WORKDIR}/serial_forward" - -inherit native - -do_compile() { - cd ${S} - oe_runmake -} - -do_stage() { - : -} - -do_deploy() { - install -d ${DEPLOY_DIR_IMAGE} - install -m 0755 ${S}/pty_forward ${DEPLOY_DIR_IMAGE}/pty-forward -} - -addtask deploy before do_package after do_install - diff --git a/packages/openmoko-tools/serial-forward.bb b/packages/openmoko-tools/serial-forward.bb deleted file mode 100644 index 3cc33770d6..0000000000 --- a/packages/openmoko-tools/serial-forward.bb +++ /dev/null @@ -1,15 +0,0 @@ -LICENSE="GPL" -SUMMARY="Forward a serial using TCP/IP" - -SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http" -S="${WORKDIR}/serial_forward" - -do_compile() { - cd ${S} - oe_runmake -} - -do_install() { - install -d ${D}/${bindir} - install -m 0755 ${S}/forward ${D}/${bindir}/${PN} -} diff --git a/packages/openmoko2/settingsgui_0.7+0.8-beta.bb b/packages/openmoko2/settingsgui_0.7+0.8-beta.bb deleted file mode 100644 index f0d6f84ce6..0000000000 --- a/packages/openmoko2/settingsgui_0.7+0.8-beta.bb +++ /dev/null @@ -1,11 +0,0 @@ -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/serial-utils/.mtn2git_empty b/packages/serial-utils/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serial-utils/pty-forward-native.bb b/packages/serial-utils/pty-forward-native.bb new file mode 100644 index 0000000000..972070d6b6 --- /dev/null +++ b/packages/serial-utils/pty-forward-native.bb @@ -0,0 +1,24 @@ +LICENSE="GPL" +SUMMARY="Receive a forwarded serial from serial-forward and provide a PTY" + +SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http" +S = "${WORKDIR}/serial_forward" + +inherit native + +do_compile() { + cd ${S} + oe_runmake +} + +do_stage() { + : +} + +do_deploy() { + install -d ${DEPLOY_DIR_IMAGE} + install -m 0755 ${S}/pty_forward ${DEPLOY_DIR_IMAGE}/pty-forward +} + +addtask deploy before do_package after do_install + diff --git a/packages/serial-utils/serial-forward.bb b/packages/serial-utils/serial-forward.bb new file mode 100644 index 0000000000..3cc33770d6 --- /dev/null +++ b/packages/serial-utils/serial-forward.bb @@ -0,0 +1,15 @@ +LICENSE="GPL" +SUMMARY="Forward a serial using TCP/IP" + +SRC_URI="svn://svn.openmoko.org/developers/zecke/;module=serial_forward;proto=http" +S="${WORKDIR}/serial_forward" + +do_compile() { + cd ${S} + oe_runmake +} + +do_install() { + install -d ${D}/${bindir} + install -m 0755 ${S}/forward ${D}/${bindir}/${PN} +} -- cgit v1.2.3 From 4ff8f98603885e1647668f4c218969b65d778f54 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 08:33:56 +0000 Subject: dsplink: add glue to hook in TI dspbios and TI c64x compiler trees into the build * The user needs to obtain dspbios and cgtools on its own and override the TI*DIR vars in local.conf to point to the correct location, default is /OE/TI --- packages/dsplink/dsplink.inc | 16 +++++++++++++++- packages/dsplink/dsplink_1.50.bb | 2 +- packages/dsplink/dsplink_1.51.00.08.bb | 2 +- packages/dsplink/files/c64xx_5.xx_linux.mk | 8 ++++---- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index d9c3c07e02..29633dae59 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -11,6 +11,13 @@ S = "${WORKDIR}/dsplink_1_50/dsplink" # Needed for buildscripts export DSPLINK = "${S}" +# Path to the dir where the TI tools are unpacked +TITOOLSDIR ?= "/OE/TI" +# Path under TITOOLSDIR where dspbios is unpacked +TIBIOSDIR ?= "bios_5_32_03" +# Path under TITOOLSDIR where the dsp toolchain is unpacked +TICGTOOLSDIR ?= "cg6x_6_1_2" + DSPLINKPLATFORM ?= "Davinci" DSPLINKPLATFORM_omap5912osk = "OMAP" @@ -48,6 +55,8 @@ KERNELARMFLAGS_armv7a = "-c -nostdinc -include $(BASE_OSINC)/linux/autoconf.h -i -Wdeclaration-after-statement -Os -marm -mabi=aapcs-linux \ -D__KERNEL__ -mno-thumb-interwork -msoft-float -fno-optimize-sibling-calls -g -fno-stack-protector -Wno-pointer-sign -g -DUSE_UDEV=1 -DOS_LINUX -DLINUX_KERNEL" +DSPFLAGS = "-q -pdr -pdv -pden -ml3 -mv64+ " + export DSPLINKPLATFORM export DSPLINKDSP @@ -59,7 +68,7 @@ do_configure () { sed -i -e s:SED_ME_SOURCEDIR:${S}:g \ -e s:SED_ME_GPPDISTRO:openembedded:g \ -e s:SED_ME_KERNELVERSION:${KERNEL_VERSION}:g \ - -e s:SED_ME_DSPDISTRO:openembedded:g \ + -e s:SED_ME_DSPDISTRO:c64xx_5.xx_linux:g \ -e s:SED_ME_PLATFORM:${DSPLINKPLATFORM}:g \ -e s:SED_ME_DSP:${DSPLINKDSP}:g \ -e s:SED_ME_SOC:${DSPLINKSOC}:g \ @@ -73,6 +82,11 @@ do_configure () { -e 's:SEDME_USER_ARMFLAGS:${USERARMFLAGS}:g' \ ${S}/make/Linux/openembedded.mk + sed -i -e s:SEDME_TITOOLS_BASEPATH:${TITOOLSDIR}:g \ + -e s:SEDME_BIOSUNPACKDIR:${TIBIOSDIR}:g \ + -e s:SEDME_CGTOOLSDIR:${TICGTOOLSDIR}:g \ + -e 's:SEDME_DSPFLAGS:${DSPFLAGS}:g' \ + ${S}/make/DspBios/c64xx_5.xx_linux.mk } PARALLEL_MAKE = "" diff --git a/packages/dsplink/dsplink_1.50.bb b/packages/dsplink/dsplink_1.50.bb index cba9bf1f97..9132389923 100644 --- a/packages/dsplink/dsplink_1.50.bb +++ b/packages/dsplink/dsplink_1.50.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r8" +PR = "r9" PE = "1" PV = "1.50" diff --git a/packages/dsplink/dsplink_1.51.00.08.bb b/packages/dsplink/dsplink_1.51.00.08.bb index d4a71b437e..36ac50f4cf 100644 --- a/packages/dsplink/dsplink_1.51.00.08.bb +++ b/packages/dsplink/dsplink_1.51.00.08.bb @@ -1,6 +1,6 @@ require dsplink.inc -PR = "r8" +PR = "r9" PE = "1" PV = "1.51" diff --git a/packages/dsplink/files/c64xx_5.xx_linux.mk b/packages/dsplink/files/c64xx_5.xx_linux.mk index d0b27d7a55..8e0e8cd116 100644 --- a/packages/dsplink/files/c64xx_5.xx_linux.mk +++ b/packages/dsplink/files/c64xx_5.xx_linux.mk @@ -35,8 +35,8 @@ USE_DISTRIBUTION := 1 # ---------------------------------------------------------------------------- # Base directory for the DSP OS # ---------------------------------------------------------------------------- -BASE_INSTALL := /opt/ti-tools -BASE_SABIOS := $(BASE_INSTALL)/bios +BASE_INSTALL := SEDME_TITOOLS_BASEPATH +BASE_SABIOS := $(BASE_INSTALL)/SEDME_BIOSUNPACKDIR BASE_BUILDOS := $(BASE_SABIOS)/packages/ti/bios # ---------------------------------------------------------------------------- @@ -47,7 +47,7 @@ XDCTOOLS_DIR := $(BASE_SABIOS)/xdctools # ---------------------------------------------------------------------------- # Base for code generation tools - compiler, linker, archiver etc. # ---------------------------------------------------------------------------- -BASE_CGTOOLS := $(BASE_INSTALL)/c6000/cgtools +BASE_CGTOOLS := $(BASE_INSTALL)/SEDME_CGTOOLSDIR BASE_CGTOOLSBIN := $(BASE_CGTOOLS)/bin # ---------------------------------------------------------------------------- @@ -135,7 +135,7 @@ CC_SW_REL := -o3 # ---------------------------------------------------------------------------- # Standard flags for the compiler # ---------------------------------------------------------------------------- -STD_CC_FLAGS := -q -pdr -pdv -pden -ml3 -mv6400 -d"CHIP_DM642" +STD_CC_FLAGS := SEDME_DSPFLAGS -d"CHIP_DM642" # ---------------------------------------------------------------------------- # Standard flags for the compiler when building an executable -- cgit v1.2.3 From 3099e5f9471bf2612f39dc6faa9998e679c62351 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 09:01:31 +0000 Subject: dsplink: remove some trailing spaces --- packages/dsplink/dsplink.inc | 3 +++ packages/dsplink/files/CURRENTCFG.MK | 2 +- packages/dsplink/files/c64xx_5.xx_linux.mk | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/dsplink/dsplink.inc b/packages/dsplink/dsplink.inc index 29633dae59..9e9dff888f 100644 --- a/packages/dsplink/dsplink.inc +++ b/packages/dsplink/dsplink.inc @@ -106,6 +106,9 @@ do_compile () { sed -i -e 's:gcc${KERNEL_CCSUFFIX}:gcc:' ${S}/make/Linux/openembedded.mk oe_runmake -C ${S}/gpp/src/samples + + oe_runmake -C ${S}/dsp/src + oe_runmake -C ${S}/dsp/src/samples } do_install () { diff --git a/packages/dsplink/files/CURRENTCFG.MK b/packages/dsplink/files/CURRENTCFG.MK index 1f932f2b77..55959854e1 100644 --- a/packages/dsplink/files/CURRENTCFG.MK +++ b/packages/dsplink/files/CURRENTCFG.MK @@ -48,7 +48,7 @@ export DSPPLATFORM := SED_ME_PLATFORM # Target GPP and DSP devices # ========================================================= export GPPDEVICE := SED_ME_PLATFORM -export DSPDEVICE := SED_ME_DSP +export DSPDEVICE := SED_ME_DSP # ========================================================= diff --git a/packages/dsplink/files/c64xx_5.xx_linux.mk b/packages/dsplink/files/c64xx_5.xx_linux.mk index 8e0e8cd116..ea806fff4e 100644 --- a/packages/dsplink/files/c64xx_5.xx_linux.mk +++ b/packages/dsplink/files/c64xx_5.xx_linux.mk @@ -35,7 +35,7 @@ USE_DISTRIBUTION := 1 # ---------------------------------------------------------------------------- # Base directory for the DSP OS # ---------------------------------------------------------------------------- -BASE_INSTALL := SEDME_TITOOLS_BASEPATH +BASE_INSTALL := SEDME_TITOOLS_BASEPATH BASE_SABIOS := $(BASE_INSTALL)/SEDME_BIOSUNPACKDIR BASE_BUILDOS := $(BASE_SABIOS)/packages/ti/bios -- cgit v1.2.3 From 2f11ba39ea6f6f5c239cfec189bb567404e54958 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 09:23:59 +0000 Subject: linux omap2 git: bump to 2.6.26 --- packages/linux/linux-omap2_git.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index 800a0eb02e..cf16b6a2f6 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -2,9 +2,10 @@ require linux-omap.inc FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MACHINE}" -SRCREV = "7786cd7a00ae0b18923185789380a88052f4eee7" +SRCREV = "d3b3ae0fe6c71641da19c8de466ec366d39847e3" -PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" +PV = "2.6.26" +#PV = "2.6.25+2.6.26-rc9+${PR}+git${SRCREV}" PR = "r45" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ -- cgit v1.2.3 From a27a28585eb3f4a3a6f2cad461cb00bbf82f8ea9 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 11:23:00 +0000 Subject: vlc-davince: update srcrev, use vlcs compile system (yuck!), fix description --- packages/vlc/vlc-davinci_0.8.6h.bb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/vlc/vlc-davinci_0.8.6h.bb b/packages/vlc/vlc-davinci_0.8.6h.bb index 9ed6d46fd2..9d64cb4901 100644 --- a/packages/vlc/vlc-davinci_0.8.6h.bb +++ b/packages/vlc/vlc-davinci_0.8.6h.bb @@ -1,12 +1,12 @@ -DESCRIPTION = "Video player and streamer - GPE edition" +DESCRIPTION = "Video player and streamer - davinci edition" HOMEPAGE = "http://www.videolan.org" LICENSE = "GPL" PRIORITY = "optional" SECTION = "multimedia" -SRCREV = "116b6dff4996f494b54fc0f05695ba792086ea9e" +SRCREV = "fa02f65b17429432d13a108f73744f33709dd01c" -PR = "r1" +PR = "r2" PV = "0.8.6h+${PR}+gitr${SRCREV}" @@ -45,12 +45,18 @@ do_configure() { libtoolize --force autoreconf --force -i oe_runconf + rm config.log + sed -i -e s:-L/usr/lib:-L${STAGING_LIBDIR}/:g vlc-config } do_stage() { autotools_stage_all } +do_compile() { + ${S}/compile +} + RCONFLICTS_${PN} = "vlc" FILES_${PN} += "${bindir}/vlc \ -- cgit v1.2.3 From 75eee7ef85db2e30e772b07384a519ce4bb9391b Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 11:24:17 +0000 Subject: codec-engine: hook into TI xdc and dsp toolchains --- packages/dsplink/codec-engine_2.10.bb | 24 +++- packages/dsplink/files/xdcpaths.mak | 232 ++++++++++++++++++++++++++++++++++ 2 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 packages/dsplink/files/xdcpaths.mak diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index b26a8cbc94..f4712eecce 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -13,11 +13,33 @@ PV = "2.10" # Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_10_01.tar.gz \ -" + file://xdcpaths.mak \ + " S = "${WORKDIR}/codec_engine_2_10_01" +# Path to the dir where the TI tools are unpacked +TITOOLSDIR ?= "/OE/TI" +# Path under TITOOLSDIR where dspbios is unpacked +TIBIOSDIR ?= "bios_5_32_03" +TIXDCTOOLSDIR ?= "${TIBIOSDIR}/xdctools" +# Path under TITOOLSDIR where the dsp toolchain is unpacked +TICGTOOLSDIR ?= "cg6x_6_1_2" + PARALLEL_MAKE = "" + +do_configure() { + cp ${WORKDIR}/xdcpaths.mak ${S}/examples/ + sed -i -e s:SEDME_TITOOLS_BASEPATH:${TITOOLSDIR}:g \ + -e s:SEDME_BIOSUNPACKDIR:${TITOOLSDIR}/${TIBIOSDIR}:g \ + -e 's:SEDME_S:${S}:g' \ + -e s:SEDME_XDCTOOLSUNPACKDIR:${TIXDCTOOLSDIR}:g \ + -e s:/db/toolsrc/library/tools/vendors/mvl/arm/mvl4.0-new/montavista/pro/devkit/arm/v5t_le:${CROSS_DIR}:g \ + -e s:bin/arm_v5t_le-gcc:bin/${TARGET_PREFIX}gcc:g \ + -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TICGTOOLSDIR}:g \ + ${S}/examples/xdcpaths.mak +} + do_compile() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem diff --git a/packages/dsplink/files/xdcpaths.mak b/packages/dsplink/files/xdcpaths.mak new file mode 100644 index 0000000000..3df3bf6305 --- /dev/null +++ b/packages/dsplink/files/xdcpaths.mak @@ -0,0 +1,232 @@ +# +# ======== xdcpaths.mak ======== +# definition of XDC paths and commands +# +# This makefile constructs the "search path" for the XDC tools where it finds +# numerous components and packages needed to build Codec Engine examples and +# programs. +# +# USER NOTE: +# 1) you must specify various _INSTALL_DIRs directores below to +# reflect your installation, where is CE for Codec Engine, +# BIOS for DSP/BIOS, etc. +# 2) you must specify compiler path and name in CGTOOLS_* variables below +# 3) you can remove some of the devices from the "DEVICES" list and/or remove +# some of the types of binaries from the "PROGRAMS" list to reduce +# the build time (and possibly avoid checking for presence of a component +# you don't need) + + + +# (Optional) Remove from this list the devices you're not interested in building +DEVICES := DM6446 DM355 DM6437 DM648 DM6467 + +# (Optional) Remove from the list the types of programs you're not intersted in +# building: +# APP_CLIENT -- Arm client for codecs running on the DSP, on dual-CPU systems +# DSP_SERVER -- DSP server with the codecs, running on the DSP, on dual-CPUs +# APP_LOCAL -- Client+codecs in a single program, whether Arm only or DSP only +PROGRAMS := APP_CLIENT DSP_SERVER APP_LOCAL + + +# (Mandatory) Specify where various components are installed. +# What you need depends on what device(s) you're building for, what type(s) of +# programs you are building for, and whether your Codec Engine distribution +# is a "big" one that contains all the minor components in its "cetools" +# directory. The legend: +# CE - Codec Engine (needed for Arm and for DSP) +# XDC - XDC tools (Arm and DSP) +# BIOS - DSP/BIOS (DSP only) +# XDAIS - XDAIS header files (Arm and DSP) +# FC - Framework components, various resource managers (ARM and DSP) +# CMEM - Continuous memory manager (Arm only) +# DSPLINK - Arm<->DSP communication software (Arm + DSP) +# +# you can omit directory specifications for the components you think you don't +# need (will be warned if you do, based on your DEVICES + PROGRAMS selection +# above). + +CE_INSTALL_DIR := SEDME_S +XDC_INSTALL_DIR := SEDME_XDCTOOLSUNPACKDIR +BIOS_INSTALL_DIR := SEDME_BIOSUNPACKDIR + +# no need to specify the installation directories below if your CE installation +# has cetools/ directory on top +USE_CETOOLS_IF_EXISTS := 1 +XDAIS_INSTALL_DIR := _your_xDAIS_installation_directory/xdais_6_10_01 +DSPLINK_INSTALL_DIR := _your_DSPLink_installation_directory/dsplink-davinci-v1.50-prebuilt +CMEM_INSTALL_DIR := _your_CMEM_installation_directory/cmem_2_10 +FC_INSTALL_DIR := _your_FC_installation_directory/framework_components_2_10_01 +BIOSUTILS_INSTALL_DIR := _your_BIOSUTILS_installation_directory/biosutils + + +# (Mandatory) specify correct compiler paths and names for the architectures +# you'll be building for: + +# compiler path and name for Montavista Arm 9 toolchain. NOTE: make sure the +# directory you specify has a "bin" subdirectory +CGTOOLS_MVARM9 = /db/toolsrc/library/tools/vendors/mvl/arm/mvl4.0-new/montavista/pro/devkit/arm/v5t_le +CC_MVARM9 = bin/arm_v5t_le-gcc + +# compiler path and name for TI C64x toolchain. NOTE: make sure the +# directory you specify has a "bin" subdirectory +CGTOOLS_C64P = /db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux +CC_C64P = bin/cl6x + +# ----------------------------------------------------------------------------- + +# figure out what categories of devices we are to build for +ifneq (,$(findstring DM6446,$(DEVICES))) + DEVICES_DAVINCI := 1 +endif +ifneq (,$(findstring DM6467,$(DEVICES))) + DEVICES_DAVINCI := 1 +endif +ifneq (,$(findstring DM355,$(DEVICES))) + DEVICES_ARMONLY := 1 +endif +ifneq (,$(findstring DM6437,$(DEVICES))) + DEVICES_DSPONLY := 1 +endif +ifneq (,$(findstring DM648,$(DEVICES))) + DEVICES_DSPONLY := 1 +endif + +# determine which components are necessary based on DEVICES and PROGRAMS +REQUIRE_CE := 1 +REQUIRE_XDC := 1 +REQUIRE_XDAIS := 1 +REQUIRE_FC := 1 + +ifneq (,$(findstring DM6446,$(DEVICES))) + ifneq (, $(findstring APP_CLIENT, $(PROGRAMS) )) + REQUIRE_LINK := 1 + REQUIRE_CMEM := 1 + endif + ifneq (, $(findstring DSP_SERVER, $(PROGRAMS) )) + REQUIRE_LINK := 1 + REQUIRE_BIOS := 1 + endif +endif + +ifneq (,$(findstring DM6467,$(DEVICES))) + ifneq (, $(findstring APP_CLIENT, $(PROGRAMS) )) + REQUIRE_LINK := 1 + REQUIRE_CMEM := 1 + endif + ifneq (, $(findstring DSP_SERVER, $(PROGRAMS) )) + REQUIRE_LINK := 1 + REQUIRE_BIOS := 1 + endif +endif + +ifneq (,$(findstring DM355,$(DEVICES))) + ifneq (, $(findstring APP_LOCAL, $(PROGRAMS) )) + REQUIRE_CMEM := 1 + endif +endif + +ifneq (,$(findstring DM6437,$(DEVICES))) + ifneq (, $(findstring APP_LOCAL, $(PROGRAMS) )) + REQUIRE_BIOS := 1 + endif +endif + +ifneq (,$(findstring DM648,$(DEVICES))) + ifneq (, $(findstring APP_LOCAL, $(PROGRAMS) )) + REQUIRE_BIOS := 1 + endif +endif + + +# Build the XDC path from the necessary components, verifying along the way +# that the required compoments are present +XDC_PATH := + +ERRMSG = which is invalid (could not find file "$(TEST_FILE)"). Set this in /xdcpaths.mak! See the build documentation to correct this error. + +# CE_INSTALL_DIR is the location of your Codec Engine. +ifeq ($(REQUIRE_CE), 1) + TEST_FILE := $(CE_INSTALL_DIR)/packages/ti/sdo/ce/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error CE_INSTALL_DIR is set to "$(CE_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(CE_INSTALL_DIR)/packages +endif + +# Add cetools to XDCPATH if 1) $(USE_CETOOLS_IF_EXISTS) is set, and +# 2) the CE distribution has "cetools/" +USING_CETOOLS := 0 +ifeq ($(USE_CETOOLS_IF_EXISTS), 1) + ifneq ($(wildcard $(CE_INSTALL_DIR)/cetools),) + USING_CETOOLS := 1 + XDC_PATH := $(CE_INSTALL_DIR)/cetools/packages;$(XDC_PATH) + endif +endif +ifeq ($(USING_CETOOLS),0) + # XDAIS_INSTALL_DIR is the location of your XDAIS distribution + ifeq ($(REQUIRE_XDAIS), 1) + TEST_FILE := $(XDAIS_INSTALL_DIR)/packages/ti/xdais/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error XDAIS_INSTALL_DIR is set to "$(XDAIS_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(XDC_PATH);$(XDAIS_INSTALL_DIR)/packages + endif + + # DSPLINK_INSTALL_DIR is the location of your DSPLINK distribution + ifeq ($(REQUIRE_LINK), 1) + TEST_FILE := $(DSPLINK_INSTALL_DIR)/packages/dsplink/gpp/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error DSPLINK_INSTALL_DIR is set to "$(DSPLINK_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(XDC_PATH);$(DSPLINK_INSTALL_DIR)/packages + endif + + # CMEM_INSTALL_DIR is the location of your CMEM distribution + ifeq ($(REQUIRE_CMEM), 1) + TEST_FILE := $(CMEM_INSTALL_DIR)/packages/ti/sdo/linuxutils/cmem/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error CMEM_INSTALL_DIR is set to "$(CMEM_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(XDC_PATH);$(CMEM_INSTALL_DIR)/packages + endif + + # FC_INSTALL_DIR is the location of your Frameworks Components distribution + ifeq ($(REQUIRE_FC), 1) + TEST_FILE := $(FC_INSTALL_DIR)/packages/ti/sdo/fc/dskt2/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error FC_INSTALL_DIR is set to "$(FC_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(XDC_PATH);$(FC_INSTALL_DIR)/packages + endif + + # BIOSUTILS_INSTALL_DIR is the location of your BIOSUTILS distribution + ifeq ($(REQUIRE_BIOS), 1) + TEST_FILE := $(BIOSUTILS_INSTALL_DIR)/packages/ti/bios/utils/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error BIOSUTILS_INSTALL_DIR is set to "$(BIOSUTILS_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(XDC_PATH);$(BIOSUTILS_INSTALL_DIR)/packages + endif + +endif + +# BIOS_INSTALL_DIR is the location of your BIOS distribution +ifeq ($(REQUIRE_BIOS), 1) + TEST_FILE := $(BIOS_INSTALL_DIR)/packages/ti/bios/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error BIOS_INSTALL_DIR is set to "$(BIOS_INSTALL_DIR)", $(ERRMSG)) + endif + XDC_PATH := $(XDC_PATH);$(BIOS_INSTALL_DIR)/packages +endif + +# XDC_INSTALL_DIR is the location of your XDCTOOLS installation. +ifeq ($(REQUIRE_XDC), 1) + TEST_FILE := $(XDC_INSTALL_DIR)/packages/xdc/package.xdc + ifeq ($(wildcard $(TEST_FILE)),) + $(error XDC_INSTALL_DIR is set to "$(XDC_INSTALL_DIR)", $(ERRMSG)) + endif +endif + +# XDC_PATH is complete. Any other components you could add as +# XDC_PATH := /packages;$(XDC_PATH) -- cgit v1.2.3 From d4e0d5418de78a5ee7b32b5429977b0cfc20e6d0 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 11:37:41 +0000 Subject: codec-engine: more bruteforce sed to get rid of bogus target-prefixes --- packages/dsplink/codec-engine_2.10.bb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index f4712eecce..64f1950ad2 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -33,11 +33,19 @@ do_configure() { sed -i -e s:SEDME_TITOOLS_BASEPATH:${TITOOLSDIR}:g \ -e s:SEDME_BIOSUNPACKDIR:${TITOOLSDIR}/${TIBIOSDIR}:g \ -e 's:SEDME_S:${S}:g' \ - -e s:SEDME_XDCTOOLSUNPACKDIR:${TIXDCTOOLSDIR}:g \ + -e s:SEDME_XDCTOOLSUNPACKDIR:${TITOOLSDIR}/${TIXDCTOOLSDIR}:g \ -e s:/db/toolsrc/library/tools/vendors/mvl/arm/mvl4.0-new/montavista/pro/devkit/arm/v5t_le:${CROSS_DIR}:g \ -e s:bin/arm_v5t_le-gcc:bin/${TARGET_PREFIX}gcc:g \ - -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TICGTOOLSDIR}:g \ + -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \ ${S}/examples/xdcpaths.mak + + sed -i -e s:/db/toolsrc/library/tools/vendors/mvl/arm/mvl4.0-new/montavista/pro/devkit/arm/v5t_le:${CROSS_DIR}:g \ + -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \ + ${S}/examples/user.bld + + for cfg in ${S}/examples/ti/sdo/ce/examples/apps/image_copy/package/cfg/*/*cfg ; do + sed -i -e s:arm_v5t_le-:${TAGET_PREFIX}:g $cfg + done } do_compile() { -- cgit v1.2.3 From 9a617e12f96bdae089cf9548456d9f01e36748b6 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 16 Jul 2008 13:33:54 +0000 Subject: codec-engine: pass CFLAGS to demos --- packages/dsplink/codec-engine_2.10.bb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/dsplink/codec-engine_2.10.bb b/packages/dsplink/codec-engine_2.10.bb index 64f1950ad2..199df5ac62 100644 --- a/packages/dsplink/codec-engine_2.10.bb +++ b/packages/dsplink/codec-engine_2.10.bb @@ -46,6 +46,8 @@ do_configure() { for cfg in ${S}/examples/ti/sdo/ce/examples/apps/image_copy/package/cfg/*/*cfg ; do sed -i -e s:arm_v5t_le-:${TAGET_PREFIX}:g $cfg done + + echo -n "${CFLAGS} -I${TITOOLSDIR}/${TIXDCTOOLSDIR}/packages -I${S}/packages -I${S}/cetools/packages" > ${S}/examples/ti/sdo/ce/examples/apps/speech/linuxonly/app/compiler.opt } do_compile() { @@ -76,6 +78,9 @@ do_compile() { KERNEL_VERSION=${KERNEL_VERSION} \ CC="${KERNEL_CC}" LD="${KERNEL_LD}" \ AR="${KERNEL_AR}" + +# oe_runmake -C ${S}/examples/ti/sdo/ce/examples/apps + } do_install() { -- cgit v1.2.3 From 9054b073f4b1a8a70954bfbc599aa0c24808a13d Mon Sep 17 00:00:00 2001 From: Robert Schuster Date: Wed, 16 Jul 2008 16:48:06 +0000 Subject: cacao-native 0.99.2: Fixed expected md5sum. cacaoh-native 0.99.2: Fixed expected md5sum. cacao 0.99.2: Fixed expected md5sum. --- packages/cacao/cacao-native_0.99.2.bb | 2 +- packages/cacao/cacao_0.99.2.bb | 2 +- packages/cacao/cacaoh-native_0.99.2.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cacao/cacao-native_0.99.2.bb b/packages/cacao/cacao-native_0.99.2.bb index 943a2890ea..1fd4ed8296 100644 --- a/packages/cacao/cacao-native_0.99.2.bb +++ b/packages/cacao/cacao-native_0.99.2.bb @@ -2,6 +2,6 @@ require cacao-native.inc PR = "r0" -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d" +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=912e353a26c88ba5f5f59ebb9f688e2f" diff --git a/packages/cacao/cacao_0.99.2.bb b/packages/cacao/cacao_0.99.2.bb index 5618213d2d..57ee1027a9 100644 --- a/packages/cacao/cacao_0.99.2.bb +++ b/packages/cacao/cacao_0.99.2.bb @@ -2,7 +2,7 @@ require cacao.inc PR = "r0" -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d \ +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=912e353a26c88ba5f5f59ebb9f688e2f \ " # Quirks for Nokia N800: diff --git a/packages/cacao/cacaoh-native_0.99.2.bb b/packages/cacao/cacaoh-native_0.99.2.bb index 11735d4f31..594e79f7de 100644 --- a/packages/cacao/cacaoh-native_0.99.2.bb +++ b/packages/cacao/cacaoh-native_0.99.2.bb @@ -2,4 +2,4 @@ require cacaoh-native.inc PR = "r0" -SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=a5641452c7ba173060c99ed700950b3d" +SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=912e353a26c88ba5f5f59ebb9f688e2f" -- cgit v1.2.3 From 1b5750ccf37250a55b95e42b64fb4d952202057d Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 16:49:49 +0000 Subject: add fluidsynth, a software synthesizer. bb by thomasg --- packages/fluidsynth/.mtn2git_empty | 0 packages/fluidsynth/fluidsynth_1.0.8.bb | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 packages/fluidsynth/.mtn2git_empty create mode 100644 packages/fluidsynth/fluidsynth_1.0.8.bb diff --git a/packages/fluidsynth/.mtn2git_empty b/packages/fluidsynth/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/fluidsynth/fluidsynth_1.0.8.bb b/packages/fluidsynth/fluidsynth_1.0.8.bb new file mode 100644 index 0000000000..075140c92f --- /dev/null +++ b/packages/fluidsynth/fluidsynth_1.0.8.bb @@ -0,0 +1,14 @@ +DESCRIPTION = "Fluidsynth is a software synthesizer" +HOMEPAGE = "http://www.fluidsynth.org/" +SECTION = "libs/multimedia" +LICENSE = "GPLv2" +DEPENDS = "alsa-lib ncurses" + +SRC_URI = "http://savannah.nongnu.org/download/fluid/${P}.tar.gz" + +inherit autotools pkgconfig lib_package + +do_stage() { + autotools_stage_all +} + -- cgit v1.2.3 From 17213f7ac988fba8e76d117934c8c353884b724b Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 18:47:39 +0000 Subject: sane-srcrevs.inc: bump openmoko-appmanager2 (fixed a configure bug), remove SRCREVS for removed entries --- conf/distro/include/sane-srcrevs.inc | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc index f646ee55cb..25cc3bc5df 100644 --- a/conf/distro/include/sane-srcrevs.inc +++ b/conf/distro/include/sane-srcrevs.inc @@ -100,30 +100,19 @@ SRCREV_pn-osb-nrcore ?= "126" SRCREV_pn-openmoko-agpsui ?= "7" SRCREV_pn-openmoko-alsa-scenarios ?= "4406" SRCREV_pn-openmoko-appearance ?= "3262" -SRCREV_pn-openmoko-appmanager ?= "1851" -SRCREV_pn-openmoko-appmanager2 ?= "3442" +SRCREV_pn-openmoko-appmanager2 ?= "4530" SRCREV_pn-openmoko-browser2 ?= "4172" -SRCREV_pn-openmoko-calculator ?= "2404" SRCREV_pn-openmoko-calculator2 ?= "3655" -SRCREV_pn-openmoko-common ?= "397" SRCREV_pn-openmoko-common2 ?= "3259" -SRCREV_pn-openmoko-contacts ?= "2298" SRCREV_pn-openmoko-contacts2 ?= "418" -SRCREV_pn-openmoko-dates ?= "467" SRCREV_pn-openmoko-dates2 ?= "673" -SRCREV_pn-openmoko-dialer ?= "2811" SRCREV_pn-openmoko-dialer2 ?= "4343" SRCREV_pn-openmoko-feedreader2 ?= "3645" -SRCREV_pn-openmoko-finger-demo ?= "1671" SRCREV_pn-openmoko-firststart2 ?= "3158" SRCREV_pn-openmoko-footer ?= "2354" -SRCREV_pn-openmoko-icon-theme-standard ?= "2232" SRCREV_pn-openmoko-icon-theme-standard2 ?= "4232" SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "4232" -SRCREV_pn-openmoko-keyboard ?= "1631" -SRCREV_pn-openmoko-libs ?= "2367" SRCREV_pn-openmoko-mediaplayer2 ?= "4173" -SRCREV_pn-openmoko-messages ?= "2276" SRCREV_pn-openmoko-messages2 ?= "4340" SRCREV_pn-openmoko-panel-battery ?= "3360" SRCREV_pn-openmoko-panel-bt ?= "4331" @@ -136,22 +125,12 @@ SRCREV_pn-openmoko-panel-mainmenu ?= "2567" SRCREV_pn-openmoko-panel-memory ?= "3903" SRCREV_pn-openmoko-panel-usb ?= "3360" SRCREV_pn-openmoko-panel-wifi ?= "4344" -SRCREV_pn-openmoko-sample2 ?= "3528" -SRCREV_pn-openmoko-session ?= "152" SRCREV_pn-openmoko-sample2 ?= "3537" -SRCREV_pn-openmoko-simplemediaplayer ?= "1688" SRCREV_pn-openmoko-sound-theme-standard2 ?= "4271" -SRCREV_pn-openmoko-stylus-demo ?= "2324" -SRCREV_pn-openmoko-stylus-demo-simple ?= "1818" -SRCREV_pn-openmoko-taskmanager ?= "1663" -SRCREV_pn-openmoko-tasks ?= "320" SRCREV_pn-openmoko-tasks2 ?= "399" SRCREV_pn-openmoko-terminal2 ?= "4039" -SRCREV_pn-openmoko-theme-standard ?= "4167" -SRCREV_pn-openmoko-theme-standard-qvga ?= "4167" SRCREV_pn-openmoko-theme-standard2 ?= "4338" SRCREV_pn-openmoko-theme-standard2-qvga ?= "3425" -SRCREV_pn-openmoko-today ?= "3056" SRCREV_pn-openmoko-today2 ?= "4168" SRCREV_pn-openmoko-today2-folders ?= "3704" SRCREV_pn-openmoko-toolchain-scripts ?= "4430" -- cgit v1.2.3 From c8a3dd281779936b15a7a7c9b40ffc05ac2f928e Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Wed, 16 Jul 2008 18:53:35 +0000 Subject: openmoko-panel-gsm: DEPEND on libmokogsmd2 --- packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb index d90c6a4de7..e8a5bc877d 100644 --- a/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb +++ b/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb @@ -1,6 +1,6 @@ DESCRIPTION = "Shows the GSM / GPRS status in the Openmoko panel" -DEPENDS = "libgsmd libnotify" +DEPENDS = "libmokogsmd2 libnotify" PV = "0.1.0+svn${SVNREV}" -PR = "r1" +PR = "r2" inherit openmoko-panel-plugin -- cgit v1.2.3 From ce10c417ad24f7d9d1db3e63a076d56ac9143252 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Wed, 16 Jul 2008 20:47:19 +0000 Subject: u-boot_git : Update revs for davinci machines davinci EVM and SFF SDR. --- packages/u-boot/u-boot_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/u-boot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb index df8b43014c..6ccc6f2614 100644 --- a/packages/u-boot/u-boot_git.bb +++ b/packages/u-boot/u-boot_git.bb @@ -1,14 +1,14 @@ require u-boot.inc PR="r11" -SRCREV_davinci-sffsdr = "a524e112b424c6843800ea2f19d3a8cf01d0aa94" +SRCREV_davinci-sffsdr = "699f05125509249072a0b865c8d35520d97cd501" +SRCREV_davinci-dvevm = "699f05125509249072a0b865c8d35520d97cd501" SRCREV_beagleboard = "bde63587622c4b830a27d1ddf7265843de9e994f" SRCREV_neuros-osd2 = "70ee511d37ca99afee00edc27be36d0af2832bbc" SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git " SRC_URI_sequoia = "git://www.denx.de/git/u-boot.git;protocol=git;tag=cf3b41e0c1111dbb865b6e34e9f3c3d3145a6093 " SRC_URI_neuros-osd2 = "git://git.neurostechnology.com/git/u-boot;protocol=git;branch=neuros" -SRC_URI_append_davinci-sffsdr = " file://sffsdr-u-boot.patch;patch=1 " SRC_URI_append_beagleboard = "file://base.patch;patch=1 \ file://name.patch;patch=1 \ -- cgit v1.2.3